Parte 1: Agregar IP bloqueadas a un ipset

Parte 1: Agregar IP bloqueadas a un ipset

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.

Escanear el servidor después de bloquear (y reenviar) la IP

información relacionada