lunes, 17 de junio de 2013

Seguridad en IP Tables (Linux) - Operaciones con una regla simple


Esta es la base del filtado de paquetes, la manipulación de reglas. Normalmente utilizarás los comandos de añadir (-A) y eliminar (-D), las otras (-I para insertar y -R para reemplazar) son extensiones de estos conceptos.

Cada regla especifica un conjunto de condiciones que un paquete debe cumplir, y lo que haremos si cumple dichas condiciones (efectuaremos una 'acción'). Por ejemplo, puede que quieras hacer DROP de los paquetes ICMP provinientes de la dirección 127.0.0.1. En este caso definiremos el protocolo como ICMP, la dirección de origen como 127.0.0.1 y la acción será DROP.

127.0.0.1 es el interface 'loopback' que tendrá en su máquina incluso si no dispone de una conexión real a la red. Puede hacer un 'ping' para generar paquetes dichos paquetes (un ping simplemente envia paquetes ICMP del tipo 8 (petición de eco) que todos los hosts operativos deberán responder con un paquete ICMP de tipo 0 (respuesta del eco). Esto hace ping muy útil para el testeo.

    # ping -c 1 127.0.0.1
    PING 127.0.0.1 (127.0.0.1): 56 data bytes
    64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 0.2/0.2/0.2 ms

    # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

    # ping -c 1 127.0.0.1
    PING 127.0.0.1 (127.0.0.1): 56 data bytes

    --- 127.0.0.1 ping statistics ---
    1 packets transmitted, 0 packets received, 100% packet loss
    #


Puedes ver aquí como funciona el ping (el parámetro '-c 1' le indica a ping que envíe un único paquete).

Despues añadimos (-A) a la chain 'INPUT' (de entrada) una regla especificando que los paquetes que vengan de 127.0.0.1 (-s 127.0.0.1) con el protocolo ICMP (-p icmp) deberán tomar la acción DROP (-j DROP)

Una vez hecho esto, probamos la regla con un segundo ping. El programa esperará una respuesta que nunca llegará Podemos eliminar esta regla de dos formas. La primera, ya que sabemos que es la única regla en la chain de entrada (input), podemos utilizar su número para borrarla:

              # iptables -D INPUT 1

La segunda forma es igual a la del comando -A, pero sustituyendo -A por -D. Esto es útil cuando tiene varias reglas complejas y no quieres tener que contarlas hasta encontrar la que buscabas. Para estos casos usaremos:

              # ipchains -D INPUT -s 127.0.0.1 -p icmp -j DROP

La sintáxis de -D debe ser exáctamente igual a la de -A (o -I o -R). Si hay  múltiples reglas iguales en la misma chain, sólo la primera será eliminada