Google
Web dns.bdat.net

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