Arquitectura DMZ
Cuando ciertas máquinas de la red interna tienen que ser accesibles desde el exterior (servidor web, un servidor de mensajería, un servidor FTP público, etc.), normalmente es necesario crear una nueva política para una nueva red, accesible tanto desde la red interna como desde el exterior, sin correr el riesgo de comprometer la seguridad de la empresa.
Se habla entonces de una "zona desmilitarizada" (DMZ) para designar esta zona aislada que aloja aplicaciones a disposición del público. El DMZ sirve como una zona intermedia entre la red a proteger y la red hostil.
Una DMZ se crea a menudo a través de las opciones de configuración del cortafuegos, donde cada red se conecta a una interfaz de red distinta. Esta configuración se llama cortafuegos en trípode (three-legged firewall).

Desde el prisma de un purista de la seguridad, el primer paso, para segmentar las redes que existirán en una organización, es identificar los diferentes servidores/servicios para decidir su distribución.
Aquellos que necesiten tener una puerta por la que entre tráfico desde Internet, deberá ir en una DMZ de servicios públicos o frontend. La ubicación de los servidores que nutren estas aplicaciones públicas deben ir en una red diferente y protegida, o de backend.
El tráfico a permitir entre todas estas redes habrá de ser el justo y necesario para evitar exposiciones de servicios/máquinas por error. Más o menos como se puede ver en el dibujo de abajo.

Los servidores en la DMZ se denominan "anfitriones bastión" ya que actúan como un puesto de avanzada en la red de la compañía.
En este tipo de firewall hay que permitir:
- Acceso de la red local a internet y a la DMZ.
- Acceso público desde internet al puerto tcp/80 y tcp/443 de nuestro servidor web 192.168.3.2 de la DMZ
- Obviamente bloquear el resto de acceso de la DMZ hacia la Red local.
¿Qué tipo de reglas son las que hay que usar para filtrar el tráfico entre la DMZ y la LAN? Solo pueden ser las FORWARD, ya que estamos filtrando entre distintas redes, no son paquetes destinados al propio firewall.
Debe tener presente, de esta manera, la DMZ posee un nivel de seguridad intermedio, el cual no es lo suficientemente alto para almacenar datos imprescindibles de la compañía.
Configurando las interfaces de red
Nos logueamos en el firewall, el primer tramite a realizar es configurar las interfaces de red.
su
poner contraseña de root, a partir de ahora y en todo el tutorial vamos a trabajar como usuario root.
(si estas en ubuntu sudo su y pones tu propia contraseña)
ifconfig -a | grep eth*
Podemos ver que las 3 interfaces de red están detectadas, solo una ya posee IP que fue asignada vía DHCP por el router.
El servidor debe tener asignada ip fija en las 3 interfaces de red.
ver los datos actuales
more /etc/resolv.conf
nos muestra los dns en uso.
ifconfig eth0
nos muestra Ip interna, máscara e Ip broadcast, netmask.
netstat -r
nos muestra Ip puerta de enlace y el network.
Asignando las Ips fijas
Vamos a cargar los datos recopilados anteriormente.
nano -wB /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.113
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.253
auto eth1
iface eth1 inet static
address 192.168.10.1
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
auto eth2
iface eth2 inet static
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
Como se puede apreciar cada interfaz de red usa un rango diferente eth0 192.168.0.0/24 , eth1 192.168.10.0/24 , eth2 192.168.3.0/24
Si querés evitar el tipeado de tantos datos, bajar el archivo:
wget http://files.myopera.com/alband/files/interfaces-dmz
Una vez descargado lo copiamos en su lugar
cp --backup interfaces-dmz /etc/network/interfaces
y lo editamos acorde a los datos que correspondan
nano -wB /etc/network/interfaces
reiniciamos la red
/etc/init.d/networking restart
OpenDNS
Ofrece las siguientes direcciones de servidor de nombres de dominio para uso público 208.67.222.222 208.67.220.220 o puede usar los correspondientes a su proveedor de internet.
echo nameserver 208.67.220.220 > /etc/resolv.conf
echo nameserver 208.67.222.222 >> /etc/resolv.conf
DHCP Server
DHCP responde al protocolo de configuración dinámica de host. En otras palabras, es un protocolo que se utiliza para proporcionar una configuración ip a otros equipos que se encuentren en el mismo segmento de red que el servidor. El servidor DHCP es aquel que proporciona direcciones ip dinámicas a equipos que lo soliciten.
apt-get install dhcp3-server
Luego de la instalación copiamos el archivo /etc/dhcp/dhcpd.conf
cd /etc/dhcp
cp --backup dhcpd.conf ./dhcpd.conf.old
borramos el contenido de archivo
> dhcpd.conf
nano dhcpd.conf
Y en el archivo agregamos estos datos:
authoritative;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.2 192.168.1.20;
option domain-name-servers 208.67.220.220,208.67.222.222;
option domain-name "firewall";
option routers 192.168.10.1;
option broadcast-address 192.168.10.255;
default-lease-time 600000;
max-lease-time 720000;
}
#host jefe {
#hardware ethernet xx:xx:xx:xx:xx:xx;
#fixed-address 192.168.1.160;
#}
#host alband {
#hardware ethernet xx:xx:xx:xx:xx:xx;
#fixed-address 192.168.1.161;
#}
Si se desea asignar IP fija a algunos equipos en particular, descomentar las últimas 8 lineas y completar con datos que correspondan, host jefe y alband.
La configuración se puede bajar:
wget http://files.myopera.com/alband/files/dmz-dhcpd.conf
cp --backup dmz-dhcpd.conf /etc/dhcp/dhcpd.conf
podemos revisar el resultado
more /etc/dhcp/dhcpd.conf
Debemos editar el archivo de configuración dónde deberemos indicar en que tarjeta se quiere activar el servidor DHCP, modificando la siguiente línea:
INTERFACES="eth1"
nano /etc/default/isc-dhcp-server
Reiniciamos el servicio
/etc/init.d/isc-dhcp-server restart
Iptables
Primero vamos a ver como estará estructurada nuestra red.

