Lösung 1:
Wenn Sie meinen, dass iptables die Regel vollständig von selbst entfernt, können Sie dies meines Wissens nicht tun. Was ist der Zweck davon? Wenn Sie eine Art automatisches vorübergehendes Sperren benötigen, ist die Standardlösung fail2ban.
Alternativ können Sie einen Cron-Job verwenden, um die hinzugefügte Regel zu entfernen, oder, wenn Sie dies interaktiv tun möchten, einen at
Arbeit:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
Sehen Sie sich auch recent
an Modul von iptables. Dies mit seinem --seconds
Option kann hilfreich sein, abhängig von Ihren tatsächlichen Bedürfnissen. man iptables
für weitere Informationen.
Lösung 2:
Fügen Sie einen Kommentar mit einem Zeitstempel (wahrscheinlich Sekunden seit der Epoche) in die Regeln ein. Suchen Sie regelmäßig nach abgelaufenen Regeln.
Beachten Sie, dass der neueste Linux-Kernel Unterstützung für das dynamische Laden von IP-Adressen in einen Cache hat, der von iptable-Regeln konsultiert wird, anstatt von direkten iptables-Regeln.
Beispiel:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
Sie können natürlich iptables -D INPUT $1
anstatt den Befehl zu drucken.
Lösung 3:
iptables hat eine Methode zum automatischen Hinzufügen von IP-Adressen zu einer Liste, wenn benutzerdefinierte Bedingungen erfüllt sind. Ich verwende Folgendes, um automatisierte Hackversuche auf meinen SSH-Port zu vermeiden:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
Dies trägt dazu bei, automatisierte Zugriffsversuche auf den Server einzuschränken, indem Verbindungsversuche von derselben IP-Adresse auf alle 60 Sekunden beschränkt werden.
Wenn Sie eine festgelegte Anzahl von Versuchen in einem Zeitrahmen zulassen möchten, z. B. 4 in 5 Minuten, und sie bei Fehlschlagen für einen längeren Zeitraum, z. B. 24 Stunden, auf die schwarze Liste setzen möchten, können Sie Folgendes tun:
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
Oben erstellen wir 2 Ketten; „ssh“ und „black“ und 2 Listen; "timer" und "blacklist".
Knapp; Die letzte oben gezeigte Kette ist der "Eingang" in die SSH-Kette.
- Regel 1 in der ssh-Kette prüft, ob die Quell-IP in der Liste "Blacklist" steht. Wenn dies der Fall ist, wird die Verbindung getrennt und der 24-Stunden-Blacklist-Timer wird neu gestartet. Wenn Regel 1 falsch ist, gehen wir zu Regel 2 über.
- Regel 2 in der ssh-Kette prüft, ob die Quell-IP mehr als 4 Verbindungsversuche in 5 Minuten unternommen hat. Wenn dies der Fall ist, sendet er das Paket an die Kette „black“, wo es zur Liste „blacklist“ hinzugefügt wird. Die Kette "schwarz" unterbricht dann die Verbindung und wir sind fertig.
- Regel 3 in der Kette "ssh" wird nur erreicht, wenn Regel 1 und 2 falsch sind. Wenn dies der Fall ist, wird das Paket akzeptiert und die Quell-IP wird zur Liste "Timer" hinzugefügt, damit wir die Häufigkeit der Verbindungsversuche überwachen können.
Die Option „--reap“ weist den Kernel an, die Liste zu durchsuchen und alle Elemente zu löschen, die älter als das festgelegte Zeitlimit sind; 5 Minuten für die Liste "Timer" und 24 Stunden für die Liste "Blacklist".
Hinweis:Die zusätzlichen Leerzeichen dienen der Lesbarkeit und sind in Ihrem Shell-Skript optional.
Lösung 4:
IPTables hat eine eigens dafür erstellte Funktion:IP Set. Sie erstellen die Regel einmal und sie bleibt wie gewohnt bestehen, überprüft jedoch eine Reihe von IPs (oder Ports) auf Übereinstimmungen. Das Coole daran ist, dass dieses Set dynamisch und effizient aktualisiert werden kann, ohne den Rest der Firewall zu stören.
Die Hauptwebsite, Beispiele.
Um es zu verwenden, müssten Sie also immer noch at
verwenden oder cron
um die Entfernung zu planen.
Lösung 5:
Sie können fail2ban verwenden, um IP-Adressen zu sperren und die Zeitdauer zu konfigurieren, für die eine Adresse gesperrt wird.