Ip Tables

13
1 Borrar todas las reglas en Iptables root@nexolinux ~ # iptables -F root@nexolinux ~ # iptables --flush 2- Configurar políticas por defecto. Iptables por defecto tiene una configuración que permite todo, para un mayor control lo recomendable sería bloquear todo y permitir lo que queremos. Para ello hay dos formas, poner una regla en cada cadena (INPUT, OUTPUT, FORWARD ) que bloquee todo al final, pues recordad que lee de arriba a abajo en orden estricto, o lo mejor es poner la política por defecto DROP con lo que se negará todo salvo lo que configuremos, y no corremos el riesgo de tocar la última línea en una configuración y dejar el firewall abierto. root@nexolinux ~ # iptables -P INPUT DROP root@nexolinux ~ # iptables -P OUTPUT DROP root@nexolinux ~ # iptables -P FORWARD DROP root@nexolinux ~ # iptables --list Chain INPUT (policy DROP) Chain FORWARD (policy DROP) Chain OUTPUT (policy DROP)

description

seguridad informatica en debian

Transcript of Ip Tables

  • 1 Borrar todas las reglas en Iptables

    root@nexolinux ~ # iptables -F

    root@nexolinux ~ # iptables --flush

    2- Configurar polticas por defecto.

    Iptables por defecto tiene una configuracin que permite todo, para un mayor control lo

    recomendable sera bloquear todo y permitir lo que queremos. Para ello hay dos formas,

    poner una regla en cada cadena (INPUT, OUTPUT, FORWARD ) que bloquee todo al

    final, pues recordad que lee de arriba a abajo en orden estricto, o lo mejor es poner la

    poltica por defecto DROP con lo que se negar todo salvo lo que configuremos, y no

    corremos el riesgo de tocar la ltima lnea en una configuracin y dejar el firewall

    abierto.

    root@nexolinux ~ # iptables -P INPUT DROP

    root@nexolinux ~ # iptables -P OUTPUT DROP

    root@nexolinux ~ # iptables -P FORWARD DROP

    root@nexolinux ~ # iptables --list

    Chain INPUT (policy DROP)

    Chain FORWARD (policy DROP)

    Chain OUTPUT (policy DROP)

  • 3- Bloquear a una IP especfica.

    Para algunas direcciones IP que nos dan un trfico sospechoso:

    root@nexolinux ~ # iptables -A INPUT -s 192.168.1.22 -j DROP

    4- Permitir todo el trfico entrante de SSH

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state

    NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --

    state ESTABLISHED -j ACCEPT

    5- Permitir trfico de SSH slo de un segmento de red.

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport

    22 -m state --state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --

    state ESTABLISHED -j ACCEPT

    6- Permitir trfico HTTP y HTTPS

    #HTTP

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state

    NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --

    state ESTABLISHED -j ACCEPT

  • # HTTPS

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --

    state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --

    state ESTABLISHED -j ACC

    7- Combinar mltiples reglas con multipuerto.

    Este ejemplo permite todo el trfico entrante SSH, HTTP y HTTPS:

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp -m multiport --dports

    22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports

    22,80,443 -m state --state ESTABLISHED -j ACCEPT

    8- Permitir SSH saliente

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --

    state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state

    ESTABLISHED -j ACCEPT

    9- Permitir SSH slo a una red en particular.

    Esta regla slo permitir el trfico saliente ssh a una red en particular. En concreto la

    del rango 192.168.100.0/24

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --

    dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state

    ESTABLISHED -j ACCEPT

  • 10- Permitir HTTPS saliente.

    Esta regla es buena para permitir el internet a los usuarios.

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --

    state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --

    state ESTABLISHED -j ACCEPT

    11- Balanceo de trfico entrante.

    Se puede hacer balanceo en iptables, usando la extensin nth, as podemos balancear

    el trfico a tres direcciones IP distintas. Cada tercer paquete lo balancea

    al servidor adecuado.

    root@nexolinux ~ # iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state -

    -state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination

    192.168.1.101:443

    root@nexolinux ~ # iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state -

    -state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination

    192.168.1.102:443

    root@nexolinux ~ # iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state -

    -state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination

    192.168.1.103:443

    12- Permitir PING de fuera hacia dentro.

    root@nexolinux ~ # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

  • root@nexolinux ~ # iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

    13- Permitir PING de dentro a fuera.

    root@nexolinux ~ # iptables -A OUTPUT -p icmp --icmp-type echo-request -j

    ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

    14- Permitir trfico de la red interna al exterior.

    En un Firewall perimetral en donde las redes estn separadas completamente.

    # Si eth1 est conectada a una red externa (internet)

    # Si eth0 Est conectada a una red interna (192.168.1.x)

    root@nexolinux ~ # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

    15- Permitir trfico DNS saliente.

    root@nexolinux ~ # iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

    root@nexolinux ~ # iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

    16- Permitir Rsync de una red en particular.

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport

    873 -m state --state NEW,ESTABLISHED -j ACCEPT

  • root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --

    state ESTABLISHED -j ACCEPT

    17- Permitir POP3 y POP3S

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --

    state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --

    state ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --

    state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --

    state ESTABLISHED -j ACCEPT

    18- Prevenir ataques DoS

    -Limit 25/minute : Limita a slo 25 conexiones por minuto.

    -Limit-burst 100: Indica que el valor de limit/minute ser forzado slo despus del

    nmero de conexiones en este nivel.

    root@nexolinux ~ # iptables -A INPUT -p tcp --dport 80 -m limit --limit

    25/minute --limit-burst 100 -j ACCEPT

  • 19- Permitir redireccin de puertos.

    Ejemplo puerto 422 redirigimos al 22, con lo que podemos tener conexiones al puerto

    22 y al puerto 422 por ssh.

    root@nexolinux ~ # iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --

    dport 422 -j DNAT --to 192.168.102.37:22

    root@nexolinux ~ # iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --

    state NEW,ESTABLISHED -j ACCEPT

    root@nexolinux ~ # iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --

    state ESTABLISHED -j ACCEPT

    20- Sacar en el log los paquetes cados.

    Primero creamos una cadena llamada LOGGING:

    root@nexolinux ~ # iptables -N LOGGING

    Luego todas las conexiones entrantes vayan por la cadena LOGGING

    root@nexolinux ~ # iptables -A INPUT -j LOGGING

    Logueamos paquetes con un log-prefix

    root@nexolinux ~ # iptables -A LOGGING -m limit --limit 2/min -j LOG --log-

    prefix "IPTables Packet Dropped: " --log-level 7

    Y los bloqueamos:

  • root@nexolinux ~ # iptables -A LOGGING -j DROP

  • Firewall con Iptables Los firewall son imprescindibles en temas de seguridad y sistemas, podemos tenerlos a nivel de red, nivel de sistema o perimetrales (entre LAN e Internet). Iptables de Netfilter es el firewall implementado en el Kernel Linux estndar, soporta filtrado de paquetes, toda clase de direcciones de red, traducciones de puerto (NAT/NAPT) o filtrado por rangos de IP.

    Puede que a simple vista nos parezca el tpico firewall integrado en otros conocidos sistemas, pero no tiene nada que ver, ya que es implementado tanto en mquinas clientes como en servidores de grandes empresas e incluso en el caso de los firewall perimetrales en modo bridge podemos tener servidores dedicados para filtrar todo lo que entra y sale de nuestra red.

    En esta interesante pgina vemos que de las 100 mejores herramientas de seguridad, el primer software de Firewall en salir en el puesto 23 es del que hablamos, y en el cual justo comentan que en plataformas windows tambin hay muchos Firewall pero ninguno est en este listado.

    Top 100 herramientas de seguridad Hay unas cuantas cosas a tener en cuenta ya que con esta herramienta hay que tener mucho cuidado al gestionarla

    Lo primero a destacar es que no tiene un fichero de configuracin propiamente dicho, recordemos que est integrado en el propio kernel, esto es importante, dado que si en un momento dado la mquina se reiniciara podemos perder toda la configuracin, si queremos evitar esto o al menos antes de hacer cambios guardarlo o cambiando uno a uno los parmetros podemos hacerlo as:

    Guardamos configuracin en ruta por defecto /etc/sysconfig/iptables

  • # iptables-save

    Esto es recomendable antes de hacer cambios y a cada cambio que hacemos por si posteriormente tenemos problemas o tenemos que restaurar configuracin, en entornos crticos no podemos ponernos a teclear todo a mano, cada segundo con una aplicacin o servicio cado cuentan.

    # iptables-save > /root/iptables.`date +%F`01.txt

    Con este comando guardamos las reglas en el directorio del usuario root con la fecha actual en formatoiptables.2011101001.txt, siendo el ltimo nmero (01) el cambio que hagamos, por tanto ir creciendo a medida que hagamos para diferenciarlos.

    Para restaurar el iptables haremos esto de la ruta original:

    iptables-restore

    O por el contrario para un fichero determinado

    iptables-restore < /root/iptables.2011101001.txt

    Ahora vamos al lio, despus de esta pedazo introduccin esta es la forma de visualizar configuracin actual y gestionar reglas.Tambin podemos tener otras ms de las que se explican aqu pero en este artculo quiero explicar las bases ya que la configuracin se puede estirar sin lmites y dependiendo de las necesidades.

    Leer configuracin actual del iptables.

    # iptables --nL

    Y esto es lo que veremos:

  • con el siguiente comando nos saldrn las reglas con nmeros, que es algo muy til si queremos quitar reglas:

    #iptables -nL --line-numbers

    Si tenemos muchas reglas, a la hora de borrar con el line-numbers vemos de una forma fcil cual tenemos que quitar. Hay tres cadenas en la configuracin por defecto, INPUT, FORWARD, OUTPUT y luego una poltica.

    cadena INPUT Filtrado de paquetes que llegan al firewall y por lo tanto acceden a la mquina. cadena FORWARD Filtrado de paquetes que pasan a travs de nuestro firewall y tienen destino otra mquina.

  • cadena OUTPUT Filtrado de paquetes que salen de nuestro servidor a diferentes destinos. IMPORTANTE las reglas se leen en orden secuencial, comienza por la primera lnea, verifica condiciones y si encuentra alguna que la cumple o la prohibe la ejecuta sin verificar las siguientes. Gestionaremos el firewall con estos argumentos principalmente:

    # iptables -A INPUT -s 0.0.0.0 -p tcp --dport 80 -j ACCEPT

    Aade una regla a la cadena INPUT por ejemplo, de source cualquier direccin ip, en el protocolo tcp, por el puerto 80 y lo acepta.

    # iptables -I CADENA 2 [regla que queremos insertar] -j [ACCEPT, DROP]

    Inserta una regla antes que la regla nmero X en la cadena determinada, recordemos el orden de lectura.

    # iptables -N EJEMPLO

    Crear cadena personalizada nueva de nombre ejemplo, en entornos con muchsimos servidores es casi mejor hacerlo modular y separarlos.

    # iptables -D EJEMPLO 3

    Elimina la regla 3 de la cadena EJEMPLO

    Si queremos meter una regla para permitir el acceso a SSH a ese servidor desde una determinada mquina 192.168.1.24 ponemos algo como esto:

    # iptables -A INPUT -s 192.168.1.24 -p tcp --dport 22 -j ACCEPT

    Si queremos denegar todas los dems accesos a SSH a este servidor la regla que tiene que ir debajo, (no a continuacin pero es importante que la de aceptar est por encima), va a ser algo as:

    # iptables -A INPUT -s 0.0.0.0 -p tcp --dport 22 -j DROP

    Pero no es necesario que denegar todas las reglas una a una como es obvio, para ello tenemos dos formas posibles, una muy comn es poner en la ltima regla un parmetro de forma que aparezca as entodas las cadenas:

  • Chain INPUT (policy ACCEPT)

    target prot opt source destination

    ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED

    ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

    ACCEPT tcp -- anywhere anywhere tcp dpt:www

    DROP all -- anywhere anywhere

    En este ejemplo slo he puesto en la cadena INPUT, pero se pone en todas, en la ltima posicin.Denegando todos los dems accesos que no estn en nuestra configuracin. Otra forma de hacerlo sera ponerlo en la Politica, si la ponemos por defecto como DROP, esto hace el firewall ms seguro, tenemos que saber que hay que tener permitido y que no, con todo detalle. Es mucho ms difcil de mantener y se administra diferente de poner la regla de DROP al final de cada cadena, con lo que de hacerlo hay que hacerlo desde el principio, porque si no es caos.

    Regla de los puertos altos Algunos protocolos son bidireccionales, una vez hecha la conexin como por ejemplo al conectarnos conSSH si ejecutamos un comando tan simple como ls el servidor nos manda esa informacin de vuelta por otro puerto que no es el 22 (SSH) con que hacemos la conexin del protocolo. Se pone en la cadena de OUTPUT normalmente para que deje abiertas las conexiones ESTABLISHED, tiene que quedar de la siguiente forma:

    ACCEPT tcp -- anywhere anywhere tcp spt:smtp dpts 1024:65535 state

    ESTABLISHED