Всем привет. Создал однороговый bash-скрипт, который делает следующее:
Устанавливает UniFi контроллер (5.0.7)
Устанавливает Nginx
Устанавливает EFF CertBot
Запрашивает бесплатный сертификат LetsEncrypt для вашего домена
Устанавливает сертификат в Unifi HTTPS и Nginx
Настраивает Nginx на перенаправление всего трафика с :80 на :443
Настраивает Nginx на проксирование :443 на localhost:8443
Этот скрипт обеспечит вашей конфигурации прокси NGINX рейтинг A+ по SSL Labs.
Возможные проблемы:
Если у вас уже есть сервер Nginx, который выполняет другие задачи, возможно, стоит настроить параметр sites-enabled/default под вашу установку.
Медленная генерация DH-параметров. Её можно уменьшить с 4096 до 2048, но это на ваше усмотрение.
LetsEncrypt выдает сертификаты только на 3 месяца. Убедитесь, что продление работает.
Настройка:
Измените две верхние переменные. NAME — ваш полный домен (fqdn), который хотите настроить, EMAIL — ваш email для связи LetsEncrypt, если сертификат истекает.
Скопируйте два блока отдельно и создайте для каждого файл в /opt.
Первый блок нужно запускать с правами root только при первоначальной установке. Подмножество этого блока можно использовать для активации поддержки Lets Encrypt на уже существующем сервере.
Второй блок запускайте с правами root по расписанию, примерно каждые 30-45 дней. Этот блок продлевает сертификаты и обновляет цепочку ключей UniFi.
Тестовые системы:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
VERSION="16.04 LTS (Xenial Xerus)"
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
VERSION="14.04.4 LTS, Trusty Tahr"
Установочный скрипт: сохранить в /opt/le.sh и сделать исполняемым через chmod +x /opt/le.sh
#!/bin/sh
NAME="my.fqdn.com"
EMAIL="my@email.add"
apt-get update
echo y | apt-get upgrade
cd /opt
rm unifi_sysvinit_all.deb
rm certbot-auto
wget
wget
chmod a+x certbot-auto
dpkg -i unifi_sysvinit_all.deb
apt-get -f install
echo y | apt-get install nginx
service nginx stop
echo y | ./certbot-auto certonly -d $NAME --standalone --standalone-supported-challenges http-01 --email $EMAIL
service nginx start
service unifi stop
echo aircontrolenterprise | openssl pkcs12 -export -inkey /etc/letsencrypt/live/$NAME/privkey.pem -in /etc/letsencrypt/live/$NAME/cert.pem -name unifi -out /etc/letsencrypt/live/$NAME/keys.p12 -password stdin
echo y | keytool -importkeystore -srckeystore /etc/letsencrypt/live/$NAME/keys.p12 -srcstoretype pkcs12 -destkeystore /usr/lib/unifi/data/keystore -storepass aircontrolenterprise -srcstorepass aircontrolenterprise
service unifi start
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
# NGINX PROXY
service nginx stop
echo "server {
listen 80;
server_name $NAME;
return 301 https://$NAME\$request_uri;
}
server {
listen 443 ssl default_server;
server_name $NAME;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_certificate /etc/letsencrypt/live/$NAME/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$NAME/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 300;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Frame-Options DENY;
error_log /var/log/unifi/nginx.log;
proxy_cache off;
proxy_store off;
location / {
proxy_set_header Referer \"\";
proxy_pass ;
}
}" > /etc/nginx/sites-enabled/default
service nginx start
Скрипт продления: сохранить в /opt/le-renew.sh, задать в crontab: 30 12 2 * * /opt/le-renew.sh
#!/bin/sh
NAME="my.fqdn.com"
service nginx stop
echo y | ./certbot-auto renew --standalone --standalone-supported-challenges http-01
service nginx start
service unifi stop
echo aircontrolenterprise | openssl pkcs12 -export -inkey /etc/letsencrypt/live/$NAME/privkey.pem -in /etc/letsencrypt/live/$NAME/cert.pem -name unifi -out /etc/letsencrypt/live/$NAME/keys.p12 -password stdin
echo y | keytool -importkeystore -srckeystore /etc/letsencrypt/live/$NAME/keys.p12 -srcstoretype pkcs12 -destkeystore /usr/lib/unifi/data/keystore -storepass aircontrolenterprise -srcstorepass aircontrolenterprise
service unifi start
Комментарии и предложения приветствуются!
Устанавливает UniFi контроллер (5.0.7)
Устанавливает Nginx
Устанавливает EFF CertBot
Запрашивает бесплатный сертификат LetsEncrypt для вашего домена
Устанавливает сертификат в Unifi HTTPS и Nginx
Настраивает Nginx на перенаправление всего трафика с :80 на :443
Настраивает Nginx на проксирование :443 на localhost:8443
Этот скрипт обеспечит вашей конфигурации прокси NGINX рейтинг A+ по SSL Labs.
Возможные проблемы:
Если у вас уже есть сервер Nginx, который выполняет другие задачи, возможно, стоит настроить параметр sites-enabled/default под вашу установку.
Медленная генерация DH-параметров. Её можно уменьшить с 4096 до 2048, но это на ваше усмотрение.
LetsEncrypt выдает сертификаты только на 3 месяца. Убедитесь, что продление работает.
Настройка:
Измените две верхние переменные. NAME — ваш полный домен (fqdn), который хотите настроить, EMAIL — ваш email для связи LetsEncrypt, если сертификат истекает.
Скопируйте два блока отдельно и создайте для каждого файл в /opt.
Первый блок нужно запускать с правами root только при первоначальной установке. Подмножество этого блока можно использовать для активации поддержки Lets Encrypt на уже существующем сервере.
Второй блок запускайте с правами root по расписанию, примерно каждые 30-45 дней. Этот блок продлевает сертификаты и обновляет цепочку ключей UniFi.
Тестовые системы:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
VERSION="16.04 LTS (Xenial Xerus)"
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
VERSION="14.04.4 LTS, Trusty Tahr"
Установочный скрипт: сохранить в /opt/le.sh и сделать исполняемым через chmod +x /opt/le.sh
#!/bin/sh
NAME="my.fqdn.com"
EMAIL="my@email.add"
apt-get update
echo y | apt-get upgrade
cd /opt
rm unifi_sysvinit_all.deb
rm certbot-auto
wget
wget
chmod a+x certbot-auto
dpkg -i unifi_sysvinit_all.deb
apt-get -f install
echo y | apt-get install nginx
service nginx stop
echo y | ./certbot-auto certonly -d $NAME --standalone --standalone-supported-challenges http-01 --email $EMAIL
service nginx start
service unifi stop
echo aircontrolenterprise | openssl pkcs12 -export -inkey /etc/letsencrypt/live/$NAME/privkey.pem -in /etc/letsencrypt/live/$NAME/cert.pem -name unifi -out /etc/letsencrypt/live/$NAME/keys.p12 -password stdin
echo y | keytool -importkeystore -srckeystore /etc/letsencrypt/live/$NAME/keys.p12 -srcstoretype pkcs12 -destkeystore /usr/lib/unifi/data/keystore -storepass aircontrolenterprise -srcstorepass aircontrolenterprise
service unifi start
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
# NGINX PROXY
service nginx stop
echo "server {
listen 80;
server_name $NAME;
return 301 https://$NAME\$request_uri;
}
server {
listen 443 ssl default_server;
server_name $NAME;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_certificate /etc/letsencrypt/live/$NAME/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/$NAME/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 300;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Frame-Options DENY;
error_log /var/log/unifi/nginx.log;
proxy_cache off;
proxy_store off;
location / {
proxy_set_header Referer \"\";
proxy_pass ;
}
}" > /etc/nginx/sites-enabled/default
service nginx start
Скрипт продления: сохранить в /opt/le-renew.sh, задать в crontab: 30 12 2 * * /opt/le-renew.sh
#!/bin/sh
NAME="my.fqdn.com"
service nginx stop
echo y | ./certbot-auto renew --standalone --standalone-supported-challenges http-01
service nginx start
service unifi stop
echo aircontrolenterprise | openssl pkcs12 -export -inkey /etc/letsencrypt/live/$NAME/privkey.pem -in /etc/letsencrypt/live/$NAME/cert.pem -name unifi -out /etc/letsencrypt/live/$NAME/keys.p12 -password stdin
echo y | keytool -importkeystore -srckeystore /etc/letsencrypt/live/$NAME/keys.p12 -srcstoretype pkcs12 -destkeystore /usr/lib/unifi/data/keystore -storepass aircontrolenterprise -srcstorepass aircontrolenterprise
service unifi start
Комментарии и предложения приветствуются!
