Sei sulla pagina 1di 6

Firewall con Iptables

Arturo Borrero Gonzlez arturo.borrero.glez@gmail.com Febrero 2011


Documento bajo licencia "CC-BY-SA 3.0". Usted es libre de copiar, modificar y redistribuir este documento, bajo la misma licencia. Este documento o uno muy similar puede encontrarse en http://www.ral-arturo.blogspot.com/.

Firewall con iptables

Febrero 2011

INTRODUCCIN
Este documento trata de explicar una manera (de las muchas que hay) de montar un firewall de tres patas para alojar una configuracin de red similar a la que puede verse en el esquema de abajo. El software usado es Debian Squeeze (amd64) e iptables (incluidas en el kernel de linux).

Arturo Borrero Gonzlez

Pag. 2/6

Firewall con iptables

Febrero 2011

CUESTIONES PREVIAS
Los elementos principales son la mquina con 3 interfaces que hace de router y los dos servidores en la DMZ. Vamos a suponer unas cuantas cuestiones previas, que nuestro firewall debe cumplir: 1. Los clientes de la red local deben tener acceso a internet transparente. Todos los servicios y protocolos. 2. En SERV1 hay un servidor WEB y SSH. En SERV2 hay un servidor SSH y un servidor WEB escuchando en el puerto 1312. 3. Aunque el router que nos conecta a internet hace NAT entre la direccin pblica y nuestra red privada, es necesario hacer otra vez NAT en la interfaz eth1, dado que no podemos modificar la tabla de encaminamientos de router. 4. El la mquina router servir SSH a internet a travs del puerto 22220 y por el resto de interfaces por el puerto 22. 5. El puerto 22 de la mquina router ser reenviado al puerto 22 de SERV2. 6. Debe de estar controlado el trfico entrante/saliente de la DMZ hacia la LAN para evitar sorpresas. En el ejemplo que voy a mostrar vamos a crear un script para el servicio en /etc/init.d/. Este script nos permitir alternar rpidamente entre poner y quitar el firewall, dejando siempre las reglas de encaminamiento y redirecciones intactas. El script es el siguiente (debe tener permisos de ejecucin):
/etc/init.d/iptables #!/bin/bash RETVAL=0 # Funcin iniciar firewall start() { echo "Adding hard firewall rules..." # fichero con reglas de iptables de firewall restrictivo sh /etc/iptables_close.conf RETVAL=0 } # Funcion detener firewall stop() { echo "Removing hard firewall rules..." # fichero con reglas de iptables de firewall abierto sh /etc/iptables_open.conf RETVAL=0 } # Analizando parmetro recibido case $1 in start) start ;; stop)

Arturo Borrero Gonzlez

Pag. 3/6

Firewall con iptables


stop ;; restart) stop start ;; status) /sbin/iptables -L /sbin/iptables -t nat -L RETVAL=0 ;; *) echo "Usage: firewall {start|stop|restart|status}" RETVAL=1 esac exit

Febrero 2011

Para aadir el script de init.d al arranque del sistema y que nuestro debian lo adapte, tendremos que hacer:
#uptade-rc.d /etc/init.d/iptables defaults

EL SCRIPT DE IPTABLES
Ahora tendremos que crear los siguientes ficheros de configuracin de iptables. Uno con las reglas de encaminamiento y no las de firewall y otro con ambas.
/etc/iptables_open.conf #!/bin/bash # Variables IF_INET='eth1' IF_LAN='eth2' IF_DMZ='eth0' IP_ROUTER_INET='192.168.0.2' IP_ROUTER_DMZ='192.168.2.1' IP_ROUTER_LAN='192.168.1.1' IP_SERV1='192.168.2.150' IP_SERV2='192.168.2.151' RED_LAN='192.168.1.0/24' RED_DMZ='192.168.2.0/24' # Borrado de reglas anteriores iptables -F iptables -t nat -F PREROUTING iptables -t nat -F POSTROUTING iptables -t filter -F # Politica por defecto

Arturo Borrero Gonzlez

Pag. 4/6

Firewall con iptables


iptables -P FORWARD ACCEPT ################## # Nat y redirecciones # ################## # Nat en la interfaz eth1 hacia internet iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.0.2

Febrero 2011

