Cortafuegos básicos
A continucación vemos unos ejemplos de cortafuegos básicos. No son cortafuegos hechos para cortar y pegar, la idea es proponer diversos ejemplos para que puedas sacar tus propias conclusiones y establecer el cortafuegos de acuerdo con sus propios intereses. Cada cortafuegos debería adaptarse a unas necesidades concretas.
Proteger la propia máquina I
El primer ejemplo define un ejemplo de cortafuegos para una máquina individual:
## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
## Establecemos politicas predeterminada
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.0.1 -j ACCEPT
# Permitimos una conexión a ssh y telnet (22 y 23) desde un equipo
iptables -A INPUT -s 192.168.0.37 -p tcp --dport 22:23 -j ACCEPT
# A otro le permitimos acceso FTP
iptables -A INPUT -s 192.168.0.45 -p tcp -dport 20:21 -j ACCEPT
# El puerto 80 (www) abierto, para un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Y el resto, lo cerramos
iptables -A INPUT -p tcp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 22:23 -j DROP
iptables -A INPUT -p tcp --dport 6001 -j DROP
|
Proteger la propia máquina II
## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
## Establecemos politica predeterminadas
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## creamos una nueva cadena
iptables -N filtro
## definimos las reglas dela nueva cadena
iptables -A filtro -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A filtro -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A filtro -j DROP
# Aceptamos conexiones internas
/sbin/iptables -A INPUT -i lo -j ACCEPT
## Ir a la cadena filtro desde las cadenas INPUT y FORWARD.
iptables -A INPUT -j block
iptables -A FORWARD -j block
|
Proteger la propia máquina III
## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
## Establecemos politica predeterminadas
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
# Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.0.1 -j ACCEPT
# Permitimos una conexión a telnet y ssh (puerto 22 y 23) desde un equipo
iptables -A INPUT -s 192.168.0.37 -p tcp --dport 22:23 -j ACCEPT
# A otro le permitimos acceso FTP
iptables -A INPUT -s 192.168.0.45 -p tcp -dport 20:21 -j ACCEPT
# El puerto 80 (www) debe estar abierto, ya que es un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Cerramos rango de los puertos privilegiados. Cuidado con este tipo de
# barreras, antes hay que abrir a los que si tienen acceso.
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
# impedimos iniciar conexión en los puertos altos
# (puede que ftp no funcione)
iptables -A INPUT -p tcp --syn --dport 1025:65535 -j DROP
# Cerramos otros puertos que estan abiertos
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
|
Red local con salida a internet
Una red local con salida a a internet necesita una regla que haga NAT hacia fuera (enmascaramiento en iptables).
# Activamos el reenvío para que FORWARD funcione
echo 1 > /proc/sys/net/ipv4/ip_forward
## FLUSH de reglas
iptables -F
iptables -X
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
## Nota: eth0 es el interfaz conectado a internet y eth1 a la LAN
# acceso localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde las redes locales
iptables -A INPUT -s 192.168.0.0/24 -i eth1 -j ACCEPT
# Ahora hacemos enmascaramiento de la red local
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0/0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0/0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0/0 -p tcp -dport 10000 -j DROP
|
Dos redes locales con salida a internet
Ahora tenemos dos redes locales y una salida a a internet. Ahora necesitamos dos reglas que hagan NAT hacia fuera (enmascaramiento en iptables) y además las reglas de enrutado entre redes.
# Activamos el reenvío para que FORWARD funcione
echo 1 > /proc/sys/net/ipv4/ip_forward
## FLUSH de reglas
iptables -F
iptables -X
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
## Nota: eth0 es el interfaz conectado a internet y eth1 a la LAN
# acceso localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde las redes locales
iptables -A INPUT -s 192.168.0.0/24 -i eth1 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -i eth2 -j ACCEPT
# Ahora hacemos enmascaramiento de las redes locales
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
# Abrimos el puerto del servidor web
iptables -A INPUT -s 0/0 -p tcp -dport 80 -j ACCEPT
# Abrimos el puerto del servidor DNS
iptables -A INPUT -s 0/0 -p tcp -dport 53 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp -dport 53 -j ACCEPT
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0/0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0/0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0/0 -p tcp -dport 10000 -j DROP
# configuramos el tráfico entre redes
# permitimos el tráfico para el puerto 445
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -p tcp -dport 445 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -p tcp -dport 445 -j ACCEPT
# denegamos el resto del tráfico
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j REJECT
iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j REJECT
|
Cortafuegos con política FORWARD predeterminada DROP
Esta es la forma aconsejada para configurar un cortafuegos si queremos poner énfasis en la seguridad.
## Vaciado de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica predeterminada: DROP
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
## Acceso desde la red
## Servidores WEB
# Acceso a puertos 80
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp --sport 80 -j ACCEPT
# Acceso a puertos 20 y 21 para ftp
iptables -A FORWARD -p tcp --dport 20:21 -j ACCEPT
iptables -A FORWARD -p tcp --sport 20:21 -j ACCEPT
# Acceso a DNS
iptables -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -p tcp --sport 53 -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -p udp --sport 53 -j ACCEPT
## correo electrónico
# Acceso a puerto 25, 110 y 143
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -p tcp --sport 110 -j ACCEPT
iptables -A FORWARD -p tcp --dport 143 -j ACCEPT
iptables -A FORWARD -p tcp --sport 143 -j ACCEPT
|
Cortafuegos con política predeterminada DROP
## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
## Establecemos predeterminada
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# permitimos el tráfico loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Configuramos el acceso a nuestra IP
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -s 0/0 -p tcp --sport 1:1024 -j ACCEPT
iptables -A INPUT -s 0/0 -p tcp --dport 1025:65535 ! --syn -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --sport 1:1024 -j ACCEPT
iptables -A OUTPUT -d 192.168.0.0/24 -j ACCEPT
iptables -A OUTPUT -d 0/0 -p tcp --sport 1025:65535 -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
# El cortafuegos es también un servidor web
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
# El cortafuegos es también un servidor smtp
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
|