Поиск по сайту:

Как установить Nginx с Lets encrypt и получить A+ от SSLLabs Test


На этой странице

  1. Предпосылки
  2. Что будем делать?
  3. Шаг 1. Установите веб-сервер Nginx
    1. В Ubuntu 18.04.
    2. В CentOS 7.5.

    1. В Ubuntu 18.04 — Брандмауэр UFW
    2. В CentOS 7.5 — брандмауэр

    1. В Ubuntu 18.04
    2. В CentOS 7.5
    3. В Ubuntu 18.04
    4. В CentOS 7.5
    5. В Ubuntu 18.04
    6. В CentOS 7.5

    1. В Ubuntu 18.04
    2. В CentOS 7.5

    1. В Ubuntu 18.04
    2. В CentOS 7.5
    3. Только в системе Ubuntu

    В этом руководстве я пошагово покажу вам, как установить и настроить веб-сервер Nginx с сертификатом Letsencrypt. В этом руководстве рассказывается об установке веб-сервера Nginx, установке инструмента для шифрования, создании SSL-сертификата для шифрования, настройке виртуального хоста nginx с помощью SSL и создании дополнительной конфигурации SSL, чтобы получить A+ от SSL Test SSL Labs.

    Предпосылки

    • Сервер Linux — Ubuntu 18.04 или CentOS 7.5
    • Привилегии root

    Что мы будем делать?

    1. Установите веб-сервер Nginx
    2. Настройка брандмауэра UFW/Firewalld
    3. Установить позволяет зашифровать и создать SSL-сертификат
    4. Настроить безопасный SSL
    5. Настройка виртуального хоста Nginx с SSL
    6. Тестирование

    Шаг 1 — Установите веб-сервер Nginx

    В этом руководстве мы поможем вам установить и настроить веб-сервер Nginx с Letsencrypt на обоих серверах Linux — Ubuntu 18.04 и CentOS 7.5.

    На Убунту 18.04.

    Обновите репозиторий, а затем установите nginx с помощью приведенной ниже команды apt.

    sudo apt update
    sudo apt install nginx -y

    На CentOS 7.5.

    Установите репозиторий EPEL в систему CentOS и установите Nginx с помощью команды yum.

    sudo yum install epel-release -y
    sudo yum install nginx -y

    После завершения установки запустите службу Nginx и включите ее запуск каждый раз при загрузке системы.

    systemctl start nginx
    systemctl enable nginx

    Теперь веб-сервер Nginx установлен и работает на HTTP-порту 80 по умолчанию. Проверьте его с помощью приведенной ниже команды netstat.

    netstat -plntu

    Шаг 2 — Настройка брандмауэра UFW — Firewalld

    Рекомендуется включить брандмауэр на сервере и открыть определенный порт по мере необходимости. На этом этапе мы покажем, как открыть порты SSH, HTTP и HTTPS на серверах Linux Ubuntu 18.04 с использованием брандмауэра UFW и Firewalld в системе CentOS 7.5.

    В Ubuntu 18.04 — Брандмауэр UFW

    Перед включением брандмауэра UFW в системе Ubuntu убедитесь, что порт SSH включен в конфигурации брандмауэра списка.

    Добавьте порт службы SSH в конфигурацию брандмауэра с помощью команды ufw, а затем включите службу брандмауэра UFW.

    ufw allow ssh
    ufw enable

    Теперь добавьте службы HTTP и HTTPS.

    ufw allow http
    ufw allow https

    Служебные порты SSH, HTTP и HTTPS были добавлены в список служб брандмауэра UFW, проверьте его с помощью приведенной ниже команды.

    ufw status

    В CentOS 7.5 — брандмауэр

    Прежде чем добавлять порт и службы в firewelld, убедитесь, что служба firewalld запущена и работает.

    Запустите службу firewalld и разрешите ей запускаться каждый раз при загрузке системы.

    systemctl start firewalld
    systemctl enable firewalld

    Примечание:

    • Служба SSH будет включена по умолчанию в списке служб Firewald.

    Теперь добавьте службы HTTP и HTTPS с помощью приведенной ниже команды firewall-cmd.

    firewall-cmd --add-service=http --permanent
    firewall-cmd --add-service=https --permanent

    Перезагрузите конфигурацию firewalld и проверьте список служб.

    firewall-cmd --reload
    firewall-cmd --list-services

    И вы получите службы SSH, HTTP и HTTPS в списке.

    Шаг 3 — Установите Letsencrypt и сгенерируйте сертификаты

    На этом этапе мы установим инструмент letsencrypt и сгенерируем надежные SSL-сертификаты Letsencrypt с помощью команды cerbot.

    В Ubuntu 18.04

    Установите пакеты letsencrypt с помощью приведенной ниже команды apt.

    sudo apt install letsencrypt -y

    В CentOS 7.5

    Теперь установите пакеты letsencrypt на CentOS 7, используя команду yum ниже.

    sudo yum install certbot -y

    После завершения установки мы создадим новую конфигурацию, которая будет использоваться для создания файлов сертификатов SSL.

    В Ubuntu 18.04

    Перейдите в каталог конфигурации /etc/nginx и создайте новый файл конфигурации cerbot.conf в каталоге snippets.

    cd /etc/nginx/
    vim snippets/certbot.conf

    Вставьте туда следующую конфигурацию.

        location /.well-known {
            alias /var/www/html/.well-known;
        }

    Сохранить и выйти.

    Теперь отредактируйте файл виртуального хоста Nginx по умолчанию.

    vim sites-available/default

    Добавьте следующую конфигурацию в блоки server {..}.

        include snippets/certbot.conf;

    Сохранить и выйти.

    В CentOS 7.5

    Перейдите в каталог конфигурации /etc/nginx и создайте новый файл конфигурации certbot.conf в каталоге default.d.

    cd /etc/nginx/
    vim default.d/certbot.conf

    Вставьте конфигурацию ниже.

        location /.well-known {
            alias /usr/share/nginx/html/.well-known;
        }

    Сохранить и выйти.

    Теперь проверьте конфигурацию nginx и убедитесь, что ошибок нет, затем перезапустите службу nginx.

    nginx -t
    systemctl restart nginx

    Затем сгенерируйте SSL-сертификаты letsencrypt с помощью команды certbot.

    В Ubuntu 18.04

    certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email  -w /var/www/html -d hakase-labs.io

    В CentOS 7.5

    certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email  -w /usr/share/nginx/html -d hakase-labs.io

    Примечание:

    • Мы укажем размер ключа RSA для нашего домена равным 4096, и мы определим метод аутентификации для корневого веб-каталога по умолчанию /var/www/html в системе Ubuntu и каталога /usr/share/nginx/html для Система CentOS 7.

    По завершении вы получите все файлы сертификатов SSL для доменного имени в каталоге /etc/letsencrypt/live.

    Чтобы обеспечить дополнительную безопасность, мы сгенерируем ключ DHPARAM 4096 с помощью команды OpenSSL, как показано ниже.

    openssl dhparam -out /etc/nginx/dhparam.pem 4096

    Ключ DHPARAM был сгенерирован для каталога /etc/nginx.

    Шаг 4 — Настройка SSL

    На этом шаге мы определим конфигурацию SSL для веб-сервера Nginx. Мы создадим новую конфигурацию ssl.conf, которая содержит настроенную безопасность конфигурации SSL, ориентированную на веб-сервер Nginx.

    В Ubuntu 18.04

    Перейдите в каталог конфигурации /etc/nginx/ и создайте новый файл конфигурации SSL ssl.conf в каталоге snippets.

    cd /etc/nginx/
    vim snippets/ssl.conf

    В CentOS 7.5

    Перейдите в каталог конфигурации /etc/nginx/ и создайте новую конфигурацию SSL ssl/conf в каталоге default.d.

    cd /etc/nginx/
    vim default.d/ssl.conf

    Вставьте туда следующую конфигурацию SSL.

    # Specify the TLS versions
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    
    # Ciphersuites recommendation from the chiper.li
    # Use this chipersuites to get 100 points of the SSLabs test
    # Some device will not support
    #ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384";
    
    # Mozilla Ciphersuits Recommendation
    # Use this for all devices supports
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
    
    # Use the DHPARAM key and ECDH curve >= 256bit
    ssl_ecdh_curve secp384r1;
    ssl_dhparam /etc/nginx/dhparam.pem;
    
    server_tokens off;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;
    
    # Enable HTTP Strict-Transport-Security
    # If you have a subdomain of your site,
    # be carefull to use the 'includeSubdomains' options
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    
    # Enable OSCP Stapling for Nginx web server
    # If you're using the SSL from Letsencrypt,
    # use the 'chain.pem' certificate
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/hakase-labs.io/chain.pem;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;
    
    # XSS Protection for Nginx web server
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options nosniff;
    add_header X-Robots-Tag none;

    Сохранить и выйти.

    Примечание:

    • Укажите версии TLS для сайта, примите только TLSv1 TLSv1.1 TLSv1.2.
    • Укажите набор шифров SSL. Рекомендуется использовать набор шифров SSL из предложения Mozilla для обеспечения совместимости со всеми устройствами.
    • Включите HSTS, сшивание OSCP и добавьте защиту XSS.

    Шаг 5. Настройте виртуальный хост Nginx с SSL

    На этом шаге мы создадим файл виртуального хоста для доменного имени. Мы создадим новый виртуальный хост, домен с именем hakase-labs.io, а его корневой веб-каталог будет расположен в каталоге /var/www/site01.

    Создайте новый каталог /var/www/site01 и создайте внутри него файл index.html.

    mkdir -p /var/www/site01
    echo '<h1><center>Nginx - Letsencrypt - A+</center></h1>' > /var/www/site01/index.html

    Теперь перейдите в каталог конфигурации /etc/nginx и создайте новый файл виртуального хоста с именем hakase-labs.io для Ubuntu и hakase-labs.conf для системы CentOS 7.

    В Ubuntu 18.04

    cd /etc/nginx/
    vim sites-available/hakase-labs.io

    В CentOS 7.5

    cd /etc/nginx/
    vim conf.d/hakase-labs.conf

    Вставьте туда следующий пример конфигурации виртуального хоста Nginx.

    server {
        listen 80;
        listen [::]:80;
        server_name hakase-labs.io;
    
        return 301 https://$host$request_uri;
    }
    
    server {
            listen 443 ssl http2;
            listen [::]:443 ssl http2;
    
            root   /var/www/site01;
            index index.html index.php index.htm;
    
            server_name  hakase-labs.io;
            error_log /var/log/nginx/hakase-error.log warn;
    
            ssl_certificate /etc/letsencrypt/live/hakase-labs.io/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/live/hakase-labs.io/privkey.pem;
    
            #SSL Configuration
            include snippets/ssl.conf;
    
            location ~ /.well-known {
                    allow all;
            }
    
    
            location / {
                try_files $uri $uri/ =404;
            }
    
    
            location = /favicon.ico {
                    log_not_found off;
                    access_log off;
            }
    
            location = /robots.txt {
                    allow all;
                    log_not_found off;
                    access_log off;
            }
    
            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                    expires max;
                    log_not_found off;
            }
    
    }

    Сохранить и выйти.

    Примечание:

    • Измените включаемые фрагменты/ssl.conf; линия. Если вы используете Ubuntu, оставьте его по умолчанию. И если вы используете CentOS, измените каталог на default.d/ssl.conf

    Только в системе Ubuntu

    Включите новый файл виртуального хоста, проверьте конфигурацию и убедитесь в отсутствии ошибок.

    ln -s /etc/nginx/sites-available/hakase-labs.io /etc/nginx/sites-enabled/
    nginx -t

    Теперь перезапустите службу nginx.

    systemctl restart nginx

    Создан новый виртуальный хост с включенным HTTPS и дополнительной конфигурацией SSL.

    Проверьте с помощью команды netstat, и вы получите HTTPS-порт 443 в списке.

    netstat -plntu

    Шаг 6 — Тестирование

    Откройте веб-браузер и введите имя своего домена, мой — http://hakase-labs.io.

    И вы будете перенаправлены на HTTPS-соединение.

    Теперь перейдите на тестовый сайт SSL https://www.ssllabs.com/ssltest/ и введите свое собственное доменное имя, затем подождите, чтобы получить результаты.

    Ниже приведен мой результат использования Рекомендации Mozilla Ciphersuite.

    Ниже приведен мой результат использования Рекомендации Cipher.li Ciphersuite.

    Вы увидите, что все результаты имеют результаты A+ и отличаются только стойкостью шифра в рекомендациях Mozilla и рекомендации Cipherli.st.

    Чтобы проверить сшивание OSCP и HSTS на сервере, прокрутите страницу результатов теста, и вы получите результат, как показано ниже.

    Если вы хотите проверить сшивание OSCP из командной строки, проверьте его с помощью следующей команды.

    echo QUIT | openssl s_client -connect hakase-labs.io:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'

    Для тестирования HSTS проверьте его с помощью команды curl ниже.

    curl -s -D- https://hakase-labs.io | grep -i Strict

    Установка и настройка веб-сервера Nginx с SSL Letsencrypt, а также получение A+ от теста SSLabs были успешно завершены.

    использованная литература

    • https://cipherli.st/