¿Cómo bloquear direcciones IP abusivas con pf en OpenBSD?

14

Podemos ver en los registros de nginx que hay una dirección IP que hace cosas desagradables.

¿Cómo podemos bloquearlo con un pfcomando y luego permanentemente con el /etc/pf.log? ¿Cómo podemos bloquear un x.x.x.x/24para esa IP? Es un ejemplo: 1.2.3.4

ACTUALIZACIÓN: no, parece que OpenBSD no tiene el archivo permitir / denegar en / etc. Y AFAIK, el mejor consejo para bloquear direcciones IP abusivas es usar pf.

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 
somelooser28533
fuente
¿Tiene un archivo hosts.deny en el directorio / etc?
ryekayo

Respuestas:

13

La mejor manera de hacer esto es definir una tabla y crear una regla para bloquear los hosts, en pf.conf:

table <badhosts> persist
block on fxp0 from <badhosts> to any

Y luego agregue / elimine dinámicamente direcciones IP:

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4

Otros comandos de 'tabla' incluyen flush(eliminar todo) replacey show. Mira man pfctlpara más.

Si desea una lista más permanente, puede guardarla en uno (o más) archivos. En pf.conf:

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

También puede agregar nombres de host en lugar de direcciones IP. Consulte la sección "Tablas" de man pf.confy man pfctl.

Nota : Los ejemplos anteriores suponen que la interfaz de Internet es fxp0, cambie según su configuración. Además, tenga en cuenta que las normas en pf.confson evaluados de forma secuencial y para blocko passreglas es la última regla de coincidencia que se aplica. Con este conjunto de reglas

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80

y después de agregar 1.2.3.4 y 192.168.0.10 a la badhoststabla

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10

todo el tráfico desde y 1.2.3.4 192.168.0.10 será bloqueada pero el segundo anfitrión será capaz de hacer conexiones al puerto otros equipos de los 80 debido a que los passpartidos de reglas y anula la blockregla.

Zé Loff
fuente
44
La regla de bloqueo se puede especificar más fácilmente como block in from <badhosts>. No necesita especificar la interfaz o la to anyparte.
kurtm
4

Según otras respuestas, no está claro que necesite crear una tabla real de los hostias que está tratando de bloquear.

Esto va en el archivo pf.conf, por ejemplo, tengo dos archivos badguys, 1 y 2 badguys1 es para aquellos que van y vienen, y badguys2 es para listas negras permanentes.

Entonces, si necesita agregar una dirección IP de alguien que es una molestia por un período de tiempo, agréguelo a badguys1.

Ahora, en su archivo pf.conf tiene esto. En mi ejemplo, uso en1, porque esa es mi interfaz WiFi. Ajústelo a la interfaz en la que se encuentre su red.

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

Ahora puede agregar direcciones temporales a badguys1. (NO badhosts, ese es un nombre para las tablas)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Aunque dice 1 tabla creada, en realidad agrega la ip, no crea una nueva tabla. Ahora, si buscas en badguys1, verás la nueva IP.

sudo pfctl -t badhosts -T show
usuario160328
fuente
3

Obtuve esta información del sitio web y perdóname por mi mal conocimiento de OpenBSD, pero aquí está. Echa un vistazo a esta URL . Según esto, establece que para bloquear una IP usted:

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

Entonces reiniciarías el firewall:

pfctl -d
pfctl -e -f /etc/pf.conf

O, para agregar sin reiniciar el tipo de firewall:

pfctl -t blockedips -T add 111.222.333.444

Ahora para verificar si se ha agregado, escriba:

pfctl -t blockedips -T show

Actualización: Tal vez esto ayudaría.

  • Abra el siguiente archivo en vi:

    vi /etc/pf.conf

  • Agregue la siguiente línea de código:

    table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet

  • Después de ese punto, intentaría reiniciar el firewall y confirmar que la IP está bloqueada escribiendo:

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    
ryekayo
fuente
1
Creo que la mesa debe estar configurada para bloquear, pero esa parte no está clara en el tutorial, lo seguí, pero la IP todavía no está bloqueada
somelooser28533
Déjame ver si puedo buscar cómo hacerlo.
ryekayo
2
No es necesario deshabilitar y volver a habilitar pf para volver a cargar pf.conf. pfctl -f /etc/pf.confes suficiente.
Zé Loff
1
(Malo) Los CÓMO desalientan el pensamiento y fomentan la copia. Lea man pf.conf, se sorprenderá de lo buenas que son las páginas de manual de OpenBSD. Además, los pf.confarchivos deben leerse como un todo (el orden en el que se colocan las reglas es crucial), por lo que copiar y pegar líneas individuales suele ser una mala idea. Cree el archivo y la tableregla (eso es correcto), pero o bien comparte su pf.confarchivo completo o depende de usted averiguar la blockregla adecuada y su ubicación en el archivo.
Zé Loff
1
@ryekayo A menos que pueda justificar la inclusión de la ext_if="bge0"macro y por qué no tiene una regla de bloqueo , criticaré su respuesta, porque está incompleta (es decir, no es una respuesta adecuada), independientemente del esfuerzo que le dedique. Además, mi comentario sobre los CÓMO se abordó en el OP, no usted (disculpas, debería haberlo dejado claro).
Zé Loff