# Redireccin de puertos para SERV1 (desde internet) a web iptables -t nat -A PREROUTING -i $IF_INET -p tcp --dport 80 -j DNAT --to-destination 192.168.2.150:80 # Redirecciones de puertos para SERV2 (desde cualquier sitio) a web iptables -t nat -A PREROUTING -i $IF_INET -p tcp --dport 1312 -j DNAT --to-destination 192.168.2.151:1312 iptables -t nat -A PREROUTING -i $IF_LAN -p tcp --dport 80 -d 192.168.2.151 -j DNAT --to-destination 192.168.2.151:1312 # El puerto 22 recibido desde internet ser redireccionado a SERV2 iptables -t nat -A PREROUTING -p tcp -i $IF_INET --dport 22 -j DNAT --to-destination 192.168.2.151:22

A continuacin, el fichero con la configuracin de iptables fuerte:


/etc/iptables_close.conf #!/bin/bash # Variables IF_INET='eth1' IF_LAN='eth2' IF_DMZ='eth0' IP_ROUTER_INET='192.168.0.2' IP_ROUTER_DMZ='192.168.2.1' IP_ROUTER_LAN='192.168.1.1' IP_SERV1='192.168.2.150' IP_SERV2='192.168.2.151' RED_LAN='192.168.1.0/24' RED_DMZ='192.168.2.0/24' # Borrado de reglas anteriores iptables -F iptables -t nat -F PREROUTING iptables -t nat -F POSTROUTING iptables -t filter -F ################# # Nat y redirecciones # ################# # Ejecuto el fichero de iptables_open.conf, que tiene la configuracin de NAT y redirecciones. sh /etc/iptables_open.conf ########## # Firewall # ########## # Politicas por defecto iptables -P FORWARD DROP

Arturo Borrero Gonzlez

Pag. 5/6

Firewall con iptables


# Se permite el trafico TCP desde internet a la DMZ (web, ssh) iptables -t filter -A FORWARD -i $IF_INET -p tcp --dport 80 -d $IP_SERV1 -j ACCEPT iptables -t filter -A FORWARD -i $IF_INET -p tcp --dport 22 -d $IP_SERV2 -j ACCEPT iptables -t filter -A FORWARD -i $IF_INET -p tcp --dport 1312 -d $IP_SERV2 -j ACCEPT # Se permite el trfico TCP desde la DMZ a internet (web, ssh) iptables -t filter -A FORWARD -i $IF_DMZ -p tcp --sport 80 -s $IP_SERV1 -j ACCEPT iptables -t filter -A FORWARD -i $IF_DMZ -p tcp --sport 22 -s $IP_SERV2 -j ACCEPT iptables -t filter -A FORWARD -i $IF_DMZ -p tcp --sport 1312 -s $IP_SERV2 -j ACCEPT

Febrero 2011

# Podriamos especificar puertos concretos como: #80 http, 443 https, 143 imap, 220 imap3, 993 imap3, 110 pop3, 995 pop3s, 110 pop3 iptables -t filter -A FORWARD -i $IF_INET -p tcp -d $RED_LAN -m state --state ESTABLISHED -j ACCEPT iptables -t filter -A FORWARD -i $IF_INET -p udp --dport 1024: -d $RED_LAN -j ACCEPT # Se permite el trfico TCP/UDP desde LAN a internet iptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -p tcp --sport 1024: -j ACCEPT iptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -p udp --dport 53 -j DROP iptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -p udp --sport 1024: -j ACCEPT # Se permite el trfico TCP desde LAN a DMZ iptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -d $IP_SERV1 -p tcp --dport 80 -j ACCEPT iptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -d $IP_SERV2 -p tcp --dport 1312 -j ACCEPT iptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -d $RED_DMZ -p tcp --dport 22 -j ACCEPT # Se permite el trfico TCP desde DMZ a LAN iptables -t filter -A FORWARD -i $IF_DMZ -s $IP_SERV1 -d $RED_LAN -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT iptables -t filter -A FORWARD -i $IF_DMZ -s $IP_SERV2 -d $RED_LAN -p tcp --sport 1312 -m state --state ESTABLISHED -j ACCEPT iptables -t filter -A FORWARD -i $IF_DMZ -s $RED_DMZ -d $RED_LAN -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Tendremos que gestionar los permisos adecuados de lectura/escritura/ejecucin para estos ficheros. Copiando el script y sustituyendo las variables puede adaptarse rpida y fcilmente a las necesidades de otra red u otra configuracin similar. Los firewall con Iptables pueden llegar a ser muy restrictivos y muy concretos en el trfico que se permite/deniega. Esta es una configuracin bastante rpida y permisiva, pero eficaz como punto de partida para un ajuste mucho ms fino.

Arturo Borrero Gonzlez

Pag. 6/6

Potrebbero piacerti anche