Teil 1: Blockierte IPs zu einem IPset hinzufügen

Teil 1: Blockierte IPs zu einem IPset hinzufügen

Ich verwende derzeit psad, um potenziell schädliche IPs automatisch zu blockieren. Wenn es einen Angriff erkennt, fügt es die IP zu PSAD_BLOCKED_INPUT oder PSAD_BLOCK_OUTPUT hinzu und löscht dann allen weiteren Datenverkehr von dieser Quelle.

So weit, so gut, aber ich möchte den Datenverkehr von diesen blockierten IPs auf einen Honeypot umleiten, der auf einer VM läuft. Irgendwelche Ideen/Vorschläge?

Antwort1

Zuerst müssen Sie /etc/host.deny in ein IP-Set laden. Dann definieren Sie eine Regel zur Weiterleitung. iptables -A PREROUTING -m set -i eth0 -j DNAT --to-destination 192.168.1.1 --match-set banned_nets src

192.168.1.1 wäre der Ort, an dem Sie Ihre VM-IP eingeben.

Jetzt könnte es schwierig werden, da psad möglicherweise alle iptables-Regeln löscht und Sie es dann nach der Initialisierung von psad hinzufügen müssen.

Antwort2

Ich habe mich entschlossen, die Antwort von @cybernard zu versuchen, und, raten Sie mal, es hat geklappt! Vielen Dank :)

So habe ich es gemacht:

Teil 1: Blockierte IPs zu einem IPset hinzufügen

psad schreibt automatisch jede blockierte IP in eine Textdatei namens auto_blocked_ips, die sich in /var/log/psad befindet. Daher müssen wir sie zunächst zu einem IP-Set hinzufügen, das ich forbidden_nets genannt habe.

Ich habe dieses einfache Skript geschrieben, um es dynamisch auszuführen:

#!/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

Teil 2: Weiterleitungsregeln definieren

Jetzt brauchen wir Regeln, um den Datenverkehr vom Server zum Honeypot weiterzuleiten. Im Detail brauchen wir eigentlich zwei Regeln, damit der Server als transparenter Proxy fungiert.

So habe ich es gemacht (nochmals vielen Dank an @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

Diese Regeln sind Teil meines iptables.sh-Skripts.

Teil 3: Überprüfung der Ergebnisse

Wir haben also einen Angreifer, der versucht, 192.168.56.101 zu scannen, und einen Honeypot in 192.168.56.100.

Scannen des Servers, bevor die IP blockiert wird

Nach der Blockierung scannt der Angreifer den Honeypot

Scannen des Servers, nachdem die IP blockiert (und weitergeleitet) wurde

verwandte Informationen