
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