GNU/Linux >> Tutoriales Linux >  >> FreeBSD

Cómo proteger Nginx con SSL y Let's Encrypt en FreeBSD

En esta guía, discutiremos cómo asegurar Nginx servidor web en FreeBSD con TLS/SSL certificados ofrecidos por la autoridad de certificación de Let's Encrypt . También le mostraremos cómo renovar automáticamente los certificados de Lets' Encrypt antes de la fecha de vencimiento.

TLS , un acrónimo de Seguridad de la capa de transporte , es un protocolo que se ejecuta bajo HTTP y utiliza certificados y claves para encapsular los paquetes y cifrar los datos intercambiados entre un servidor y un cliente, o en este caso entre Nginx servidor web y el navegador del cliente, para asegurar la conexión, de modo que un tercero, que podría interceptar el tráfico, no pueda descifrar la transmisión.

Lea también :Instale Let's Encrypt para Apache en FreeBSD

El proceso para obtener un Let's Encrypt gratuito certificado en FreeBSD se puede simplificar mucho instalando certboot utilidad de cliente, que es el cliente oficial de Let's Encrypt utilizado para generar y descargar certificados.

Requisitos

  1. Instalar pila FBEMP (Nginx, MariaDB y PHP) en FreeBSD

Paso 1:configurar Nginx TLS/SSL

1. De forma predeterminada, el TLS/SSL la configuración del servidor no está habilitada en FreeBSD porque el TLS Las declaraciones de bloqueo del servidor se comentan en Nginx archivo de configuración predeterminado.

Para activar el TLS servidor en Nginx , abra nginx.conf archivo de configuración, busque la línea que define el inicio de SSL servidor y actualice todo el bloque para que se vea como en el ejemplo a continuación.

# nano /usr/local/etc/nginx/nginx.conf

Extracto del bloque Nginx HTTPS:

Nginx HTTPS Configuration
server {
       listen 443 ssl  default_server;
       server_name  www.yourdomain.com;
	
	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;
	error_page   500 502 503 504  /50x.html;
        
	location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
	
	location / {
	    root   /usr/local/www/nginx;
       	    index  index.html index.htm;
	    try_files $uri $uri/ /index.php?$args;
				}

	ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_dhparam /usr/local/etc/nginx/dhparam.pem;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 10m;
	ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	# Use gzip compression
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.0;

	# Set a variable to work around the lack of nested conditionals
	
	set $cache_uri $request_uri;
	
	location ~ /.well-known {
	allow all;
		}
    


        location ~ \.php$ {
        root	/usr/local/www/nginx;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME /scripts$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME $request_filename;    
		include        fastcgi_params;
        }	
    }

El bloque anterior, además de SSL bloque, también contiene algunas declaraciones para habilitar la compresión gzip y FastCGI Process Manager , utilizado para pasar código PHP a PHP-FPM puerta de enlace para ejecutar aplicaciones web dinámicas.

Después de haber agregado el código anterior a Nginx archivo de configuración principal, no reinicie el daemon ni aplique la configuración antes de instalar y obtener un Let's Encrypt certificado para su dominio.

Paso 2:Instale el cliente Certbot en FreeBSD

2. El proceso de instalación de Let's Encrypt certbot La utilidad de cliente en FreeBSD implica descargar el código fuente de py-certbot y compilarlo localmente, emitiendo los siguientes comandos.

# cd /usr/ports/security/py-certbot
# make install clean

3. Compilando el py-certbot La utilidad lleva mucho tiempo en comparación con la instalación de un paquete binario regular. Durante este tiempo, se requiere descargar una serie de dependencias y compilarlas localmente en FreeBSD.

Además, aparecerá una serie de indicaciones en su pantalla, exigiéndole que seleccione qué paquetes se utilizarán en el momento de la compilación para cada dependencia. En la primera pantalla, seleccione las siguientes herramientas presionando [espacio] clave, para compilar python27 dependencia, como se ilustra en la siguiente imagen.

  • IPV6
  • LIBFFI
  • NLS
  • PYMALLOC
  • HILOS
  • UCS4 para compatibilidad con Unicode

