Como utilizar IPTables para bloquear IP

¿Cómo bloquear direcciones IP particulares o un host con el comando iptables de Linux?

Para ello es necesario utilizar las siguientes sintaxis para colocar una dirección IP o host, que se desea bloquear, con el comando iptables.

Ejemplo: Bloquear las solicitudes entrantes desde la IP 1.2.3.4

El siguiente comando sirve para ignorar cualquier paquete que viene de la dirección IP 1.2.3.4:

/sbin/iptables -I INPUT -s {NUMERO-IP} -j DROP
/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP

 

También puede especificar una interfaz como eth1 a través de la cual se reciben los paquetes:

/sbin/iptables -I INPUT -i {NOMBRE-INTERFACE} -s {NUMERO-IP} -j DROP
/sbin/iptables -I INPUT -i eth1 -s 1.2.3.4 -j DROP
 

Tenga en cuenta que cuando en el argumento se utiliza antes un «!» en el nombre de la interfaz, se invierte el sentido

/sbin/iptables -I INPUT ! -i {NOMBRE-INTERFACE} -s {NUEMRO-IP} -j DROP
 /sbin/iptables -I INPUT ! -i eth1 -s 1.2.3.4 -j DROP

Si el nombre de la interfaz termina en un «+», entonces cualquier interfaz que comienza con ese nombre se tomará como coincidencia. Si se omite esta opción, cualquier nombre de interfaz activa se tomará:

/sbin/iptables -I INPUT -i {INTERFACE-NAME-HERE}+ -s {IP-HERE} -j DROP
 /sbin/iptables -I INPUT -i br+ -s 1.2.3.4 -j DROP
 

Usted puede reemplazar reglas con -I INPUT (insertar) teniendo en cuenta como se construyó la regla con -A INPUT (agregar) como lo siguiente:

/sbin/iptables -A INPUT -s 1.2.3.4 -j DROP
 /sbin/iptables -i eth1 -A INPUT -s 1.2.3.4 -j DROP
 

¿Cómo bloqueo una red (xx.yy.zz.ww /ss)?

Utilice la siguiente sintaxis para bloquear la red 10.0.0.0/8 en la interfaz eth1:

/sbin/iptables -i eth1 -A INPUT -s 10.0.0.0/8 -j DROP

 

¿Cómo bloqueo una IP y construyo un registro de de información sobre la regla?

Puede activar el registro del kernel y que se graben los paquetes que coinciden con el objetivo de la siguiente manera:

/sbin/iptables -i eth1 -A INPUT -s 10.0.0.0/8 -j LOG --log-prefix "LOG DE IP:"

Luego hay que especificar la regla de bloqueo de la red:

/sbin/iptables -i eth1 -A INPUT -s 10.0.0.0/8 -j DROP

¿Cómo puedo ver el listado de las direcciones IP que he bloqueado?

/sbin/iptables -L -v

O tambíen:

/sbin/iptables -L INPUT -v

O:

/sbin/iptables -L INPUT -v -n

 

Ejemplo de la salida del comando anterior:

chain INPUT (policy ACCEPT 3107K packets, 1847M bytes)
 pkts bytes target prot opt in out source destination
 0 0 DROP all -- br+ any 1.2.3.4 anywhere
 0 0 DROP all -- !eth1 any 1.2.3.4 anywhere
 0 0 DROP all -- !eth1 any 1.2.3.4 anywhere
 

¿Cómo puedo encontrar la dirección IP bloqueada?

Utilice el comando grep para ello:

iptables -L INPUT -n --line-numbers
 iptables -L INPUT -n --line-numbers | grep 1.2.3.4
 

Ejemplo de salida:

num pkts bytes target prot opt in out source destination
 1 0 0 DROP 0 -- * * 116.199.128.1 0.0.0.0/0
 2 0 0 DROP 0 -- * * 116.199.128.10 0.0.0.0/0
 3 0 0 DROP 0 -- * * 123.199.2.255 0.0.0.0/0
 

Para borrar la regla número 3 ingrese

iptables -D INPUT 3

Para verificar:

iptables -L INPUT -v -n

También puede utilizar la siguiente sintaxis:

iptables -D INPUT -s 1.2.3.4 -j DROP

¿Cómo guardar la reglas de bloqueo de iptables?

Si está utilizando RedHat/RHEL/CentOS/Fedora, escriba el siguiente comando:

iptables -D INPUT -s 1.2.3.4 -j DROP
##########################
#////// command to save iptables ///////#
##########################
/sbin/service iptables save
less /etc/sysconfig/iptables
grep '1.2.3.4' /etc/sysconfig/iptables

Para otras distribuciones de Linux user el comando iptables-save para volcar las reglas en un archivo:

iptables-save > /root/mifirewall.conf

Recuerde, no que tiene que ejecutar el comandos ‘iptables-save’ o ‘service iptables save’ tan pronto luego de añadir o eliminar una regla para una dirección IP.

Una nota acerca de restaurar el cortafuegos

Para restaurar el servidor de seguridad utilizar el comando para restablecer las tablas desde el archivo ya guardado:

iptables-restore < /root/mifirewall.conf

¿Cómo bloqueo gran número de direcciones IP o subredes?

Podria utilizar el siguiente script de shell. Fijarse que las ip están guardadas en un archivo «/root/bloqueo.ip.db», una por línea.

#!/bin/bash
 _input="/root/bloqueo.ip.db"
 IPT=/sbin/iptables
 $IPT -N droplist
 egrep -v "^#|^$" x | while IFS= read -r ip
 do
 $IPT -A droplist -i eth1 -s $ip -j LOG --log-prefix "Lista de IP Bloqueadas"
 $IPT -A droplist -i eth1 -s $ip -j DROP
 done < "$_input"

Drop it

$IPT -I INPUT -j droplist
 $IPT -I OUTPUT -j droplist
 $IPT -I FORWARD -j droplist

Bloquear la solicitud saliente desde una IP, por ejemplo 192.168.1.2?

Utilice la siguiente comando:

/sbin/iptables -A OUTPUT -s 192.168.1.2 -j DROP
 /sbin/service iptables save
 

También puede utilizar las cadenas FORWARD cuando los paquetes son reenviados a través de otra interfaz. Por lo general, FORWARD se utiliza cuando se configura a linux como un router:

/sbin/iptables -A FORWARD -s 192.168.1.200 -j DROP
 /sbin/service iptables save
Avatar
Carlos Dagorret
CTO Facultad de Ciencias Económicas

My research interests include distributed robotics, mobile computing and programmable matter.

Relacionado

comments powered by Disqus