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:
-
ACCEPT:
- Aceptar el paquete.
-
DROP:
- Destruir el paquete.
-
REJECT:
- Destruir el paquete pero enviando un paquete ICMP de puerto
inalcanzable.
-
QUEUE:
- Pasar al paquete al espacio de usuario. Se utiliza para procesar los
paquetes que llegan por un determinado proceso, independientemente de que
vayan o no dirigidos a él.
-
RETURN:
- Retornar (sin chequear más reglas) a la canena que nos dió el control.
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):
-
Las direcciones IP de origen y destino:
- Por ejemplo, podemos especificar sólo los
paquetes que van dirigidos a la red local puedan salir del host:
root# iptables --append OUTPUT --destination ! 192.168.213.0/24 --jump DROP
-
El protocolo utilizado:
- Ejemplo, sólo el tráfico Web de entrada está permitido:
# 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
-
El puerto utilizado:
- Sólo aquellos paquetes que vayan al puerto 22 (SSH) serán
aceptados:
root# iptables --append INPUT --protocol tcp --syn --dport ! 22 --jump ACCEPT
-
El interface de red usado:
- Esto es útil cuando estamos creando un router o un NAT.
Ejemplo, aceptar todo lo que venga de eth0:
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
__________________________________________________________________
Taller E.1: Configure iptables para aceptar sólo el tráfico Web.
____________