4. A continuación, seleccione DOCUMENTOS y HILOS para gettext-herramientas dependencia y presione OK para continuar como se muestra en la imagen de abajo.

5. En la siguiente pantalla deja las PRUEBAS opción deshabilitada para libffi-3.2.1 y presiona Aceptar para avanzar más.

6. A continuación, presione espacio para seleccionar DOCUMENTOS para py27-enum34 dependencia, que instalará la documentación para esta herramienta, y presione OK para continuar, como se ilustra en la siguiente captura de pantalla.

7. Finalmente, elija instalar muestras de ejemplo para py27-openssl dependencia presionando [espacio] y presiona OK para finalizar el proceso de compilación e instalación de py-certbot cliente.

8. Después del proceso de compilación e instalación de py-certbot finaliza la utilidad, ejecute el siguiente comando para actualizar la herramienta a la última versión del paquete, como se ilustra en las siguientes capturas de pantalla.

# pkg install py27-certbot

9. Para evitar algunos problemas, puede ocurrir al obtener un Let's Encrypt gratuito. certificado, siendo el error más común “pkg_resources.DistributionNotFound ”, asegúrese de que las siguientes dos dependencias también estén presentes en su sistema:py27-salt y py27-acme .

# pkg install py27-salt
# pkg install py27-acme

Paso 3:Instale el certificado Let's Encrypt para Nginx en FreeBSD

10. Para obtener un certificado independiente de Let's Encrypt para su dominio, ejecute el siguiente comando y proporcione su nombre de dominio y todos los subdominios para los que desea obtener certificados implicando -d bandera.

# certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

11. Al generar el certificado, se le pedirá que ingrese su dirección de correo electrónico y que acepte los términos de servicio de Let's Encrypt. Escribe a desde el teclado para aceptar y continuar y también se le preguntará si desea compartir su dirección de correo electrónico con los socios de Let's Encrypt.

En caso de que no desee compartir su dirección de correo electrónico, escriba no palabra en el aviso y presione [enter] clave para continuar. Una vez que se hayan obtenido correctamente los certificados para su dominio, recibirá algunas notas importantes que le informarán dónde se almacenan los certificados en su sistema y cuándo caducan.

12. En caso de que desee obtener un certificado de Let's Encrypt utilizando el "webroot ” agregando el webroot directorio del servidor Nginx para su dominio, emita el siguiente comando con --webroot y -w banderas De forma predeterminada, si no ha cambiado la ruta webroot de Nginx, debe estar ubicada en /usr/local/www/nginx/ ruta del sistema.

# certbot certonly --webroot -w /usr/local/www/nginx/ -d yourdomain.com -d www.yourdomain.com

Como en el --strandalone procedimiento para obtener un certificado, el --webroot El procedimiento también le pedirá que proporcione una dirección de correo electrónico para la renovación del certificado y los avisos de seguridad, presione a estar de acuerdo con los términos y condiciones de Let's Encrypt y no o yes compartir o no la dirección de correo electrónico de los socios de Let's Encrypt como se ilustra en el siguiente ejemplo.

Tenga en cuenta que el cliente certbot puede detectar una dirección de correo electrónico falsa y no le permitirá continuar generando un certificado hasta que proporcione una dirección de correo electrónico real.

Muestra de cerbot:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):[email protected]  #A fake email address will be detected
There seem to be problems with that address. Enter email address (used for
urgent renewal and security notices)  If you really want to skip this, you can
run the client with --register-unsafely-without-email but make sure you then
backup your account key from /etc/letsencrypt/accounts   (Enter 'c' to cancel):[email protected]

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: a ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: n Obtaining a new certificate Performing the following challenges: http-01 challenge for www.domain.com Using the webroot path /usr/local/www/nginx/ for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /usr/local/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem. Your cert will expire on 2017-12-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

Paso 4:actualice los certificados TLS de Nginx

13. La ubicación de los certificados y claves obtenidos de Let's Encrypt en FreeBSD es /usr/local/etc/letsencrypt/live/www.yourdomain.com/ ruta del sistema. Ejecute el comando ls para mostrar los componentes de su certificado Let's Encrypt:el archivo de cadena, el archivo de cadena completa, la clave privada y el archivo de certificado, como se ilustra en el siguiente ejemplo.

