Cómo proteger Tomcat 10 con Apache o Nginx en Ubuntu 20.04

Índice
  1. Introducción
  • Prerrequisitos
  • Opción 1: Utilizar Apache como proxy inverso
    1. Requisitos previos de la sección
    2. Paso 1 – Configuración de hosts virtuales en Apache
  • Paso 2: Prueba de la nueva configuración de Apache
  • Opción 2: Usar Nginx como proxy inverso
    1. Requisitos previos de la sección
    2. Paso 1: Ajuste de la configuración del bloque del servidor Nginx
    3. Paso 2: Prueba de la nueva configuración de Nginx
  • Cómo restringir el acceso a Tomcat para Apache o Nginx
  • Conclusión
  • El autor seleccionó el Fondo de Código Libre y Abierto para recibir una donación como parte del programa Write for DOnations .

    Introducción

    Apache Tomcat es un servidor web y un contenedor de servlets que se utiliza para ofrecer aplicaciones Java . Es una implementación de código abierto de Jakarta Servlet , Jakarta Server Pages y otras tecnologías de la plataforma Jakarta EE .

    Tras la instalación, Tomcat ofrece tráfico sin cifrar de forma predeterminada, incluidas las contraseñas u otros datos confidenciales. Para proteger su instalación de Tomcat, deberá integrar certificados TLS de Let’s Encrypt en todas las conexiones HTTP. Para incorporar TLS, puede configurar un proxy inverso con certificados configurados, que negociará de forma segura con los clientes y enviará las solicitudes a Tomcat.

    Si bien las conexiones TLS se pueden configurar en Tomcat, no se recomienda porque Tomcat no tiene las últimas actualizaciones de seguridad y estándar TLS disponibles. En este tutorial, configurará esta conexión con Apache o Nginx . Ambos son muy comunes y están bien probados, mientras que el software que automatiza la provisión de certificados Let’s Encrypt, como certbot, no brinda soporte para Tomcat. Si desea probar Apache y Nginx, necesitará servidores separados para cada uno.

    Prerrequisitos

    • Un servidor Ubuntu 20.04 con un usuario sudo no root y un firewall, que puede configurar siguiendo la guía de configuración inicial del servidor Ubuntu 20.04 .
    • Tomcat 10 instalado en su servidor, que puede configurar siguiendo Cómo instalar Apache Tomcat 10 en Ubuntu 20.04 .
    • Un nombre de dominio registrado. En este tutorial se utilizará your_domaincomo ejemplo. Puede comprar un nombre de dominio en Namecheap , obtener uno gratis en Freenom o utilizar el registrador de dominios que prefiera.
    • Un registro DNS que apunta a la dirección IP pública de su servidor. Puede consultar esta introducción a DNS de DigitalOcean para obtener más información sobre cómo agregarlo.

    Opción 1: Utilizar Apache como proxy inverso

    Requisitos previos de la sección

    • Apache se instala siguiendo Cómo instalar Apache en Ubuntu 20.04 . Asegúrate de tener un archivo de host virtual para tu dominio.
    • Certificados TLS Let’s Encrypt instalados en su servidor para su dominio. Siga los pasos que se describen en la guía Let’s Encrypt para Apache . Cuando se le solicite, habilite la redirección al dominio seguro.

    Paso 1 – Configuración de hosts virtuales en Apache

    Dado que configuraste un host virtual básico en tu dominio y lo aseguraste con Let’s Encrypt en la sección de requisitos previos, tienes dos hosts virtuales disponibles. Solo necesitarás editar el que configura el tráfico HTTPS. Para enumerarlos, muestra la configuración de Apache ejecutando lo siguiente:

    1. sudo apache2ctl -S

    La salida será similar a esto:

    Output...VirtualHost configuration:*:443                  your_domain (/etc/apache2/sites-enabled/your_domain-le-ssl.conf:2)*:80                   your_domain (/etc/apache2/sites-enabled/your_domain.conf:1)ServerRoot: "/etc/apache2"Main DocumentRoot: "/var/www/html"Main ErrorLog: "/var/log/apache2/error.log"Mutex watchdog-callback: using_defaultsMutex rewrite-map: using_defaultsMutex ssl-stapling-refresh: using_defaultsMutex ssl-stapling: using_defaultsMutex ssl-cache: using_defaultsMutex default: mechanism=defaultPidFile: "/var/run/apache2/apache2.pid"Define: DUMP_VHOSTSDefine: DUMP_RUN_CFGUser: name="www-data" id=33Group: name="www-data" id=33

    El archivo que proporciona la configuración HTTPS es . Ábralo para editarlo ejecutando el siguiente comando, reemplazando con su nombre de dominio:/etc/apache2/sites-enabled/your_domain-le-ssl.confyour_domain

    1. sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

    El archivo se verá similar a esto:

    /etc/apache2/sites-enabled/su_dominio-le-ssl.conf

    IfModule mod_ssl.cVirtualHost *:443    ServerAdmin webmaster@localhost    ServerName your_domain    ServerAlias www.your_domain    DocumentRoot /var/www/your_domain.conf    ErrorLog ${APACHE_LOG_DIR}/error.log    CustomLog ${APACHE_LOG_DIR}/access.log combinedSSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pemSSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pemInclude /etc/letsencrypt/options-ssl-apache.conf/VirtualHost/IfModule

    Añade las líneas resaltadas a VirtualHost:

    /etc/apache2/sites-enabled/su_dominio-le-ssl.conf

    ...    CustomLog ${APACHE_LOG_DIR}/access.log combined        ProxyPreserveHost On    ProxyPass / http://127.0.0.1:8080/    ProxyPassReverse / http://127.0.0.1:8080/...

    Las tres directivas resaltadas le indican a Apache que habilite el tráfico bidireccional entre Tomcat y el mundo exterior, preservando al mismo tiempo los valores del encabezado HTTP. Cuando termine, guarde y cierre el archivo.

    Ahora ha indicado a Apache que envíe tráfico a su instalación de Tomcat, pero esa funcionalidad no está habilitada de forma predeterminada.

    Paso 2: Prueba de la nueva configuración de Apache

    En este paso, habilitará mod_proxyy mod_proxy_http, que son módulos de Apache que facilitan un proxy de conexión. Ejecute los siguientes comandos para habilitarlos:

    1. sudo a2enmod proxy
    2. sudo a2enmod proxy_http

    Luego, verifique la configuración escribiendo:

    1. sudo apache2ctl configtest

    La salida debe terminar con Syntax OK. Si hay algún error, revise la configuración que acaba de modificar.

    Por último, reinicie el proceso del servidor web Apache:

    1. sudo systemctl restart apache2

    Ahora debería ver su instalación de Tomcat protegida con certificados TLS al acceder your_domaindesde su navegador web. Puede omitir la sección Nginx y seguir el paso para restringir el acceso a Tomcat.

    Opción 2: Usar Nginx como proxy inverso

    Requisitos previos de la sección

    • Nginx instalado con un bloque de servidor para su dominio. Esta sección lo utilizará /etc/nginx/sites-available/your_domaincomo ejemplo. Puede configurar Nginx siguiendo Cómo instalar Nginx en Ubuntu 20.04 .
    • Certificados TLS de Let’s Encrypt instalados en su servidor para su dominio. Siga los pasos que se describen en la guía de Let’s Encrypt para Nginx . Cuando se le solicite, habilite la redirección al dominio seguro.

    Paso 1: Ajuste de la configuración del bloque del servidor Nginx

    En este paso, modificará la configuración del bloque del servidor para el dominio que creó en la sección requisitos previos para que Nginx reconozca a Tomcat.

    Abra el archivo de configuración para editarlo con el siguiente comando:

    1. sudo nano /etc/nginx/sites-available/your_domain

    Agregue las siguientes líneas en la parte superior del archivo:

    /etc/nginx/sites-available/su_dominio

    upstream tomcat {    server 127.0.0.1:8080 fail_timeout=0;}

    El upstreambloque define cómo conectarse a Tomcat, lo que permite a Nginx saber dónde se encuentra Tomcat.

    A continuación, dentro del serverbloque definido para el puerto 443, reemplace el contenido del location /bloque con las directivas resaltadas:

    /etc/nginx/sites-available/su_dominio

    upstream tomcat {    server 127.0.0.1:8080 fail_timeout=0;}server {...    location / {        include proxy_params;        proxy_pass http://tomcat/;    }...

    Estas dos líneas especifican que todo el tráfico debe dirigirse al upstreambloque llamado tomcat, que acaba de definir. También ordena que se conserven todos los parámetros HTTP durante el proceso de proxy. Guarde y cierre el archivo cuando haya terminado.

    Ahora probará esta configuración accediendo a Tomcat en su dominio.

    Paso 2: Prueba de la nueva configuración de Nginx

    Para comprobar que los cambios de configuración no introdujeron errores de sintaxis, ejecute este comando:

    1. sudo nginx -t

    El resultado debería verse así:

    Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful

    Si ve algún error, vuelva al paso anterior para revisar la configuración que modificó.

    Luego, reinicie Nginx para volver a cargar la configuración:

    1. sudo systemctl restart nginx

    Ahora puede ver su instalación de Tomcat al visitar la variante segura TLS de su dominio en su navegador web:

    https://your_domain

    Cómo restringir el acceso a Tomcat para Apache o Nginx

    Ahora que ha expuesto su instalación de Tomcat en su dominio a través de un servidor proxy con certificados TLS, puede proteger su instalación de Tomcat restringiendo el acceso a ella.

    Todas las solicitudes HTTP a Tomcat deben pasar por el proxy, pero puedes configurar Tomcat para que solo escuche conexiones en la interfaz de bucle local. Esta configuración garantiza que terceros no puedan intentar realizar solicitudes a Tomcat directamente.

    Abra el server.xmlarchivo para editarlo (ubicado dentro del directorio de configuración de Tomcat):

    1. sudo nano /opt/tomcat/conf/server.xml

    Encuentre la Connectordefinición debajo del Servicenombre Catalina, que se ve así:

    /opt/tomcat/conf/server.xml

    ...    Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" /...

    Para restringir el acceso a la interfaz de bucle invertido local, especifique 127.0.0.1como addressparámetro:

    /opt/tomcat/conf/server.xml

    ...    Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               address="127.0.0.1"               redirectPort="8443" /...

    Cuando termine, guarde y cierre el archivo.

    Para que los cambios surtan efecto, reinicie Tomcat ejecutando:

    1. sudo systemctl restart tomcat

    Ahora, su instalación de Tomcat solo debería ser accesible a través de su servidor proxy web Apache o Nginx. Apache o Nginx protegen a Tomcat de Internet, por lo que no será accesible en el 8080puerto de su dominio.

    Conclusión

    En este tutorial, configuraste Tomcat detrás de un servidor proxy protegido con certificados TLS gratuitos de Let’s Encrypt. También deshabilitaste el acceso externo directo al restringir las conexiones a Tomcat a través de la interfaz de bucle local ( localhost), lo que significa que solo las aplicaciones locales, como Apache o Nginx, pueden conectarse.

    Si bien la configuración de un proceso de servidor web independiente puede aumentar la cantidad de software que se utiliza para brindar servicios a sus aplicaciones, simplifica el proceso de protección del tráfico de Tomcat. Para obtener más información sobre el proceso de proxy del tráfico, visite los documentos oficiales de Apache y Nginx .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion