GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo instalar Nginx con Lets encrypt y obtener A+ de SSLLabs Test

En este tutorial, le mostraré paso a paso cómo instalar y configurar el servidor web Nginx con el certificado Letsencrypt. Esta guía le informará sobre la instalación del servidor web Nginx, la instalación de la herramienta let's encrypt, la generación del certificado SSL, la configuración del host virtual nginx con SSL y la creación de una configuración SSL adicional para obtener la A+ de los laboratorios SSL de prueba SSL.

Requisitos

  • Servidor Linux:Ubuntu 18.04 o CentOS 7.5
  • Privilegios de raíz

¿Qué haremos?

  1. Instalar servidor web Nginx
  2. Configurar Firewall UFW/Firewalld
  3. Instalar Let's Encrypt y generar certificado SSL
  4. Configurar SSL seguro
  5. Configurar el host virtual de Nginx con SSL
  6. Pruebas

Paso 1:instalar el servidor web Nginx

En este tutorial, lo guiaremos para instalar y configurar el servidor web Nginx con Letsencrypt en ambos servidores Linux:Ubuntu 18.04 y CentOS 7.5.

En Ubuntu 18.04.

Actualice el repositorio y luego instale nginx usando el comando apt a continuación.

sudo apt update
sudo apt install nginx -y

En CentOS 7.5.

Instale el repositorio EPEL en el sistema CentOS e instale Nginx usando el comando yum.

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

Una vez completada la instalación, inicie el servicio Nginx y permita que se inicie cada vez que se inicia el sistema.

systemctl start nginx
systemctl enable nginx

El servidor web Nginx ahora está instalado y se ejecuta en el puerto HTTP predeterminado 80. Verifíquelo usando el comando netstat a continuación.

netstat -plntu

Paso 2 - Configurar Firewall UFW - Firewalld

Se recomienda activar el Firewall en el servidor y abrir el puerto específico según sea necesario. En este paso, mostraremos cómo abrir puertos SSH, HTTP y HTTPS en servidores Linux Ubuntu 18.04 usando el firewall UFW y Firewalld en el sistema CentOS 7.5.

En Ubuntu 18.04 - Cortafuegos UFW

Antes de habilitar el Firewall UFW en el sistema Ubuntu, asegúrese de que el puerto SSH esté habilitado en la lista de configuración del firewall.

Agregue el puerto del servicio SSH a la configuración del firewall usando el comando ufw y luego habilite el servicio del firewall UFW.

ufw allow ssh
ufw enable

Ahora agregue los servicios HTTP y HTTPS.

ufw allow http
ufw allow https

Los puertos de servicio SSH, HTTP y HTTPS se agregaron a la lista de servicios de UFW Firewall, verifique que esté usando el siguiente comando.

ufw status

En CentOS 7.5 - Firewalld

Antes de agregar puertos y servicios a firewelld, asegúrese de que el servicio de firewalld esté activo y funcionando.

Inicie el servicio firewalld y permita que se inicie cada vez que se inicia el sistema.

systemctl start firewalld
systemctl enable firewalld

Nota:

  • El servicio SSH estará habilitado de forma predeterminada en la lista de servicios de Firewald.

Ahora agregue los servicios HTTP y HTTPS usando el comando firewall-cmd a continuación.

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

Vuelva a cargar la configuración del cortafuegos y consulte la lista de servicios.

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

Y obtendrá los servicios SSH, HTTP y HTTPS en la lista.

Paso 3:instalar Letsencrypt y generar certificados

En este paso, instalaremos la herramienta letsencrypt y generaremos los certificados SSL fuertes Letsencrypt usando el comando cerbot.

En Ubuntu 18.04

Instale los paquetes de letsencrypt usando el comando apt a continuación.

sudo apt install letsencrypt -y

En CentOS 7.5

Ahora instale los paquetes de letsencrypt en CentOS 7 usando el comando yum a continuación.

sudo yum install certbot -y

Una vez completada la instalación, crearemos una nueva configuración que se utilizará para generar archivos de certificados SSL.

En Ubuntu 18.04

Vaya al directorio de configuración '/etc/nginx' y cree un nuevo archivo de configuración 'cerbot.conf' en el directorio 'snippets'.

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

Pegue la siguiente configuración allí.

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

Guardar y salir.

Ahora edite el archivo de host virtual predeterminado de Nginx.

vim sites-available/default

Agregue la siguiente configuración en los bloques 'servidor {..}'.

    include snippets/certbot.conf;

Guardar y salir.

En CentOS 7.5

Vaya al directorio de configuración '/etc/nginx' y cree un nuevo archivo de configuración 'certbot.conf' en el directorio 'default.d'.

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

Pegue la configuración a continuación.

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

Guardar y salir.

Ahora pruebe la configuración de nginx y asegúrese de que no haya ningún error, luego reinicie el servicio de nginx.

nginx -t
systemctl restart nginx

A continuación, genere los certificados SSL letsencrypt con el comando certbot.

En Ubuntu 18.04

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

En CentOS 7.5

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

Nota:

  • Especificaremos el tamaño de la clave RSA para nuestro dominio en '4096' y definiremos el método de autenticación en el directorio raíz web predeterminado '/var/www/html' en el sistema Ubuntu y '/usr/share/ directorio nginx/html' para el sistema CentOS 7.

