Firewall iptables

6

Click here to load reader

description

Pequeño tutorial de una configuración básica para un firewall "de tres patas" usando Iptables.

Transcript of Firewall iptables

Page 1: Firewall iptables

Firewall con Iptables

Arturo Borrero Gonzá[email protected]

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

Page 2: Firewall iptables

Firewall con iptables Febrero 2011

INTRODUCCIÓN

Este documento trata de explicar una manera (de las muchas que hay) de montar un firewall “de tres patas” para alojar una configuración 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 González Pag. 2/6

Page 3: Firewall iptables

Firewall con iptables Febrero 2011

CUESTIONES PREVIAS

Los elementos principales son la máquina 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 dirección pública 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 máquina router servirá SSH a internet a través del puerto 22220 y por el resto de interfaces por el puerto 22.

5. El puerto 22 de la máquina router será reenviado al puerto 22 de SERV2.6. Debe de estar controlado el tráfico 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 rápidamente entre poner y quitar el firewall, dejando siempre las reglas de encaminamiento y redirecciones intactas.

El script es el siguiente (debe tener permisos de ejecución):

/etc/init.d/iptables

#!/bin/bash

RETVAL=0# Función iniciar firewallstart() {

echo "Adding hard firewall rules..."# fichero con reglas de iptables de firewall restrictivosh /etc/iptables_close.confRETVAL=0

}# Funcioón detener firewallstop() {

echo "Removing hard firewall rules..."# fichero con reglas de iptables de firewall abiertosh /etc/iptables_open.confRETVAL=0

}# Analizando parámetro recibidocase $1 in

start)start;;

stop)

Arturo Borrero González Pag. 3/6

Page 4: Firewall iptables

Firewall con iptables Febrero 2011

stop;;

restart)stopstart;;

status)/sbin/iptables -L/sbin/iptables -t nat -LRETVAL=0;;

*)echo "Usage: firewall {start|stop|restart|status}"RETVAL=1

esac

exit

Para añadir 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 configuración de iptables. Uno con las reglas de encaminamiento y no las de firewall y otro con ambas.

/etc/iptables_open.conf

#!/bin/bash

# VariablesIF_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 anterioresiptables -Fiptables -t nat -F PREROUTINGiptables -t nat -F POSTROUTINGiptables -t filter -F

# Politica por defecto

Arturo Borrero González Pag. 4/6

Page 5: Firewall iptables

Firewall con iptables Febrero 2011

iptables -P FORWARD ACCEPT

################### Nat y redirecciones ###################

# Nat en la interfaz eth1 hacia internetiptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 192.168.0.2

# Redirección de puertos para SERV1 (desde internet) a webiptables -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 webiptables -t nat -A PREROUTING -i $IF_INET -p tcp --dport 1312 -j DNAT --to-destination 192.168.2.151:1312iptables -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 SERV2iptables -t nat -A PREROUTING -p tcp -i $IF_INET --dport 22 -j DNAT --to-destination 192.168.2.151:22

A continuación, el fichero con la configuración de iptables “fuerte”:

/etc/iptables_close.conf

#!/bin/bash

# VariablesIF_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 anterioresiptables -Fiptables -t nat -F PREROUTINGiptables -t nat -F POSTROUTINGiptables -t filter -F

################## Nat y redirecciones ##################

# Ejecuto el fichero de iptables_open.conf, que tiene la configuración de NAT y redirecciones.sh /etc/iptables_open.conf

########### Firewall ###########

# Politicas por defectoiptables -P FORWARD DROP

Arturo Borrero González Pag. 5/6

Page 6: Firewall iptables

Firewall con iptables Febrero 2011

# 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 ACCEPTiptables -t filter -A FORWARD -i $IF_INET -p tcp --dport 22 -d $IP_SERV2 -j ACCEPTiptables -t filter -A FORWARD -i $IF_INET -p tcp --dport 1312 -d $IP_SERV2 -j ACCEPT

# Se permite el tráfico TCP desde la DMZ a internet (web, ssh)iptables -t filter -A FORWARD -i $IF_DMZ -p tcp --sport 80 -s $IP_SERV1 -j ACCEPTiptables -t filter -A FORWARD -i $IF_DMZ -p tcp --sport 22 -s $IP_SERV2 -j ACCEPTiptables -t filter -A FORWARD -i $IF_DMZ -p tcp --sport 1312 -s $IP_SERV2 -j ACCEPT

# Podriamos especificar puertos concretos como:#80 http, 443 https, 143 imap, 220 imap3, 993 imap3, 110 pop3, 995 pop3s, 110 pop3iptables -t filter -A FORWARD -i $IF_INET -p tcp -d $RED_LAN -m state --state ESTABLISHED -j ACCEPTiptables -t filter -A FORWARD -i $IF_INET -p udp --dport 1024: -d $RED_LAN -j ACCEPT

# Se permite el tráfico TCP/UDP desde LAN a internetiptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -p tcp --sport 1024: -j ACCEPTiptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -p udp --dport 53 -j DROPiptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -p udp --sport 1024: -j ACCEPT

# Se permite el tráfico TCP desde LAN a DMZiptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -d $IP_SERV1 -p tcp --dport 80 -j ACCEPTiptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -d $IP_SERV2 -p tcp --dport 1312 -j ACCEPTiptables -t filter -A FORWARD -i $IF_LAN -s $RED_LAN -d $RED_DMZ -p tcp --dport 22 -j ACCEPT

# Se permite el tráfico TCP desde DMZ a LANiptables -t filter -A FORWARD -i $IF_DMZ -s $IP_SERV1 -d $RED_LAN -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPTiptables -t filter -A FORWARD -i $IF_DMZ -s $IP_SERV2 -d $RED_LAN -p tcp --sport 1312 -m state --state ESTABLISHED -j ACCEPTiptables -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/ejecución para estos ficheros.

Copiando el script y sustituyendo las variables puede adaptarse rápida y fácilmente a las necesidades de otra red u otra configuración similar.

Los firewall con Iptables pueden llegar a ser muy restrictivos y muy concretos en el tráfico que se permite/deniega. Esta es una configuración bastante rápida y permisiva, pero eficaz como punto de partida para un ajuste mucho más fino.

Arturo Borrero González Pag. 6/6