Ich möchte einige einfache iptables-Regeln erstellen, um alle eingehenden Verbindungen zu verweigern und ausgehende Verbindungen zuzulassen. Wie kann ich das machen?
17
Versuchen Sie dies mit root-Zugriff:
# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Beachten Sie, dass dadurch alle laufenden Verbindungen brutal unterbrochen werden - dies schließt Dinge wie die SSH-Verbindung ein, die Sie zur Verwaltung des Servers verwenden können. Verwenden Sie diese Option nur, wenn Sie Zugriff auf eine lokale Konsole haben.
In der Antwort von Miphix erfahren Sie, wie Sie eine Ausnahme für SSH hinzufügen.
Wenn Sie remote über SSH arbeiten, können Sie dies hinzufügen (
-I
fügt es vor allen anderen Regeln einINPUT
):Wenn Ihr SSH-Dienst einen anderen Port überwacht, müssen Sie diesen Port anstelle von verwenden
22
.Andernfalls können Sie versehentlich den Zugriff verlieren.
quelle
Beachten Sie, dass die anderen Antworten nicht IPv6 abdecken! Wenn Ihr System IPv6-Datenverkehr akzeptiert, gilt für IPv6-Datenverkehr keine einzige iptables-Regel.
Anstatt iptables / ip6tables direkt zu verwenden, empfehle ich die Verwendung von iptables-restore und save. Mit diesen Tools können Sie eine iptables-Konfiguration mit mehreren Regeln angeben und diese einfach mit einem Befehl laden.
erstelle eine Datei (ich nenne sie iptables.rules) mit folgendem Inhalt:
Hinweis: Ich habe ein zusätzliches Beispiel hinzugefügt, wenn Sie ICMP und Datenverkehr an bestimmten Ports zulassen möchten.
Jetzt können Sie es mit diesen Befehlen laden:
Jetzt decken Ihre Regeln auch ipv6 ab und sind einfach zu verwalten.
Zusätzlicher Hinweis für Debian-Benutzer: Wenn Sie mit Ihren Regeln zufrieden sind, können Sie
apt install iptables-persistent
die Regeln nach dem Neustart wiederherstellen. Die Regeln werden beim Herunterfahren nicht automatisch gespeichert. Führen Sie sie ausnetfilter-persistent save
, um die beständigen Regeln zu aktualisieren.quelle
Beide Antworten oben sind irgendwie korrekt, aber sie sind nicht genau genug, um die ursprüngliche Antwort zu erhalten. (Sorry, ich habe nicht genug Reputation, um einen Kommentar hinzuzufügen, also schreibe eine vollständige Antwort).
In meinem Fall traf ich einen überlasteten Apache-Server, der mit Cron-Jobs überlastet war und die CPU überlastete. Thread-Limits wurden in der SQL-Datenbank gespeichert, aber ich habe das Limit seiner Verbindungen erreicht. Ich wollte eingehende Apache-Verbindungen vom lokalen Host einschränken (dieser Teil ist optional), aber alle anderen Verbindungen sind weiterhin möglich. Einschließlich der tatsächlich errichteten.
Ich habe es mit Befehl getan
sudo iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j REJECT
state
Dies bedeutet: Laden Sie für jedes eingehende TCP-Paket auf Port 80 das Modul, und lehnen Sie es ab, wenn dies das erste Paket ist (eingehende Verbindung). Für localhost können Sie einfach verwenden-s 127.0.0.0/8
In der Praxis können Sie in einigen Fällen den Status "INVALID" hinzufügen
NEW,INVALID
, da Sie "böswillige" Pakete senden können, indem Sie versuchen, Ihre Regel zu umgehen. Und ersetzen-j DROP
Sie es auch durch , um Ihren ausgehenden Datenverkehr zu speichern (es sendet kein Ablehnungssignal).quelle