
Atualmente estou usando o psad para bloquear automaticamente IPs potencialmente prejudiciais. Quando detecta um ataque, ele adiciona o ip a PSAD_BLOCKED_INPUT ou PSAD_BLOCK_OUTPUT e, em seguida, descarta todo o tráfego adicional desta fonte.
Até aí tudo bem, mas o que eu quero é redirecionar o tráfego desses IPs bloqueados para um honeypot rodando em uma VM. Alguma idéia/sugestão?
Responder1
Primeiro você teria que carregar /etc/host.deny em um ipset. Em seguida, defina uma regra para encaminhá-lo. iptables -A PREROUTING -m set -i eth0 -j DNAT --to-destination 192.168.1.1 --match-set banidos_nets src
192.168.1.1 seria onde você colocaria o ip da sua VM.
Agora pode ficar complicado, pois o psad pode limpar todas as regras do iptables e então você terá que adicioná-lo após a inicialização do psad.
Responder2
Resolvi tentar a resposta do @cybernard e, adivinhe, consegui! Muito obrigado :)
Então aqui está como eu fiz:
Parte 1: Adicionar IPs bloqueados em um ipset
psad grava automaticamente cada IP bloqueado em um arquivo de texto chamado auto_blocked_ips localizado em /var/log/psad. Então primeiro precisamos adicioná-lo em um ipset que chamei de ban_nets.
Eu escrevi este script simples para fazer isso dinamicamente:
#!/bin/bash
#ipset banned_nets must already exist
AUTO_BLOCKED_IPTABLES_PATH=/var/log/psad/auto_blocked_iptables
update_set(){
ipset flush banned_nets
grep -E -o '^([0-9]{1,3}[\.]){3}[0-9]{1,3}' $AUTO_BLOCKED_IPTABLES_PATH | while read -r line ; do
echo "Processing $line"
ipset add banned_nets $line
done
}
while true #run indefinitely
do
inotifywait -e modify $AUTO_BLOCKED_IPTABLES_PATH | update_set
done
Parte 2: Definir regras de encaminhamento
Agora precisamos de regras para encaminhar o tráfego do servidor para o honeypot. O detalhe é que na verdade precisamos de duas regras, para que o servidor atue como um proxy transparente.
Aqui está como eu fiz (mais uma vez, graças a @cybernard):
###### forwarding ######
ipset create banned_nets hash:ip hashsize 4096
iptables -t nat -A PREROUTING -p tcp -m set --dport 8181 -j DNAT --to-destination $HONEYPOT_ADDR:443 --match-set banned_nets src
iptables -t nat -A POSTROUTING -p tcp -s $HONEYPOT_ADDR --dport 443 -j SNAT --to-source $SERVER_ADDR:8181
iptables -t nat -A PREROUTING -p tcp -m set -j DNAT --to-destination $HONEYPOT_ADDR --match-set banned_nets src
iptables -t nat -A PREROUTING -p udp -m set -j DNAT --to-destination $HONEYPOT_ADDR --match-set banned_nets src
iptables -t nat -A POSTROUTING -p tcp -m set -j SNAT --to-source $SERVER_ADDR --match-set banned_nets src
iptables -t nat -A POSTROUTING -p udp -m set -j SNAT --to-source $SERVER_ADDR --match-set banned_nets src
echo "[+] Activating IP forwarding"
echo 1 > /proc/sys/net/ipv4/ip_forward
Essas regras fazem parte do meu script iptables.sh.
Parte 3: verificando os resultados
Portanto, temos um invasor tentando verificar 192.168.56.101 e um honeypot em 192.168.56.100.
Verificando o servidor antes que o IP seja bloqueado
Após o bloqueio, o invasor verifica o honeypot
Verificando o servidor após o IP ser bloqueado (e encaminhado)