Introducción
Cualquier servicio que esté conectado a Internet es un objetivo potencial para ataques de fuerza bruta o acceso injustificado. Hay herramientas como fail2ban
o sshguard
, pero están limitadas funcionalmente porque solo analizan archivos de registro. Blacklistd toma un enfoque diferente. Los demonios modificados como SSH pueden conectarse directamente a la lista negra para agregar nuevas reglas de firewall.
Paso 1: PF (Firewall)
Un ancla es una colección de reglas y necesitamos una en nuestra configuración PF. Para crear un conjunto de reglas mínimo, edite /etc/pf.conf
para que se vea así:
set skip on lo0
scrub in on vtnet0 all fragment reassemble
anchor "blacklistd/*" in on vtnet0
block in all
pass out all keep state
antispoof for vtnet0 inet
pass in quick on vtnet0 inet proto icmp all icmp-type echoreq
pass in quick on vtnet0 proto tcp from any to vtnet0 port 22
Ahora habilite PF
para iniciar automáticamente, edite /etc/rc.conf:
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
Sin embargo, hay una cosa adicional que quizás desee hacer primero: pruebe sus reglas para asegurarse de que todo esté correcto. Para esto, use el siguiente comando:
pfctl -vnf /etc/pf.conf
Si este comando reporta errores, ¡regrese y corríjalos primero!
Es una buena idea asegurarse de que todo funcione como se esperaba reiniciando el servidor ahora: shutdown -r now
Paso 2: Blacklistd
Las IP están bloqueadas por 24h. Este es el valor predeterminado y se puede cambiar en /etc/blacklistd
:
# Blacklist rule
# adr/mask:port type proto owner name nfail disable
[local]
ssh stream * * * 3 24h
Editar /etc/rc.conf
para habilitar Blacklistd:
blacklistd_enable="YES"
blacklistd_flags="-r"
Inicie Blacklistd con el siguiente comando:
service blacklistd start
Paso 3: SSH
Una última cosa que debemos hacer es sshd
avisarle blacklistd
. Añadir UseBlacklist yes
a su /etc/ssh/sshd_config
archivo. Ahora reinicie SSH con service sshd restart
.
Último paso
Finalmente, intente iniciar sesión en su servidor con una contraseña no válida.
Para obtener todas las IP bloqueadas, use uno de los siguientes comandos:
blacklistctl dump -bw
address/ma:port id nfail last access
150.x.x.x/32:22 OK 3/3 2017/x/x 04:43:03
115.x.x.x/32:22 OK 3/3 2017/x/x 04:45:40
91.x.x.x/32:22 OK 3/3 2017/x/x 07:51:16
54.x.x.x/32:22 OK 3/3 2017/x/x 12:05:57
pfctl -a blacklistd/22 -t port22 -T show
54.x.x.x
91.x.x.x
115.x.x.x
150.x.x.x
Para eliminar una IP bloqueada, debe usar el comando pfctl
. Por ejemplo:
pfctl -a blacklistd/22 -t port22 -T delete <IP>
Tenga en cuenta que blacklistctl
aún mostrará la IP como bloqueada. Este es un comportamiento normal y, con suerte, se eliminará en futuras versiones.