root# iptables --list
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 root# iptables --verbose --list INPUT Chain INPUT (policy ACCEPT 115 packets, 15731 bytes) pkts bytes target prot opt in out source destination |
Aparte de las tres cadenas que existen por defecto (INPUT, OUTPUT y FORWARD), el usuario puede crear cadenas nuevas:
root# iptables --new new_chain
|
Así, cuando un paquete “acierta” con una regla de una cadena, la acción puede ser que pase a ser procesado por la nueva cadena. Esto se hace para reducir el número de reglas por cadena y que así sean más fáciles de manejar.
Si ninguna de las reglas de la nueva cadena procesa el paquete, el proceso de chequeo continúa por la siguiente regla que referenciaba a la nueva cadena.
Pone a cero los contadores de la cadena:
root# iptables --zero chain_name
|
Por defecto las cadenas INPUT, OUTPUT y FORWARD están en modo ACCEPT, significando que dejan pasar los paquetes. Esto puede modificarse cambiando lo que define como “policy” de la cadena. Un ejemplo que evita que podamos transmitir ningún paquete:
root# iptables --policy OUTPUT DROP
|
Los posibles modos de una regla o de una cadena son:
Para eliminar las reglas de una cadena, escribir:
root# iptables --flush chain_name
|
Podemos borrar una cadena vacía con:
root# iptables --delete-chain chain_name
|
En el siguiente ejemplo se filtra todo aquel paquete que vaya dirigido a la dirección IP 27.0.0.1:
root# 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 root# iptables --append INPUT --source 127.0.0.1 --protocol icmp --jump 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 root# iptables --verbose --list INPUT Chain INPUT (policy ACCEPT 169 packets, 21274 bytes) pkts bytes target prot opt in out source destination 1 84 DROP icmp -- any any localhost.localdomain anywhere |
Borraremos la regla que acabamos de crear con:
root# iptables --delete INPUT 1
|
O también con:
root# iptables --delete INPUT --source 127.0.0.1 --protocol icmp --jump DROP
|
Nótese que los argumentos son idénticos a los que utilizamos para crear la regla.
Algunos de los parámetros con los que podemos jugar son (véase [12] y [1] para más información):
root# iptables --append OUTPUT --destination ! 192.168.213.0/24 --jump DROP
|
# Nótese el flag --syn que ‘‘matches’’ sólo los paquetes TCP
# de establecimiento de conexión root# iptables --append INPUT --protocol tcp --syn --dport ! http --jump REJECT |
root# iptables --append INPUT --protocol tcp --syn --dport ! 22 --jump ACCEPT
|
root# iptables --append INPUT --in-interface eth0 --jump ACCEPT
|
Existen dos comandos para hacer esto: iptables-save y iptables-restore. Ambas leen y escriben la entrada y salida estándares. Ejemplos:
root# iptables-save > iptables.txt
root# iptables-restore < iptables.txt |