Jemand sagte mir, dass dies möglich ist, aber ich kann nichts auf Google oder Manpages finden.
Ich muss IPs für eine bestimmte Zeit sperren und habe sie dann automatisch wieder freigegeben.
Jemand sagte mir, dass dies möglich ist, aber ich kann nichts auf Google oder Manpages finden.
Ich muss IPs für eine bestimmte Zeit sperren und habe sie dann automatisch wieder freigegeben.
Antworten:
Wenn Sie möchten, dass iptables die Regel von sich aus vollständig entfernt, können Sie dies meines Wissens nicht tun. Was ist der Zweck davon? Wenn Sie eine Art automatisches temporäres Sperren benötigen, ist die Standardlösung fail2ban .
Alternativ können Sie einen Cron-Job verwenden, um die Regel zu entfernen, die Sie hinzufügen, oder besser, wenn Sie dies interaktiv tun möchten, einen atJob:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
Schauen Sie sich auch das recentModul von iptables an. Dies kann mit seiner --secondsOption hilfreich sein, abhängig von Ihren tatsächlichen Bedürfnissen. man iptablesfür mehr Informationen.
/bin/shstandardmäßig der Fall ist . Aber das wird in diesem Fall wahrscheinlich kein Problem sein.
Fügen Sie einen Kommentar mit einem Zeitstempel (wahrscheinlich Sekunden seit der Epoche) in die Regeln ein. Wischen Sie regelmäßig nach abgelaufenen Regeln.
Beachten Sie, dass der neueste Linux-Kernel das dynamische Laden von IP-Adressen in einen Cache unterstützt, der von iptable-Regeln anstatt von direkten iptables-Regeln abgerufen wird.
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 iptables -D INPUT $1den Befehl natürlich auch ausdrucken, anstatt ihn zu drucken.
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'wo Regeln festgelegt sind wie:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
iptables bietet 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
Auf diese Weise können Sie automatisierte Versuche, auf den Server zuzugreifen, einschränken, indem Sie die Verbindungsversuche von derselben IP-Adresse auf einen Versuch alle 60 Sekunden beschränken.
Wenn Sie eine festgelegte Anzahl von Versuchen in einem Zeitrahmen zulassen möchten, z. B. 4 in 5 Minuten, und diese bei einem Fehler 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".
Kurz; Die letzte oben gezeigte Kette ist das "Tor" zur SSH-Kette.
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.
IPTables hat eine eigens dafür vorgesehene Funktion: IP-Set. Sie erstellen die Regel einmal und sie bleibt wie gewohnt bestehen, prüft jedoch eine Reihe von IPS (oder Ports) auf Übereinstimmungen. Das Tolle 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 immer noch die Entfernung verwenden atoder cronplanen.
Sie können fail2ban verwenden, um IP-Adressen zu sperren und den Zeitraum zu konfigurieren, für den eine Adresse gesperrt wird.
Wie schon jemand sagte: Du solltest ipset für diese Funktion verwenden.
ipset kann eine IP-Adresse mit einem Timeout-Wert hinzufügen. Wenn die Zeitüberschreitung endet, wird der Datensatz automatisch aus ipset entfernt.
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
Dies ist eine bevorzugte Methode, um dieses Verhalten zu steuern.
Je nachdem, was genau Sie erreichen möchten, können entweder die Module netfilter recent oder time verwendet werden, um dies zu erreichen.
Beide sind in der Manpage von iptables dokumentiert .