¿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