# ls /usr/local/etc/letsencrypt/live/www.yourdomain.com/

14. Para instalar los certificados Let's Encrypt para su dominio en el servidor web Nginx, abra el archivo de configuración principal de Nginx o el archivo de configuración para el servidor Nginx TLS, en caso de que sea un archivo separado, y modifique las líneas a continuación para reflejar la ruta de los certificados emitidos por let's Encrypt como se ilustra a continuación.

# nano /usr/local/etc/nginx/nginx.conf

Actualice las siguientes líneas para que se vean como en este ejemplo:

ssl_certificate "/usr/local/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
	ssl_certificate_key "/usr/local/etc/letsencrypt/live/www.yourdomain.com/privkey.pem";

15. Además, si la línea ssl_dhparam está presente en Nginx SSL configuración, debe generar un nuevo 2048 poco Diffie–Hellman clave con el siguiente comando:

# openssl dhparam –out /usr/local/etc/nginx/dhparam.pem 2048 

16. Finalmente, para activar la configuración TLS de Nginx, primero verifique la configuración global de Nginx en busca de posibles errores de sintaxis y, luego, reinicie el servicio Nginx para aplicar la configuración SSL emitiendo los siguientes comandos.

# nginx -t
# service nginx restart

17. Confirme si el demonio Nginx está vinculado a 443 puerto emitiendo los siguientes comandos que pueden enumerar todos los sockets de red abiertos en el sistema en estado de escucha.

# netstat -an -p tcp| grep LISTEN
# sockstat -4 

18. También puede visitar la dirección de su dominio a través de HTTPS protocolo abriendo un navegador y escriba la siguiente dirección para confirmar que los certificados de Let's Encrypt funcionan como se espera. Debido a que está utilizando certificados generados por una autoridad de certificación válida, no debería mostrarse ningún error en el navegador.

https://www.yourdomain.com

19. La utilidad Openssl también puede ayudarlo a encontrar información sobre un certificado obtenido de Let's Encrypt CA, ejecutando el comando con las siguientes opciones.

# openssl s_client -connect www.yourdomain.com:443

En caso de que quiera obligar a Nginx a dirigir todas las solicitudes de http a https recibidas para su dominio en el puerto 80 a HTTPS , abra el archivo de configuración de Nginx, localice la directiva del servidor para el puerto 80 y agregue la siguiente línea después de la instrucción server_name como se ilustra en el siguiente ejemplo.

rewrite ^(.*) https://www.yourdomain.com$1 permanent;

20. La configuración de la renovación automática para el certificado emitido por la autoridad de Let's Encrypt antes de que caduque se puede hacer programando un trabajo cron para que se ejecute una vez al día emitiendo el siguiente comando.

# crontab -e

Tarea cron para renovar el certificado.

0 0 * * * certbot renew >> /var/log/letsencrypt.log

¡Eso es todo! Nginx ahora puede ofrecer aplicaciones web seguras a sus visitantes mediante certificados gratuitos de Let's Encrypt.


FreeBSD
  1. Asegure Nginx con Lets Encrypt en CentOS 7

  2. Cómo proteger el servidor web Apache con Let's Encrypt en RHEL 8

  3. Instale Lets Encrypt and Secure Nginx con SSL/TLS en Debian 9

  4. Asegure Nginx con Let's Encrypt SSL en Debian 10/11

  5. Cómo instalar Let's Encrypt SSL en Ubuntu 18.04 con Nginx

Cómo instalar Nginx con Let's Encrypt TLS/SSL en Ubuntu 20.04

Cómo instalar Nginx con Let's Encrypt SSL en Fedora 35

Cómo instalar Nginx con Let's Encrypt SSL en Ubuntu 20.04 LTS

Cómo proteger Nginx con el certificado SSL de Let's Encrypt

Cómo proteger el servidor LEMP con Let's Encrypt Free SSL en Ubuntu 18.04 VPS

Cómo proteger Nginx con Let's Encrypt en Ubuntu 20.04