Red de conocimiento informático - Material del sitio web - Cómo bloquear una gran cantidad de direcciones IP maliciosas en Linux

Cómo bloquear una gran cantidad de direcciones IP maliciosas en Linux

En muchos casos, es posible que necesites bloquear direcciones IP en Linux. Por ejemplo, como usuario final, es posible que desee estar protegido contra software espía o seguimiento de IP. O cuando ejecuta software P2P. Es posible que desee filtrar los enlaces web para detectar actividad anti-P2P. Si es administrador de sistemas, es posible que desee prohibir que las direcciones IP no deseadas accedan a su servidor de correo corporativo. O desea prohibir que ciertos países accedan a su servicio web por algún motivo. Sin embargo, en muchos casos, su lista de bloqueo de direcciones IP puede crecer rápidamente hasta decenas de miles de IP. ¿Cómo lidiar con esto?

Problema de Netfilter/IPtables

En Linux, simplemente puedes usar el marco netfilter/iptables para prohibir direcciones IP:

$ sudo iptables -A INPUT - s 1.1.1.1-p TCP -j DROP

Si quieres bloquear completamente un rango de direcciones IP, puedes hacerlo fácilmente con el siguiente comando:

$ sudo iptables -A INPUT -s 1.1.2.0/24-p TCP -j DROP

Sin embargo, cuando tienes 1000 direcciones IP independientes sin el prefijo CIDR (enrutamiento entre dominios sin clases), ¿qué haces? ¡Necesitas tener 1000 reglas de iptable! Evidentemente, esto no es adecuado para blindajes a gran escala.

$ sudo iptables -A INPUT -s 1.1.1.1-p TCP -j DROP

$ sudo iptables -A INPUT -s 2.2.2.2-p TCP -j DROP

p>

$ sudo iptables -A INPUT -s 3.3.3.3-p TCP -j DROP

....

¿Qué es un conjunto de IP? ?

Aquí es cuando el conjunto IP sube al escenario. Los conjuntos de IP son una característica del kernel que permite codificar y almacenar de manera eficiente múltiples direcciones IP (independientes), direcciones MAC o incluso números de puerto en una estructura de datos de kernel de mapa de bits/hash. Una vez creado el conjunto de IP, puede crear una regla de iptables para que coincida con el conjunto.

Pronto verás los beneficios de la recopilación de IP. ¡Te permite unir múltiples direcciones IP con una regla de iptable! Puede crear conjuntos de IP con varias direcciones IP y números de puerto, y actualizar reglas dinámicamente sin afectar el rendimiento.

Instalación de la herramienta IPset en Linux

Para crear y administrar conjuntos de IP, necesita utilizar una herramienta de espacio de usuario llamada ipset.

Para instalar en Debian, Ubuntu o Linux Mint:

$ sudo apt-get install ipset

Para instalar en Fedora o CentOS/RHEL 7:

p>

$ sudo yum install ipset

Usa el comando IPset para prohibir IP

Déjame decirte cómo usar el comando ipset a través de un ejemplo simple .

Primero, creemos un nuevo conjunto de IP llamado banthis (nombre cualquiera):

$ sudo ipset create banthis hash:net

Segundo parámetro (hash : net) es obligatorio y representa el tipo de colección. Existen varios tipos de conjuntos de IP. hash: el conjunto de IP de tipo de red utiliza hash para almacenar múltiples bloques CIDR. Si desea almacenar direcciones IP individuales en una colección, puede utilizar el tipo hash:ip.

Una vez que se ha creado un conjunto de IP, puede verificarlo con el siguiente comando:

$ sudo ipset list

Esto muestra una lista del conjunto de IP A disponible que contiene detalles sobre los miembros de la colección. De forma predeterminada, cada conjunto de IP puede contener 65536 elementos (aquí bloques CIDR). Puede aumentar el límite agregando la opción "maxelem N".

$ sudo ipset create banthis hash: net maxelem 1000000

Ahora agreguemos el bloque de IP a este conjunto:

$ sudo ipset add banthis 1.1/. 32

$ sudo ipset agregar banthis 1.1.2.0/24

$ sudo ipset agregar banthis 1.1.3.0/24

$ sudo ipset agregar banthis 1.1 .4.10 /24

Verás que los miembros de la colección han cambiado.

$ sudo ipset list

Las imágenes de arriba se cargaron en el canal de tutoriales del sistema Linux de Honglian.

Ahora es el momento de crear una regla de iptables que utilice el conjunto de IP. La clave aquí es utilizar la opción "-m set --match-set".

Ahora creemos una regla iptable que impida que esos bloques de IP anteriores accedan al servicio web a través del puerto 80. Puedes usar el siguiente comando:

$ sudo iptables -I INPUT -m set--match-set banthis src -p tcp --destination-port 80-j DROP

If Si lo deseas, puedes guardar un conjunto específico de IP en un archivo desde el cual luego podrás restaurar:

$ sudo ipset save banthis -f banthis.txt

$ sudo ipset destruir banthis

$ sudo ipset restaurar -f banthis.txt

En el comando anterior, utilicé la opción destruir para eliminar un conjunto de IP existente para ver si podía restaurarlo.

Desactivación automática de direcciones IP

Ahora deberías ver el poder de las colecciones de IP. Mantener una lista negra de IP es una tarea tediosa y que requiere mucho tiempo. De hecho, existen muchos servicios gratuitos o de pago que pueden ayudarte a conseguirlo. Como beneficio adicional, veamos cómo agregar automáticamente listas negras de IP a conjuntos de IP.

Primero, obtengamos la lista negra gratuita de /lists.php, este sitio web tiene diferentes listas gratuitas y de pago. La versión gratuita está en formato P2P.

A continuación, usaré una herramienta Python de código abierto llamada iblocklist2ipset para convertir la lista negra en formato P2P en un conjunto de IP.

Primero, necesitas instalar pip.

Utilice el siguiente comando para instalar iblocklist2ipset.

$ sudo pip install iblocklist2ipset

En algunas distribuciones como Fedora, es posible que necesites ejecutar:

$ sudo python-pip install iblocklist2ipset

Ahora vaya a /lists.php y tome la URL de cualquier lista P2P (como la lista "nivel1").

Pegue la URL en el siguiente comando.

$ iblocklist2ipset generar \

--ipset banthis "/?list=ydxerpxkpcfqjaybcsswamp; fileformat=p2pamp; archiveformat=gz" \

gt;

Después de ejecutar el comando anterior, obtendrá un archivo llamado banthis.txt. Si observas su contenido, verás algo como esto:

crea hash banthis: net family inet hashsize 131072 maxelem 237302

añade banthis 1.2.4.0/24

agregar banthis 1.2.8.0/24

agregar banthis 1.9.75.8/32

agregar banthis 1.9.96.105/32

agregar banthis 1.9. 102.251/ 32

agregar banthis 1.9.189.65/32

agregar banthis 1.16.0.0/14

Puedes usar el siguiente comando ipset para cargar este archivo:

p>

$ sudo ipset recovery -f banthis.txt

Ahora puedes ver el conjunto de IP creado automáticamente:

$ sudo ipset list banthis

En el momento de escribir este artículo, la tabla de clases "nivel1" contiene 237.000 listas de IP bloqueadas. Puede ver que se han agregado muchas direcciones IP al conjunto de IP.

¡Finalmente, crea un comando iptables para bloquear a estos tipos malos!

Resumen

En este artículo, describí cómo puedes usar el poderoso ipset para bloquear direcciones IP no deseadas. Al mismo tiempo, se combina con la herramienta de terceros iblocklist2ipset, para que puedas mantener sin problemas tu lista de IP bloqueadas. Para aquellos curiosos acerca de las mejoras de rendimiento de ipset, el siguiente gráfico muestra los resultados comparativos de iptables con y sin ipset (tenga en cuenta el eje de tiempo).