En la imagen están los datos reales que usaré, una vez comprendida la imagen anterior ya tenemos más claro que vamos a hacer.
Creamos nuestro script de iptables
nano /etc/network/if-up.d/firewall
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet con DMZ
##
## Pello Xabier Altadill Izura
## www.pello.info - [email protected]
## modificado por alband de Taringa
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# eth0 es el interfaz conectado al router y eth1 a la Red local
# Todo lo que venga por el exterior y vaya a los puerto 80 y 433
# lo redirigimos al servidor web (192.168.3.2) de la DMZ
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.3.2:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to 192.168.3.2:443
# El localhost se deja (por ejemplo conexiones locales a mysql)
iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
# Ahora hacemos enmascaramiento de la red local y de la DMZ
# para que puedan salir haca fuera
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
## Permitimos el paso de la Red local al servidor web la DMZ
iptables -A FORWARD -s 192.168.3.2 -d 192.168.10.5 -p tcp --sport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.10.5 -d 192.168.3.2 -p tcp --dport 80 -j ACCEPT
# Cerramos el acceso de la DMZ a la Red local
iptables -A FORWARD -s 192.168.3.0/24 -d 192.168.10.0/24 -j DROP
## Cerramos el acceso de la DMZ al propio firewall
iptables -A INPUT -s 192.168.3.0/24 -i eth2 -j DROP
## Y ahora cerramos los accesos indeseados del exterior:
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -p udp --dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 10000 -j DROP
# Algunas medidas de protección
# Deshabilitar broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Deshabilitar el ping... quizá discutible.
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# Deshabilitar la redirección del ping
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# Registrar los accesos extraños, paquetes falseados, etc..
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
# Anti-flooding o inundación de tramas SYN.
iptables -N syn-flood
iptables -A INPUT -i etho -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -nL"
# Fin del script
Para evitar errores recomiendo descargar el script
wget http://files.myopera.com/alband/files/dmz-firewall
luego copiarlo
cp dmz-firewall /etc/network/if-up.d
Le damos permisos de ejecución
chmod +x /etc/network/if-up.d/dmz-firewall
Ahora ejecutamos el script
bash /etc/network/if-up.d/dmz-firewall
Podemos ver las reglas cargadas con
iptables -nL
Servidor web
En el servidor web que estará aislado en la DMZ debemos configurar correctamente su IP.
nano -wB /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.3.2
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.0.255
gateway 192.168.3.1
Y cargamos los DNS
echo nameserver 208.67.220.220 > /etc/resolv.conf
echo nameserver 208.67.222.222 >> /etc/resolv.conf
Vamos a probar que se puede hacer ahora
Desde mi ip 192.168.0.101, pongo la ip del firewall y veo el apache del servidor web que esta en la DMZ.
El firewall no responde al ping, recomiendo ampliar la imagen para entender mejor.
Aquí apreciamos un cliente de la red local, el servidor DHCP del firewal le asigo IP, vemos que tiene navegación y puede entrar al servidor web de la DMZ.
Amigos, para consultas puntuales sobre este tema, pasen por esta comunidad, todos serán bienvenidos!!
Si te gusto el post comenta!
Estas sin tiempo para leerlo detenidamente? Agregalo a favoritos ya!
No entendiste algo? mandame un MP que te ayudo.
Te gustan mis aportes? Seguime! no te defraudaré.
Fuentes de conocimiento:
http://www.securitybydefault.com/2012/07/securizando-un-entorno-de-maquinas.html
http://es.wikipedia.org/wiki/Zona_desmilitarizada_%28inform%C3%A1tica%29