
Actualmente estoy usando psad para bloquear automáticamente direcciones IP potencialmente dañinas. Cuando detecta un ataque, agrega la IP a PSAD_BLOCKED_INPUT o PSAD_BLOCK_OUTPUT y luego elimina todo el tráfico adicional de esta fuente.
Hasta ahora todo bien, pero lo que quiero es redirigir el tráfico de estas IP bloqueadas a un honeypot que se ejecuta en una VM. ¿Alguna idea/sugerencia?
Respuesta1
Primero tendrías que cargar /etc/host.deny en un ipset. Luego defina una regla para reenviarlo. iptables -A PREROUTING -m set -i eth0 -j DNAT --to-destination 192.168.1.1 --match-set banned_nets src
192.168.1.1 sería donde colocarías la IP de tu VM.
Ahora podría volverse complicado ya que psad puede borrar todas las reglas de iptables y luego tendría que agregarlo después de que psad se inicialice.
Respuesta2
Decidí intentar la respuesta de @cybernard y, adivina qué, ¡funcioné! Muchas gracias :)
Así que así es como lo hice:
Parte 1: Agregar IP bloqueadas a un ipset
psad escribe automáticamente cada IP bloqueada en un archivo de texto llamado auto_blocked_ips ubicado en /var/log/psad. Así que primero debemos agregarlo a un ipset al que llamé banned_nets.
Escribí este sencillo script para hacerlo dinámicamente:
#!/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 reglas de reenvío
Ahora necesitamos reglas para reenviar el tráfico desde el servidor al honeypot. El detalle es que en realidad necesitamos dos reglas, para que el servidor actúe como un proxy transparente.
Así es como lo hice (una vez más, gracias 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
Estas reglas forman parte de mi script iptables.sh.
Parte 3: comprobar los resultados
Entonces tenemos un atacante intentando escanear 192.168.56.101 y un honeypot en 192.168.56.100.
Escaneando el servidor antes de que se bloquee la IP
Después del bloqueo, el atacante escanea el honeypot.