sábado, 23 de marzo de 2019

Preguntas Frecuentes: Cómo armo un DNAT en CEntOS/RHEL/OL 7?

Harto de recibir siempre la misma pregunta, me decidí a dejarla por escrito, como para que cuando reciba esos mensajes de WhatsApp a las 7 AM de personas al borde del ataque de nervios por no poder configurar un DNAT en CEntOS/RHEL/OL 7, pueda hacerles una DNAT a este blog.
Supongamos una máquina CEntOS/RHEL/OL 7, que posee dos tarjetas de red.
La primera, apuntando a Internet, con una dirección IP pública, y la segunda apuntando a la red interna. En dicha red interna tenemos un web server corriendo en el puerto 80 que queremos, sea visto desde el mundo exterior, pero por el puerto 10080, sin cambiar el puerto interno 80.
En este caso, debemos configurar un DNAT desde el puerto 10080 de la interfaz externa (enp0s3) hacia el puerto 80 de la máquina interna a través de la interfaz interna (enp0s8).
Veamos cómo tenemos configurado nuestro firewalld, ese módulo que nos permite configurar el firewall en nuestro equipo, desde la línea de comandos:

[root@centos7 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-03-23 01:08:07 -03; 12s ago
     Docs: man:firewalld(1)
 Main PID: 2401 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─2401 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Mar 23 01:08:05 centos7.hecsa.com.ar systemd[1]: Starting firewalld - dynamic firewall daemon...
Mar 23 01:08:07 centos7.hecsa.com.ar systemd[1]: Started firewalld - dynamic firewall daemon.
[root@centos7 ~]#

Efectivamente, está en ejecución. Veamos qué tiene configurado: 

[root@centos7 network-scripts]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[root@centos7 network-scripts]#

Esta zona es la adecuada? Veamos: 

[root@centos7 network-scripts]# firewall-cmd --get-default-zone
public
[root@centos7 network-scripts]#

Vamos bien, Fidel...

Ahora, crearemos la regla para permitir el forwardeo: 

[root@centos7 network-scripts]# firewall-cmd --permanent --zone=public --add-masquerade
success
[root@centos7 network-scripts]# firewall-cmd --permanent --zone="public" --add-forward-port=port=10080:proto=tcp:toport=80:toaddr=10.200.200.10
success
[root@centos7 network-scripts]# firewall-cmd --reload
success
[root@centos7 network-scripts]#

Veamos si todo está bien: 

[root@centos7 network-scripts]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: yes
  forward-ports: port=10080:proto=tcp:toport=80:toaddr=10.200.200.10
  source-ports:
  icmp-blocks:
  rich rules:

[root@centos7 network-scripts]#

Como hemos visto, el servidor interno que tiene el http server en el puerto 80 es el que tiene la dirección IP 10.200.200.10.

Listo, en el momento en el que nuestro navegador apunte a la dirección externa:10080, entonces seremos redireccionados a 10.200.200.10:80.

Enjoy!

No hay comentarios: