Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Cómo banear miles de direcciones IP's con ipset


El firewall de Linux (IPTables) es de lo mejorcito que hay, tiene muy poca carga, es estable pero cuenta con un pequeño defecto cuando se almacenan «decenas o cientos de miles» de direcciones IP (lo que ocurre con SIPCheck, Fail2Ban o APIBan): se vuelve lento para aceptar o rechazar peticiones, algo que puede cargar bastante el sistema e incluso provocar problemas en las comunicaciones.

 


 

  • ipset es una aplicación complementaria para el cortafuegos de Linux iptables. Permite configurar reglas para bloquear rápida y fácilmente un conjunto de direcciones IP, entre otras cosas.
  • Permite optimizar el uso de conjuntos complejos de filtros utilizados con el cortafuegos de IPTables. 
  • Los IP Sets pueden mejorar significativamente el rendimiento del software IPTables de modo que sigue respondiendo incluso cuando varios miles de de entradas.

La utilidad ipset se utiliza para crear, modificar y mostrar conjuntos de IP que son un marco dentro del núcleo de Linux.

Instalación

Si utiliza una versión anterior (¡deberías actualizarla por motivos de seguridad! 
por razones de seguridad), comprueba que se ha cargado el módulo apropiado del kernel 
cargado:

lsmod | grep ip_set


Si no se muestra ningún resultado, deberás cargar manualmente el módulo del núcleo ejecutando:


modprobe ip_set
 

Qué es ‘ipset’ y cómo funciona

El pequeño ‘ipset‘ es una herramienta fácil y sencilla, complementaria de IPTables que maneja una lista desordenada de direcciones IP como si fuera una única regla del firewall. Esto es (para que lo entendamos mejor), que cuando nuestro sistema recibe un paquete y tiene que comprobar si puede o no dejarlo pasar, recorre TODO el firewall, lo cual, si tenemos 100.000 direcciones IP bloqueadas, por cada paquete que reciba, tendrá que hacer 100.000 comprobaciones antes de dejarlo pasar, una carga bestial para un sistema que maneja miles de paquetes UDP por segundo como es un servidor de comunicaciones VoIP.

Por lo tanto, en lugar de una «lista ordenada» de reglas, ipset sirve para manejar un «conjunto» de IP, de manera que es 10.000 veces más rápido (utiliza una búsqueda hash) que preguntar: -«¿Está esta lista en el conjunto?» y buscar secuencialmente una IP en la lista ordenada, así que no es casualidad que cuando el número de direcciones IP a bloquear sea demasiado grande, es muchísimo mejor utilizar ipset, que IPTables.

Al final ipset debe estar conectado a IPTables para que puedan ser bloqueadas las direcciones IP guardadas en «el conjunto».


De manera que cuando un sistema nos envía un paquete, el firewall sigue recorriendo sus líneas, pero una línea en particular dice: «Consulta el conjunto listanegra» y esa línea pregunta al conjunto si está la IP en él. La respuesta de ejecutar esa consulta es tan rápida como una simple línea de IPTables, por lo que la mejora en velocidad es muy interesante.

Instalación ipset


Ahora sí, lo primero que tenemos que hacer es instalar ipset con nuestro gestor de paquetes:

yum install ipset

 

o

 

apt-get install ipset



una vez esté instalado, ya podemos empezar a hacer pruebas:

Crear la lista

Primero creamos la lista que llamaremos ban, pudiendo trabajar tanto con rangos o como con IPs:

    Rangos:


ipset create ban hash:net


    IPs:


ipset create ban hash:ip


Esto quiere decir que si queremos bloquear redes usaremos el primero y si queremos bloquear IPs independientes usaremos el segundo, aunque si agregamos un rango a la lista nos agregará todas sus IPs una a una.

Nosotros usaremos la lista de tipo IP, la segunda opción de las anteriores, pero siéntete libre de usar cualquiera de las dos, teniendo en cuenta que en la segunda tendrás que indicar rangos y no IPs independientes.

1.- Creamos un conjunto de IPs al que vamos a llamar: ban


# Si queremos crear un conjunto con un timeout máximo de 1 hora
ipset create ban hash:ip timeout 3600
 
# Si no queremos que tenga timeout, basta con no ponérselo.
# ipset create ban hash:ip


2.- Una vez creado el «conjunto», podemos ver todos los conjuntos que tenemos:


ipset list



3.- A continuación, enlazamos el conjunto «ban» con nuestro iptables:


# Para dar de alta el conjunto 'ban' en el iptables:
iptables -I INPUT -m set --match-set ban src -j DROP
 
# Siempre podemos eliminar el conjunto del iptables con:
# iptables -D INPUT -m set --match-set ban src -j DROP


 

4.- Por último, tenemos que añadir las direcciones IP al conjunto mediante el propio comando ipset:


ipset add ban 248.248.248.247 timeout 30
ipset add ban 248.248.248.248 timeout 20
ipset add ban 248.248.248.249 timeout 10


La primera IP será eliminada en 30 segundos, la segunda en 20 y la tercera en 10.
Si no se le define un «timeout», utilizará el timeout general que se puso al crear el conjunto: 3600.

5.- Recuerda que para borrar manualmente una IP del conjunto:


ipset del ban 248.248.248.247


y de esta manera, hemos visto cómo podemos banear de forma automática a cientos de miles de direcciones IP sin preocuparnos de eliminarlas manualmente.

En nuestro firewall, tan sólo aparecerá una línea indicando que tiene que «dropear» aquellas direcciones del conjunto ‘ban’


iptables -L -n
 
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 0.0.0.0/0 0.0.0.0/0 match-set ban src
 
Chain FORWARD (policy ACCEPT)
target prot opt source destination
 
Chain OUTPUT (policy ACCEPT)
target prot opt source destination<code lang="bash" class="language-bash">

 



Bloquear una lista de rangos de red


Comienza creando un nuevo «set« (conjunto) de direcciones de conexiones de red. Esto crea un nuevo conjunto de «hash» de direcciones de red «net» llamado «myset»:



# ipset create myset hash:net


o

# ipset -N myset nethash


Añade al conjunto cualquier dirección IP que desee bloquear:

# ipset add myset 14.144.0.0/12
# ipset add myset 27.8.0.0/13
# ipset add myset 58.16.0.0/15
# ipset add myset 1.1.1.0/24


Finalmente, configura iptables para bloquear cualquier dirección de ese conjunto. Esta orden añadirá una regla en la parte superior de la cadena «INPUT» para que «-m» coincida con el conjunto llamado «myset» de ipset (--match-set) cuando es un paquete «src» y «DROP», descartándolo:

# iptables -I INPUT -m set --match-set myset src -j DROP


Bloquear una lista de direcciones IP


Comience creando un nuevo «conjunto» de direcciones IP. Esto crea un nuevo conjunto «hash» de direcciones «ip» llamado «myset-ip»:

# ipset create myset-ip hash:ip


o

# ipset -N myset-ip iphash


Añade cualquier dirección IP que desee bloquear al conjunto:

# ipset add myset-ip 1.1.1.1
# ipset add myset-ip 2.2.2.2


Finalmente, configura iptables para bloquear cualquier dirección de ese conjunto:

# iptables -I INPUT -m set --match-set myset-ip src -j DROP


Hacer que ipset sea persistente

El ipset que ha creado se almacena en la memoria y desaparecerá después del reinicio. Para que el ipset creado sea persistente, debe hacer lo que sigue.

Primero, guarda el ipset en /etc/ipset.conf:

# ipset save > /etc/ipset.conf


Luego activa ipset.service, que funciona de manera similar a iptables.service para restaurar las reglas iptables.


Bloquear con PeerGuardian y otras listas de bloqueo


La herramienta pg2ipset-gitAUR del autor de Maeyanie.com, junto con el script ipset-update.sh se pueden usar con cron para actualizar automáticamente varias listas de bloqueo. Actualmente, de manera predeterminada, se implementa el bloqueo de: país, nodo de salida tor y lista pg2 de Bluetrack.
Otras órdenes

Para ver los conjuntos:

# ipset list


o

# ipset -L


Para eliminar un conjunto llamado «myset»:

# ipset destroy myset


o

# ipset -X myset


Para eliminar todos los conjuntos:

# ipset destroy


Optimización


La herramienta iprangeAUR puede ayudar a reducir las entradas en ipset.conf fusionando rangos adyacentes o eliminando rangos superpuestos. Esto puede mejorar el rendimiento del enrutador/cortafuegos si el tamaño de la tabla es enorme. Esta herramienta también puede convertir una lista de nombres de servidores a IP.

Aunque ipset está diseñado para poder escalar bien, eso no significa que lo haga infinitamente. En particular, algunas países tienen espacios de direcciones IP muy grandes, lo que hará que el bloqueo geográfico sea ineficiente. 

Características


Los conjuntos IP ofrecen diferentes tipos de estructuras de conjuntos que incluyen:

Tipos Explicación Ejemplo

  • bitmap:ip utiliza un rango de memoria, donde cada bit representa una dirección IP y puede almacenar hasta 65535 entradas (red clase B). ipset add set1 192.168.0.1
  • bitmap:ip,mac utiliza un intervalo de memoria en el que cada 8 bytes representan una dirección IP y una dirección MAC. Un tipo de conjunto bitmap:ip,mac puede almacenar hasta 65535 direcciones IP (red de clase B) con MAC. Sólo MAC de origen ipset add set2 192.168.1.1,00:01:23:45:67:89
  • bitmap:port utiliza un rango de memoria, donde cada bit representa un puerto TCP/UDP. Un conjunto de tipo bitmap:port puede almacenar hasta 65535 puertos. ipset add set3 22
  • hash:ip utiliza un hash para almacenar direcciones IP donde la coincidencia se resuelve almacenando los elementos coincidentes en una matriz y, como último recurso, haciendo crecer dinámicamente el hash. También se pueden almacenar direcciones de red del mismo tamaño en un conjunto de tipo hash:ip. ipset add set4 10.0.1.1
  • hash:net utiliza un hash para almacenar bloques de red CIDR, que pueden ser de diferentes tamaños. Se utiliza la misma técnica para evitar choques que en el tipo de conjunto hash:ip. ipset add set5 192.168.1.0/24
  • hash:ip,port es similar a hash:ip pero puedes almacenar en él pares de dirección IP y protocolo-puerto. Se admiten TCP, SCTP, UDP, UDPLITE, ICMP e ICMPv6 con números de puerto/tipos de ICMP(v6) y otros números de protocolo sin información de puerto. ipset add set6 192.168.1.1,icmp:ping
  • hash:ip,port,ip puede almacenar direcciones IP, números de puerto y direcciones IP triples en un conjunto del tipo hash:ip,port,ip. ipset add set7 192.168.0.1,22,10.0.1.1
  • hash:ip,port,net puede almacenar direcciones IP, números de puerto y direcciones de red triples en este tipo de conjunto. ipset add set8 192.168.0.1,22,10.0.1.0/24
  • El tipo hash:net,port permite almacenar pares de dirección de red y número de puerto. ipset add set9 192.168.1.0/24,tcp:443
  • hash:net,iface puede almacenar pares de dirección de red y nombre de interfaz. ipset add set10 192.168.1.0/24,red0
  • list:set un tipo list:set puede almacenar otros conjuntos. Es como una unión ordenada de diferentes conjuntos. ipset add set1 set3 set5

Comandos

  • ipset --flush {NombredelaCadena}             # vacía una cadena definida
  • ipset destroy {Nombre_de_la_cadena}             # borra una cadena definida
  • ipset destroy # borra todas las cadenas
  • ipset save > /etc/ipset/ipset.conf # guarda las cadenas para que sobrevivan a un reinicio
  • ipset -n list # muestra todos los conjuntos existentes
  • ipset -t list # muestra más información y conjuntos
  • ipset list # lista todos los conjuntos con más información
  • ipset save > /tmp/ipsetbck # hace una copia de seguridad también en otros directorios
  • ipset restore < /tmp/ipsetbck # restaura la copia de seguridad
  • ipset -W viejo-conjunto nuevo-conjunto # renombra los conjuntos y copia el contenido del antiguo al nuevo conjunto

Ejemplos:

 Agregar IP


Podemos indicar la IP concreta:

ipset add blacklist x.x.x.x


O agregar todas las IPs de un rango concreto, lo cual nos agregara cada IP independiente en a la lista:

ipset add blacklist x.x.x.x/24


La primera opción nos agrega la IP indicada:

# ipset list blacklist -t
Name: blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 552
References: 2
Number of entries: 1


Y la segunda 255 IPs:

# ipset list blacklist -t
Name: blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 11976
References: 2
Number of entries: 256


Error al agregar IP


Si intentamos agregar un rango en la lista que ya contiene una IP perteneciente a este se agregarán solo las IPs anteriores a esta que ya existe, descartando el resto y mostrando un error. Por ejemplo, imaginemos que ya existe la IP 87.246.7.74, si agregamos el rango 87.246.7.0/24 solo se agregarán 75 IPs, de la .0 a la que ya tenemos cargada .74, descartando el resto:

# ipset add blacklist 87.246.7.0/24
ipset v6.30: Kernel support protocol versions 6-7 while userspace supports protocol versions 6-6
Element cannot be added to the set: it's already added


# ipset list blacklist -t
Name: blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 3864
References: 2
Number of entries: 75


Para evitar este tipo de problemas existe una opción en el comando -! que ignora cualquier error que se produzca, como este que indicamos. Ejecutamos de nuevo el comando con esta opción y vemos como se agregan las 256 IPs correctamente:

# ipset add blacklist 87.246.7.0/24 -!

# ipset list blacklist -t
Name: blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 11976
References: 2
Number of entries: 256


Confirmar IP en listado

Podemos confirmar si una IP se encuentra en un alista con el siguiente comando:

# ipset test blacklist 87.246.7.74
87.246.7.74 is in set blacklist.

# ipset test blacklist 87.246.7.7
87.246.7.7 is NOT in set blacklist.


Información de las listas


Podemos obtener las listas que tenemos creadas y su información de capacidad, memoria utilizada, total de entradas, IPs bloqueadas, … con el comando:

# ipset list
Name: blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 552
References: 2
Number of entries: 1
Members:
87.246.7.74


Abreviando la información, podemos obtener solo los nombres de las listas creadas con la opción -n:

# ipset list -n
blacklist


O la información general de cada lista con la opción -t:

# ipset list -t
Name: blacklist
Type: hash:ip
Revision: 4
Header: family inet hashsize 4096 maxelem 65536
Size in memory: 552
References: 2
Number of entries: 1


Borrar IP


Podemos borrar una IP concreta o un rango de IPs del listado con el siguiente comando:

ipset del blacklist x.x.x.x
ipset del blacklist x.x.x.x/x


Si por ejemplo tenemos un rango /30 agregado a la lista pero indicamos un /24 a la hora de borrar nos podría dar un error, pero con la opción que vimos en el apartado anterior -! lo evitaríamos:

ipset del blacklist x.x.x.x/x -!


Vaciar la lista


Para dejar la lista sin ninguna IP configurada podemos ejecutar el siguiente comando, en lugar de ir IP a IP o rango a rango, indicando el nombre de nuestra lista:

ipset flush blacklist


Eliminar lista y configuración en IPTABLES

Si queremos dar de baja la lista y la configuraicón en IPTABLES primero eliminaremos las entradas en el Firewall que habíamos creado en la primera posición de INPUT y FORWARD:

iptables -D INPUT 1
iptables -D FORWARD 1


Luego eliminaremos la lista indicando su nombre:

ipset destroy blacklist


Bloquear países con ipset 

 Bloquear direcciones IP de un país específico usando ipset en un sistema Linux típicamente involucra crear un conjunto IP que contenga las direcciones IP asociadas con ese país y luego usar una herramienta de firewall como iptables para dejar caer o rechazar tráfico desde esas direcciones IP. IPset es una utilidad basada en línea de comandos que se utiliza para administrar el marco denominado conjuntos IP dentro del núcleo Linux.

Este método utiliza datos de geolocalización IP para identificar direcciones IP asociadas a un país específico. Necesitarás tener las bases de datos IP instaladas en tu sistema. Sin embargo, existe otra forma más sencilla de hacerlo.

Puedes descargar los rangos de IPs de un país que quieras bloquear utilizando el bloqueador de visitas gratuito IP2Location, una herramienta online gratuita para descargar las direcciones IP de cualquier país en una amplia gama de formatos.

sed -i '/^#/d' blockcountry.sh
sed -i 's/^/ipset add countryblocker /g' blockcountry.sh
sed -i '1i ipset create countryblocker nethash' blockcountry.sh


chmod +x blockcountry.sh
bash blockcountry.sh 

Fuentes:

https://blog.udpsa.com/como-proteger-tu-servidor-linux-de-miles-de-direcciones-ip-con-ipset/ 

https://wiki.archlinux.org/title/Ipset_(Espa%C3%B1ol)

https://blog.tiraquelibras.com/?p=1017


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.