Browse Source

create scripts for haproxy and mail(nginx) 02.11.21:00.53

master 3 years ago
parent
commit
43b3af8138

+ 33 - 23
autocertbot.sh

@@ -1,33 +1,50 @@
1 1
 #!/bin/bash
2 2
 # script convert end make ssl sert for https
3
-# info - 
4
-#
3
+# info - script auto update cert for sites
4
+# version 1.10.1
5
+# author Koshuba V.O.- 2021
6
+# master@qbpro.ru
7
+# 
5 8
 path_certbot="/etc/letsencrypt/live";
6 9
 path_ssl="/etc/ssl/private";
7 10
 source certbot.conf;
8
-logfile="/var/log/syslog";
11
+log="/var/log/syslog";
9 12
 #
10 13
 cmd=$1;
11 14
 #
12
-
13
-function makesslkey() {
14
-:>/etc/ssl/crt-list.txt
15
+## if keys update certbot - recreate keys for sites
16
+function makekeys() {
17
+valtrue=0;
18
+rdate=$(date +%Y-%m-%d);
19
+rtime=$(date +%H:%M);
15 20
 for ((dmn=0; dmn != ${#domains[@]}; dmn++))
16 21
     do
17
-    cat $path_certbot/${domains[$dmn]}/cert.pem > $path_ssl/${domains[$dmn]}.pem;
18
-    cat $path_certbot/${domains[$dmn]}/chain.pem >> $path_ssl/${domains[$dmn]}.pem;
19
-    cat $path_certbot/${domains[$dmn]}/fullchain.pem >> $path_ssl/${domains[$dmn]}.pem;
20
-    cat $path_certbot/${domains[$dmn]}/privkey.pem >> $path_ssl/${domains[$dmn]}.pem;
21
-done
22
-for ((icrt=0; icrt != ${#domains[@]}; icrt++))
23
-    do
24
-    echo "$path_ssl/${domains[$icrt]}.pem">>/etc/ssl/crt-list.txt
22
+     keydate=$(ls -l --time-style=long-iso $path_certbot/${domains[$dmn]}/cert.pem |awk {'print$6'});
23
+     keytime=$(ls -l --time-style=long-iso $path_certbot/${domains[$dmn]}/cert.pem |awk {'print$7'});
24
+     if [ "$keydate" = "$rdate" ] && [ "$keytime" = "$rtime" ];
25
+        then
26
+         ((valtrue++));
27
+        cat $path_certbot/${domains[$dmn]}/cert.pem > $path_ssl/${domains[$dmn]}.pem;
28
+        cat $path_certbot/${domains[$dmn]}/chain.pem >> $path_ssl/${domains[$dmn]}.pem;
29
+        cat $path_certbot/${domains[$dmn]}/fullchain.pem >> $path_ssl/${domains[$dmn]}.pem;
30
+        cat $path_certbot/${domains[$dmn]}/privkey.pem >> $path_ssl/${domains[$dmn]}.pem;
31
+        echo "$rdate - $rtime - autocertbot: recreate cert for  ${domains[$dmn]}">> $log;
32
+      fi
25 33
 done
34
+if [ $valtrue != 0 ];
35
+   then
36
+     :>/etc/ssl/crt-list.txt
37
+        for ((icrt=0; icrt != ${#domains[@]}; icrt++))
38
+         do
39
+          echo "$path_ssl/${domains[$icrt]}.pem">>/etc/ssl/crt-list.txt
40
+        done
41
+fi
26 42
 }
27 43
 
28 44
 function renew() {
29 45
 /etc/init.d/haproxy stop;
30 46
     certbot renew;
47
+    makekeys;
31 48
 /etc/init.d/haproxy start;
32 49
 }
33 50
 
@@ -39,7 +56,6 @@ for ((dmn=0; dmn != ${#domains[@]}; dmn++))
39 56
     do
40 57
       certbot certonly --preferred-challenges http --standalone -d ${domains[$dmn]};
41 58
     done
42
-makesslkey;
43 59
 /etc/init.d/haproxy start;
44 60
 }
45 61
 
@@ -51,11 +67,6 @@ case "$cmd" in
51 67
 createCert;
52 68
 ;;
53 69
 
54
-## create cert keys
55
-"--keylist" | "--keylist" )
56
-makesslkey;
57
-;;
58
-
59 70
 ## update cert
60 71
 "--update" | "--update" )
61 72
 renew;
@@ -64,9 +75,8 @@ renew;
64 75
 ## start defaults
65 76
 
66 77
 * )
67
-echo "please input pameters: autocertbot.sh --create | --update | --keylist";
78
+echo "please input pameters: autocertbot.sh --create | --update";
68 79
 echo "autocertbot.sh --create; create new certificate"
69 80
 echo "autocertbot.sh --update; update certificates;"
70
-echo "autocertbot.sh --keylist; create ssl keylist;"
71 81
 ;;
72
-esac
82
+esac

+ 3 - 2
certbot.conf

@@ -1,3 +1,4 @@
1
-adminmail="admin@mydomain.ru";
2
-domains=( "mydomain.ru"
1
+adminmail="admin@mydomen.com";
2
+domains=( "mydomen.com"
3
+          "webmail.mydomen.com"
3 4
            );

+ 5 - 0
certbot4mail/certbot4mail.conf

@@ -0,0 +1,5 @@
1
+adminmail="admin@mydomen.com";
2
+webcrt="/home/wwwmails/letsencrypt";
3
+domains=( 
4
+ "mail.mydomen.com" 
5
+ );

+ 77 - 0
certbot4mail/certbot4mail.sh

@@ -0,0 +1,77 @@
1
+#!/bin/bash
2
+#
3
+# необходимо для работы: nginx,certbot
4
+# create new cert
5
+path_ssl="/etc/ssl";
6
+path_cert="/etc/letsencrypt/live";
7
+source "/etc/scripts/certbot4mail/certbot4mail.conf";
8
+log="/var/log/syslog";
9
+#
10
+cmd=$1;
11
+#
12
+
13
+function createCert() {
14
+for ((dmn=0; dmn != ${#domains[@]}; dmn++))
15
+    do
16
+certbot certonly --webroot --agree-tos --email $adminmail -w $webcrt -d ${domains[$dmn]}
17
+done
18
+}
19
+
20
+function renew() {
21
+certbot renew;
22
+valtrue=0;
23
+rdate=$(date +%Y-%m-%d);
24
+rtime=$(date +%H:%M);
25
+for ((dmn=0; dmn != ${#domains[@]}; dmn++))
26
+    do
27
+     keydate=$(ls -l --time-style=long-iso $path_cert/${domains[$dmn]}/cert.pem |awk {'print$6'});
28
+     keytime=$(ls -l --time-style=long-iso $path_cert/${domains[$dmn]}/cert.pem |awk {'print$7'});
29
+     if [ "$keydate" = "$rdate" ] && [ "$keytime" = "$rtime" ];
30
+        then
31
+         ((valtrue++));
32
+        cat $path_cert/${domains[$dmn]}/cert.pem > $path_ssl/private/${domains[$dmn]}.pem;
33
+        cat $path_cert/${domains[$dmn]}/chain.pem >> $path_ssl/private/${domains[$dmn]}.pem;
34
+        cat $path_cert/${domains[$dmn]}/fullchain.pem >> $path_ssl/private/${domains[$dmn]}.pem;
35
+        cat $path_cert/${domains[$dmn]}/privkey.pem >> $path_ssl/private/${domains[$dmn]}.pem;
36
+#
37
+	cp -f $path_ssl/private/${domains[$pem_index]}.pem $path_ssl/certs/${domains[$pem_index]}.pem
38
+    	cd $path_ssl/certs
39
+    	chmod 600 ${domains[$pem_index]}.pem
40
+	ln -sf ${domains[$pem_index]}.pem `openssl x509 -noout -hash < ${domains[$pem_index]}.pem`.0
41
+        cd $path_ssl
42
+        echo "$(date) - certbot4mail.sh: update cert for  ${domains[$dmn]}">> $log;
43
+      fi
44
+done
45
+if [ $valtrue != 0 ];
46
+   then
47
+     :>/etc/ssl/crt-list.txt
48
+        for ((icrt=0; icrt != ${#domains[@]}; icrt++))
49
+         do
50
+          echo "$path_ssl/${domains[$icrt]}.pem">>/etc/ssl/crt-list.txt
51
+        done
52
+/etc/init.d/dbmail restart;
53
+/etc/init.d/stunnel4 restart;
54
+fi
55
+}
56
+
57
+
58
+case "$cmd" in
59
+
60
+## create cert
61
+"--create" | "--create" )
62
+createCert;
63
+;;
64
+
65
+## update cert
66
+"--update" | "--update" )
67
+renew;
68
+;;
69
+
70
+## start defaults
71
+
72
+* )
73
+echo "please input pameters: certbot4mail.sh --create | --update";
74
+echo "certbot4mail.sh --create; create new certificate"
75
+echo "certbot4mail.sh --update; update certificates;"
76
+;;
77
+esac

+ 74 - 0
certbot4mail/examples/nginx.conf

@@ -0,0 +1,74 @@
1
+user  www-data;
2
+worker_processes  1;
3
+
4
+error_log  /var/log/nginx/error.log warn;
5
+pid        /var/run/nginx.pid;
6
+
7
+
8
+events {
9
+    worker_connections  1024;
10
+}
11
+
12
+
13
+http {
14
+    include       /etc/nginx/mime.types;
15
+    default_type  application/octet-stream;
16
+
17
+    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
18
+                      '$status $body_bytes_sent "$http_referer" '
19
+                      '"$http_user_agent" "$http_x_forwarded_for"';
20
+
21
+    #access_log  /var/log/nginx/access.log  main;
22
+    access_log off;
23
+
24
+    sendfile        on;
25
+    tcp_nopush     on;
26
+    server_tokens off;
27
+    keepalive_timeout  65;
28
+
29
+    gzip  on;
30
+###
31
+    gzip_disable "msie6";
32
+    gzip_comp_level 4;
33
+    gzip_buffers 16 8k;
34
+    gzip_http_version 1.1;
35
+    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
36
+    
37
+### include /etc/nginx/conf.d/*.conf;
38
+    include /etc/nginx/conf.d/*.conf;
39
+    include /etc/nginx/sites-enabled/*;
40
+####
41
+    tcp_nodelay on;
42
+    types_hash_max_size 2048;
43
+    
44
+### codepage
45
+    charset        utf8;
46
+    source_charset utf8;
47
+    
48
+#### Tuning system....
49
+    ## - Защита
50
+    # Максимальный размер буфера для хранения тела запроса клиента
51
+    ##client_body_buffer_size 1K;
52
+    # Максимальный размер буфера для хранения заголовков запроса клиента
53
+    ##client_header_buffer_size 1k;
54
+    # Максимальный размер тела запроса клиента, прописанный в поле Content-Length заголовка. Если сервер должен поддерживать загрузку файлов, это значение необходимо увеличить
55
+    ##client_max_body_size 1k;
56
+    # для Rouncube
57
+    client_max_body_size 40M;
58
+    # Количество и размер буферов для чтения большого заголовка запроса клиента
59
+    ##large_client_header_buffers 2 1k;
60
+    
61
+    
62
+    ## - Увеличиваем скорость
63
+    # Таймаут при чтении тела запроса клиента
64
+    client_body_timeout   10;
65
+    # Таймаут при чтении заголовка запроса клиента
66
+    client_header_timeout 10;
67
+    # Таймаут, по истечению которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
68
+    ##keepalive_timeout     5 5;
69
+    # Таймаут при передаче ответа клиенту
70
+    send_timeout          10;
71
+    ## transparent ip
72
+    set_real_ip_from 127.0.0.1;
73
+    real_ip_header X-Real-IP;
74
+}

+ 16 - 0
certbot4mail/examples/nginx/sites-avalable/http_mail-mydomen

@@ -0,0 +1,16 @@
1
+server {
2
+    listen      192.4.1.6:80;
3
+
4
+    server_name mail.mydomen.ru;
5
+    if ($http_host !~ "^mail.mydomen.ru$"){
6
+        rewrite ^(.*)$ http://mail.mydomen.ru$1 redirect;
7
+    }
8
+    root /home/wwwmails/mail-mydomen;
9
+
10
+    error_log /var/log/nginx/err-mail_mydomen_ru.log;
11
+    access_log /var/log/nginx/access-mail_mydomen_ru.log;
12
+
13
+    include /etc/nginx/templates/content.conf;
14
+    include /etc/nginx/templates/letsencrypt.conf;
15
+}
16
+

+ 11 - 0
certbot4mail/examples/nginx/templates/content.conf

@@ -0,0 +1,11 @@
1
+  error_page 404 /404.html;
2
+   error_page 500 502 503 504 /50x.html;
3
+
4
+ location ~* \.(css|js|jpg|jpeg|gif|png|ico|txt|woff|otf|eot|svg|ttf|html|xml|css|js)$ {
5
+   expires 30d;
6
+   error_page 404 @notfound;
7
+ }
8
+
9
+ location = /50x.html {
10
+   root /usr/share/nginx/html;
11
+ }

+ 9 - 0
certbot4mail/examples/nginx/templates/index_php.conf

@@ -0,0 +1,9 @@
1
+ location / {
2
+   if ($http_host ~* "^www\.(.+)$"){
3
+   rewrite ^(.*)$ http://%1/$1 redirect; 
4
+   } 
5
+   if (!-e $request_filename){ 
6
+   rewrite ^(.*)$ /index.php; 
7
+   }
8
+   index   index.htm index.html index.php;
9
+ }

+ 9 - 0
certbot4mail/examples/nginx/templates/letsencrypt.conf

@@ -0,0 +1,9 @@
1
+location /.well-known {
2
+   allow all;
3
+   default_type "text/plain";
4
+   alias /home/wwwmails/letsencrypt/.well-known;
5
+ }
6
+
7
+ location = /.well-known {
8
+   return 404;
9
+ }

+ 19 - 0
certbot4mail/examples/nginx/templates/php7.x-fpm.conf

@@ -0,0 +1,19 @@
1
+location ~ ^/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
2
+   deny all;
3
+}
4
+
5
+location ~ ^/(bin|SQL)/ {
6
+   deny all;
7
+}
8
+
9
+location ~ \.php$ {
10
+   try_files $uri $uri/ /index.php =404;
11
+   fastcgi_pass  localhost:9000;
12
+   fastcgi_index index.php;
13
+   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
14
+   include fastcgi_params;
15
+}
16
+
17
+location ~ /.ht {
18
+    deny all;
19
+}

+ 13 - 0
certbot4mail/examples/nginx/templates/proxy.conf

@@ -0,0 +1,13 @@
1
+proxy_redirect              off;
2
+proxy_set_header            Host $host;
3
+proxy_set_header            X-Real-IP $remote_addr;
4
+proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
5
+client_max_body_size        10m;
6
+client_body_buffer_size     128k;
7
+proxy_connect_timeout       90;
8
+proxy_send_timeout          90;
9
+proxy_read_timeout          90;
10
+proxy_buffer_size           4k;
11
+proxy_buffers               4 32k;
12
+proxy_busy_buffers_size     64k;
13
+proxy_temp_file_write_size  64k;