Introdução
Qualquer serviço conectado à Internet é um alvo em potencial para ataques de força bruta ou acesso injustificado. Existem ferramentas como fail2ban
ou sshguard
, mas são funcionalmente limitadas porque estão apenas analisando arquivos de log. O Blacklistd adota uma abordagem diferente. Daemons modificados como SSH podem conectar-se diretamente à lista negra para adicionar novas regras de firewall.
Etapa 1: PF (firewall)
Uma âncora é uma coleção de regras e precisamos de uma em nossa configuração de PF. Para criar um conjunto de regras mínimo, edite /etc/pf.conf
para que fique assim:
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
Agora habilite PF
para iniciar automaticamente, edite /etc/rc.conf:
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
No entanto, há uma coisa adicional que você pode querer fazer primeiro: testar suas regras para garantir que tudo esteja correto. Para isso, use o seguinte comando:
pfctl -vnf /etc/pf.conf
Se este comando relatar erros, volte e corrija-os primeiro!
É uma boa idéia garantir que tudo esteja funcionando conforme o esperado, reiniciando o servidor agora: shutdown -r now
Etapa 2: lista negrad
IPs são bloqueados por 24h. Este é o valor padrão e pode ser alterado em /etc/blacklistd
:
# Blacklist rule
# adr/mask:port type proto owner name nfail disable
[local]
ssh stream * * * 3 24h
Edite /etc/rc.conf
para ativar a Blacklistd:
blacklistd_enable="YES"
blacklistd_flags="-r"
Inicie o Blacklistd com o seguinte comando:
service blacklistd start
Etapa 3: SSH
Uma última coisa que precisamos fazer é dizer sshd
para notificar blacklistd
. Adicione UseBlacklist yes
ao seu /etc/ssh/sshd_config
arquivo. Agora reinicie o SSH com service sshd restart
.
Passo final
Por fim, tente fazer login no servidor com uma senha inválida.
Para obter todos os IPs bloqueados, use um dos seguintes 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 remover um IP bloqueado você deve usar o comando pfctl
. Por exemplo:
pfctl -a blacklistd/22 -t port22 -T delete <IP>
Observe que blacklistctl
ainda mostrará o IP como bloqueado! Esse é um comportamento normal e, com sorte, será removido em versões futuras.