Introducción amigable a iptables (Parte 1)

Publicado en 'Redes e Internet' por carlitosfriend, 3 Nov 2012.





  1. carlitosfriend

    carlitosfriend Miembro maestro

    Registro:
    19 Feb 2011
    Mensajes:
    805
    Likes:
    105




    Introducción amigable a iptables


    iptables, una herramienta de cortafuegos que permite no solamente filtrar paquetes, sino también realizar traducción de direcciones de red (NAT) para IPv4 o mantener registros de log.
    iptables es el nombre de la herramienta de espacio de usuario mediante la cual el administrador puede definir políticas de filtrado del tráfico que circula por la red.
    iptables es un software disponible en prácticamente todas las distribuciones de Linux actuales.


    [​IMG]


    Cadenas

    Las cadenas pueden ser para tráfico entrante (INPUT), tráfico saliente (OUTPUT) o tráfico reenviado (FORWARD).


    Reglas de destino

    Las reglas de destino pueden ser aceptar conexiones (ACCEPT), descartar conexiones (DROP),vrechazar conexiones (REJECT), encaminamiento posterior (POSTROUTING), encaminamiento previo (PREROUTING), SNAT, NAT, entre otras.


    Políticas por defecto

    Establecen cual es la acción a tomar por defecto ante cualquier tipo de conexión. La opción -P cambia una política para una cadena. En el siguiente ejemplo se descartan ( DROP) todas las conexiones que ingresen (INPUT), todas las conexiones que se reenvíen (FORWARD) y todas las conexiones que salgan (OUTPUT), es decir, se descarta todo el tráfico que entre desde una red pública y el que trate de salir desde la red local.


    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT DROP


    Limpieza de reglas

    A fin de poder crear nuevas reglas, se deben borrar las existentes, para el tráfico entrante, tráfico reenviado y tráfico saliente así como el NAT.

    iptables -F INPUT
    iptables -F FORWARD
    iptables -F OUTPUT
    iptables -F -t nat


    Las opciones más comunes son:

    -A añade una cadena, la opción -i define una interfaz de tráfico entrante
    -o define una interfaz para trafico saliente
    -j establece una regla de destino del tráfico, que puede ser ACCEPT, DROP o REJECT.
    -m define que se aplica la regla si hay una coincidencia específica
    --state define una lista separada por comas de distinto tipos de estados de las conexiones (INVALID, ESTABLISHED, NEW, RELATED).
    --to-source define que IP reportar al tráfico externo
    -s define trafico de origen
    -d define tráfico de destino
    --source-port define el puerto desde el que se origina la conexión
    --destination-port define el puerto hacia el que se dirige la conexión
    -t tabla a utilizar, pueden ser nat, filter, mangle o raw.



    Ejemplos de reglas

    Reenvío de paquetes desde una interfaz de red local (eth1) hacia una interfaz de red pública (eth0):

    Código:
    iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT



    Aceptar reenviar los paquetes que son parte de conexiones existentes (ESTABLISHED) o relacionadas de tráfico entrante desde la interfaz eth1 para tráfico saliente por la interfaz eth0:

    Código:
    iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT



    Permitir paquetes en el propio muro cortafuegos para tráfico saliente a través de la interfaz eth0 que son parte de conexiones existentes o relacionadas:

    Código:
    iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT



    Permitir (ACCEPT) todo el tráfico entrante (INPUT) desde (-s) cualquier dirección (0/0) la red local (eth1) y desde el retorno del sistema (lo) hacia (-d) cualquier destino (0/0):

    Código:
    iptables -A INPUT -i eth1 -s 0/0 -d 0/0 -j ACCEPT
    Código:
    iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT



    Hacer (-j) SNAT para el tráfico saliente (-o) a tráves de la interfaz eth0 proveniente desde (-s) la red local (192.168.0.0/24) utilizando (--to-source) la dirección IP w.x.y.z

    Código:
    iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o eth0 -j SNAT --to-source w.x.y.z



    Descartar (DROP) todo el tráfico entrante (-i) desde la interfaz eth0 que trate de utilizar la dirección IP pública del servidor(w.x.y.z), alguna dirección IP de la red local (192.168.0.0/24) o la dirección IP del retorno del sistema (127.0.01)

    Código:
    iptables -A INPUT -i eth0 -s w.x.y.x/32 -j DROP
    Código:
    iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP
    Código:
    iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP



    Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (--destination-port) de los protocolos SMTP (25), HTTP(80), SSH (22) y HTTPS (443):

    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 25 --syn -j ACCEPT
    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 80 --syn -j ACCEPT
    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 22 --syn -j ACCEPT
    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 443 --syn -j ACCEPT



    Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p -tcp) para los puertos (--destination-port) del protocolos SMTP (25) en el servidor (w.x.y.z/32), desde (-s) cualquier lugar (0/0) hacia (-d) cualquier lugar (0/0).

    Código:
    iptables -A INPUT -p tcp -s 0/0 -d w.x.y.z/32 --destination-port 25 --syn -j ACCEPT



    Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (--destination-port) de los protocolos POP3 (110), POP3S (995), IMAP (143) y IMAPS (993):

    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 110 --syn -j ACCEPT
    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 995 --syn -j ACCEPT
    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 143 --syn -j ACCEPT
    Código:
    iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 993 --syn -j ACCEPT



    Aceptar (ACCEPT) el tráfico entrante (-i) proveniente desde la interfaz eth1 cuando las conexiones se establezcan desde el puerto (--sport) 67 por protocolos (-p) TCP y UDP.

    Código:
    iptables -A INPUT -i eth1 -p tcp --sport 68 --dport 67 -j ACCEPT
    Código:
    iptables -A INPUT -i eth1 -p udp --sport 68 --dport 67 -j ACCEPT



    Aceptar (ACCEPT) conexiones de tráfico entrante (INPUT) por protocolo (-p) UDP cuando se establezcan desde (-s) el servidor DNS 200.33.145.217 desde el puerto (--source-port) 53 hacia (-d) cualquier destino (0/0):

    Código:
    iptables -A INPUT -p udp -s 200.33.146.217/32 --source-port 53 -d 0/0 -j ACCEPT


    Cerrar accesos

    Descartar (DROP) el tráfico entrante (INPUT) para el protocolo (-p) TCP hacia los puerto (--destination-port) de SSH (22) y Telnet (23):

    Código:
    iptables -A INPUT -p tcp --destination-port 22 -j DROP
    Código:
    iptables -A INPUT -p tcp --destination-port 23 -j DROP



    Descartar (DROP) todo tipo de conexiones de tráfico entrante (INPUT) desde (-s) la dirección IP 190.32.123.98:

    Código:
    iptables -A INPUT -s 190.32.123.98 -j DROP



    Rechazar (REJECT) conexiones hacia (OUTPUT) la dirección IP a.b.c.d desde la red local:

    Código:
    iptables -A OUTPUT -d a.b.c.d -s 192.168.0.0/24 -j REJECT



    Eliminar reglas

    En general se utiliza la misma regla, pero en lugar de utilizar -A (append), se utiliza -D (delete).
    Eliminar la regla que descarta (DROP) todo tipo de conexiones de tráfico entrante (INPUT) desde (-s) la dirección IP a.b.c.d:

    Código:
    iptables -D INPUT -s a.b.c.d -j DROP



    Mostrar la lista de cadenas y reglas

    Una vez cargadas todas las cadenas y reglas de iptables es posible visualizar éstas utilizando el mandato iptables con las opciones -n, para ver las listas en formato numérico y -L, para solicitar la lista de éstas cadenas.

    Código:
    iptables -nL


    Cuando no hay reglas ni cadenas cargadas, la salida debe devolver lo siguiente:


    Código:
    Chain INPUT (policy ACCEPT) 
    target     prot opt source               destination          
    
    Chain FORWARD (policy ACCEPT) 
    target     prot opt source               destination          
    
    Chain OUTPUT (policy ACCEPT) 
    target     prot opt source               destination  




    Firewall con iptables

    Para generar este script con iptables, se deben seguir los siguientes pasos:

    Se crea un archivo de texto con un editor de texto plano cualquiera, como ser vi, emacs o nano, entre muchísimos otros. A este archivo se lo llama, por ejemplo, iptables_ipt
    Se le da permiso de ejecución mediante el comando chmod u+x o también chmod 700 iptables_ipt.
    Se ejecuta desde la línea de comandos ./iptables_ipt




    Firewall para protejer el propio equipo


    [​IMG]


    Sigue en la parte 2
     
    Última edición: 3 Nov 2012