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