lunes, 26 de octubre de 2009

Tips iptables.

iptables -L
iptables -nvL
iptables-save > conf.iptables.tcp.protec
vi conf.iptables.tcp.protec
iptables-restore conf.iptables.tcp.protec
iptables -nvL
/etc/init.d/iptables save active





http://www.gentoo-wiki.info/Category:Firewall


========= Esto extraído de linuca ===========================

Iptables es una aplicación en linea de comandos que gestiona el filtrado de paquetes en sistemas Linux (kernels 2.4.x), en base a las reglas que hayamos definido. Iptables es mucho más potente que su antecesor Ipchains (kernels 2.2.x).

La estructura de Iptables es básicamente una cola : cuando un paquete llega, este es validado contra cada una de las reglas del firewall, en el momento que alguna regla casa (match) , se ejecuta la acción que haya sido definida en la regla (descartar el paquete, acceptarlo, enrutarlo, etc).

La estructura de un comando iptables es la siguiente :

iptables -t [tabla] -[AIRDLFZNXP] [regla] [criterio] -j [acción]

Vamos a ver que es cada cosa :

-t [tabla] Esta parte del comando especifica cual es la tabla en la que queremos añadir la regla. Existen 3 tipos de tablas válidas : nat, filter y mangle, siendo filter la tabla por defecto si se omite esta parte del comando. Nat se refiere a las conexiones que serán modificadas por el firewall, como por ejemplo, enmascarar conexiones, realizar redirecciones de puertos, etc. Filter es la tabla donde se añaden las relacionadas con el filtrado. Mangle tambien modifica paquetes pero, a diferencia de Nat, es mucho mas potente. Con Mangle podemos modificar cualquier aspecto del paquete (flags, TTL, etc).
-[AIRDLFZNXP] [regla] Hay 4 opciones básicas con las que se puede jugar en esta apartado del comando. Estas opciones básicas son las siguientes :

# A es para añadir (Append) una regla. Reglas válidas son INPUT, FORWARD y OUTPUT.
# L es para listar las reglas.
# F es para borrar todas las reglas o en el caso de INPUT, FORWARD o OUTPUT seán dados como argumento se borraran las reglas asociadas solo a esa clase.
# P establece la politica por defecto del firewall. Por defecto es aceptar todas las conexiones.
[criterio] Aqui es donde se especificarán las características del tipo de paquete que casará con esta regla. Para establecer reglas sencillas (reglas stateless), podemos operar con las siguientes opciones : -s (ip/red fuente), -d (ip/red destino), --sport (puerto fuente), --dport (puerto destino), y -p (protocolo). Un ejemplo de comando de la sintaxis de un ocmando iptables sencillo podría ser este (la parte en que se define el criterio de la regla está en negrita) :

iptables -A FORWARD -p [protocolo] -s [ip/red fuente] --sport [puerto fuente] -d [ip/red destino] --dport [puerto destino] -j DROP
-j [action] Aqui establecemos que es lo que hay que hacer con el paquete. Las posibles opciones son : ACCEPT, REJECT, DROP, REDIRECT, LOG (existén más, pero estas son las básicas).

ACCEPT aceptará el paquete.
REJECT o DROP lo desecharán, la direncia entre ellos reside en que DROP descartará el paquete silenciosamente y REJECT emitirá un paquete ICMP Port Unreachable, indicando que está cerrado.
REDIRECT redirigirá el paquete a donde se indique en el criterio del comando y por último...
LOG lo logeará para su posterior análisis.


Iptables es muy flexible y puede hacer cualquier cosa que se os ocurra a los paquetes que pasan por la red, man iptables y www.netfilter.org os informarán de todo lo que hay que saber.

Para finalizar el tutorial-relampago, vamos a ver unos ejemplos y lo que hacen, que muchas veces aclaran más las cosas que la pura documentacion ;-).

Comando iptables -A INPUT -p tcp -i eth0 --dport 80 -j DROP
Descripción Cerrar conexiones entrantes desde eth0 y hacia el puerto (local) 80 (HTTP)


Comando iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/255.255.255.0 -j MASQUERADE
Descripción Enmascarar por las conexiones procedentes de la red 10.0.0.0 como si lo hicieran desde la ip configurada en la interfaz eth0. (típica regla en un router linux compartiendo la conexión eth0 con la red local conectada a eth1).
Una regla equivalente a esta puede ser esta (si atacamos por SNAT en lugar de MASQUERADE):

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to ip-de-eth0

NOTA: Para que esta regla funcione correctamente, así como todas las reglas FORWARD, PREROUTING, etc, es necesario activar el forwardeo entre interfaces en el kernel :
#echo 1 > /proc/sys/net/ipv4/ip_forward


Comando iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
Descripción Redireccionar al puerto 3128 (proxy) todos los paquetes que entran por eth1 y con destino puerto 80 (HTTP), de esta manera conseguimos un proxy transparente.


Comandos iptables -A INPUT -p tcp -i eth0 -m state --state NEW,ESTABLISHED,RELATED --dport 22 -j ACCEPT
iptables -A INPUT -p all -i eth0 -m state --state NEW,INVALID -j DROP
Descripción Detener todas las conexiones entrantes desde la interfaz eth0 menos la conexiones al servicio ssh. La primera regla deja pasar los paquetes al 22 y la segunda cierra todo lo demas. Sin embargo todas las conexiones que se realizen desde la máquina (como navegar, consultar correo, etc) estarán permitidas por que no son conexiones iniciadas desde "fuera". Con ipchains este tipo de reglas (reglas de inspección de estado, statefull) no existían.


Comandos iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
iptables -A FORWARD -i eth0 -p icmp --icmp-type 8 -j DROP
Descripción Deshabilitar los paquetes ICMP entrantes de tipo echo (8) para el firewall (regla INPUT) y la red protegida (regla FORWARD).




Comandos iptables -A INPUT -i eth0 -f -m length --length 0:40 -j DROP
iptables -A FORWARD -i eth0 -f -m length 0:40 -j DROP
Descripción Denegar paquetes fragmentados por debajo de 40 bytes. Tanto para conexiones que dirigidas al firewall (regla INPUT) como las que pasan a traves de él (regla FORWARD). Esta regla evita ataques del tipo "Tiny Fragment Attack"

=============================================