TCP/UDP – Acceso vía NGINX
⚠️ Todas las configuraciones de este manual son ejemplos simples e hipotéticos. Adáptelas según la topología de su entorno.
🔁 Introducción
El módulo stream de NGINX permite la redirección de tráfico TCP y UDP directamente en la capa de transporte.
Esto es útil para publicar servicios como:
- MySQL / PostgreSQL (TCP)
- RDP / FTP (TCP)
- SNMP (UDP)
🛠️ Paso 1 – Editando el nginx-jelastic.conf
Abra el archivo /etc/nginx/nginx-jelastic.conf y agregue lo siguiente fuera del bloque http {}, generalmente al final del archivo:
stream {
log_format basic '$remote_addr $server_port [$time_local] $protocol $status $bytes_sent $bytes_received $session_time';
include /etc/nginx/conf.d/stream/*.conf;
}
💾 Guarde después de la edición.
📁 Paso 2 – Creando el directorio de configuración
Cree la carpeta de configuraciones del stream:
mkdir -p /etc/nginx/conf.d/stream
⚙️ Configurando el Proxy TCP
Este ejemplo redirige conexiones MySQL (puerto 3306) a través de NGINX hacia otro servidor interno:
# Arquivo: /etc/nginx/conf.d/stream/mysql_tcp.conf
server {
listen 33090;
listen [::]:33090;
proxy_pass 10.101.10.10:3306;
access_log /var/log/nginx/mysql_tcp.log basic;
}
⚙️ Configurando el Proxy UDP
Este ejemplo redirige SNMP (puerto 161) a un servidor interno vía UDP:
# Arquivo: /etc/nginx/conf.d/stream/snmp_udp.conf
server {
listen 161 udp;
listen [::]:161 udp;
proxy_pass 10.10.10.50:161;
access_log /var/log/nginx/snmp_udp.log basic;
}
:::tip
🧩 Entendiendo el bloque server (TCP/UDP)
Cada configuración de redireccionamiento utiliza un bloque server dentro del módulo stream. A continuación explicamos, de forma objetiva, qué representa cada directiva usada:
server {
listen 33090;
listen [::]:33090;
proxy_pass 10.101.10.10:3306;
access_log /var/log/nginx/mysql_tcp.log basic;
}
🔈 listen
La directiva listen indica en qué puerto NGINX escuchará conexiones externas.
Es posible usar un puerto diferente al original de la aplicación. Por ejemplo, si el servicio MySQL corre en el puerto 3306, puede configurar NGINX para escuchar en el puerto 33090 externamente, lo que ayuda en la seguridad de puertos estándar.
Además, el listen [::]:PORTA permite escuchar conexiones IPv6 en el mismo puerto.
✅ Esto es útil para publicar servicios internos usando un puerto público.
🔁 proxy_pass
Define la dirección IP y puerto de destino interno hacia donde NGINX enviará la conexión recibida.
En este ejemplo, el tráfico que llega al puerto 33090 será redirigido al MySQL corriendo en 10.101.10.10:3306.
📝 access_log
Registra los accesos al servicio redirigido, utilizando el formato de registro definido anteriormente (basic).
La ruta del archivo de registro puede personalizarse según el servicio, facilitando el análisis posterior.
:::
Asegúrese de liberar en el firewall los puertos configurados en el listen de NGINX
🔄 Paso 3 – Reiniciando NGINX
Después de la configuración, reinicie NGINX para aplicar los cambios
✅ Ejemplo de uso externo
🎯 Accediendo a MySQL (TCP)
- IP de NGINX:
203.0.113.10 - Puerto externo:
33090
mysql -h 203.0.113.10 -P 33090 -u root -p