Cuando esté completo, obtendrá todos los archivos de certificado SSL para el nombre de dominio en el directorio '/etc/letsencrypt/live'.

Para obtener seguridad adicional, generaremos la clave DHPARAM '4096' usando el comando OpenSSL como se muestra a continuación.

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

La clave DHPARAM se generó en el directorio '/etc/nginx'.

Paso 4 - Configuración SSL

En este paso, definiremos la configuración SSL para el servidor web Nginx. Crearemos una nueva configuración 'ssl.conf' que contiene seguridad de configuración SSL ajustada enfocada para el servidor web Nginx.

En Ubuntu 18.04

Vaya al directorio de configuración '/etc/nginx/' y cree una nueva configuración SSL 'ssl.conf' en el directorio 'snippets'.

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

En CentOS 7.5

Vaya al directorio de configuración '/etc/nginx/' y cree una nueva configuración SSL 'ssl/conf' en el directorio 'default.d'.

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

Pegue la siguiente configuración SSL allí.

# 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;

Guardar y salir.

Nota:

  • Especifique las versiones de TLS para el sitio, solo acepte TLSv1 TLSv1.1 TLSv1.2.
  • Especifique el conjunto de cifrado SSL, y se recomienda utilizar el conjunto de cifrado SSL de la sugerencia de Mozilla para obtener compatibilidad con todos los dispositivos.
  • Habilite HSTS, grapado OSCP y agregue la protección XSS.

Paso 5:configurar el host virtual de Nginx con SSL

En este paso, crearemos un archivo de host virtual para el nombre de dominio. Crearemos un nuevo host virtual, un dominio llamado hakase-labs.io, y su directorio raíz web se ubicará en el directorio '/var/www/site01'.

Cree el nuevo directorio '/var/www/site01' y cree el archivo 'index.html' dentro.

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

Ahora vaya al directorio de configuración '/etc/nginx' y cree un nuevo archivo de host virtual llamado 'hakase-labs.io' para ubuntu y 'hakase-labs.conf' para el sistema CentOS 7.

En Ubuntu 18.04

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

En CentOS 7.5

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

Pegue la siguiente configuración de host virtual Nginx de muestra allí.

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;
        }

}

Guardar y salir.

Nota:

  • Cambie 'include snippets/ssl.conf;' línea. Si está utilizando Ubuntu, déjelo predeterminado. Y si está utilizando CentOS, cambie el directorio a 'default.d/ssl.conf'

Solo en el sistema Ubuntu

Habilite el nuevo archivo de host virtual y pruebe la configuración, y asegúrese de que no haya ningún error.

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

Ahora reinicie el servicio nginx.

systemctl restart nginx

Se ha creado el nuevo host virtual con HTTPS habilitado y una configuración SSL adicional.

Verifique usando el comando netstat y obtendrá el puerto HTTPS 443 en la lista.

netstat -plntu

Paso 6 - Prueba

Abra su navegador web y escriba el nombre de su dominio, el mío es 'http://hakase-labs.io'.

Y será redirigido a la conexión HTTPS.

Ahora vaya al sitio de prueba SSL 'https://www.ssllabs.com/ssltest/' y escriba su propio nombre de dominio, luego espere para obtener los resultados.

El siguiente es mi resultado de usar la 'Recomendación de Mozilla Ciphersuite'.

Y el siguiente es mi resultado de usar la 'Recomendación Ciphersuite de Cipher.li'.

Verá que todos los resultados tienen resultados 'A+' y solo difieren en la 'Fuerza de cifrado' en las recomendaciones de Mozilla y la recomendación de Cipherli.st.

Para verificar el grapado OSCP y el HSTS en el servidor, desplácese por la página de resultados de la prueba y obtendrá el resultado como se muestra a continuación.

Si desea verificar el grapado OSCP desde la línea de comando, verifíquelo con el siguiente comando.

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

Para la prueba HSTS, verifíquelo usando el comando curl a continuación.

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

La instalación y configuración del servidor web Nginx con SSL Letsencrypt, así como la obtención de A+ de la prueba SSLabs, se han completado con éxito.

Referencias

  • https://community.letsencrypt.org/
  • https://mozilla.github.io/
  • https://cipherli.st/

Linux
  1. Cómo instalar Nextcloud con Nginx y Lets Encrypt SSL en Ubuntu 20.04 LTS

  2. Cómo instalar Magento 2 con Nginx y Lets Encrypt SSL en Ubuntu 20.04 LTS

  3. Cómo instalar Shopware con NGINX y Lets encrypt en Ubuntu 18.04 LTS

  4. Cómo instalar Shopware con NGINX y Lets Encrypt en CentOS 7

  5. Cómo instalar Shopware con NGINX y Lets Encrypt en Fedora 30

Cómo instalar Drupal 9 con Nginx y Lets Encrypt SSL en Debian 10

Cómo instalar Shopware 6 con NGINX y Lets Encrypt en CentOS 8

Cómo instalar Moodle con Nginx y Lets Encrypt SSL en Ubuntu 20.04

Cómo instalar Shopware con NGINX y Lets encrypt en Debian 9

Cómo instalar MyBB Forum con Nginx y Lets Encrypt en Debian 10

Cómo instalar Nginx con Let's Encrypt en RHEL 8