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 - Dazu gehören Dinge wie die SSH-Verbindung, die Sie zur Verwaltung des Servers verwenden können. Verwenden Sie dies nur, wenn Sie Zugriff auf eine lokale Konsole haben.
Siehe die Antwort von Miphix, um zu erfahren, wie man eine Ausnahme für SSH hinzufügt.
Wenn Sie remote über SSH arbeiten, möchten Sie vielleicht dies hinzufügen (-I
fügt es vor allen anderen Regeln in INPUT
ein ):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
Wenn Ihr SSH-Dienst auf einem anderen Port lauscht, müssen Sie diesen Port anstelle von 22
verwenden .
Andernfalls könnten Sie versehentlich den Zugriff verlieren.
Beachten Sie, dass die anderen Antworten IPv6 nicht abdecken! Wenn Ihr System IPv6-Datenverkehr akzeptiert, gilt keine einzige iptables-Regel für IPv6-Datenverkehr.
Anstatt iptables / ip6tables direkt zu verwenden, empfehle ich die Verwendung von iptables-restore and save. Diese Tools ermöglichen es, eine iptables-Konfiguration mit mehreren Regeln anzugeben und sie einfach mit einem Befehl zu laden.
Erstellen Sie eine Datei (ich nannte sie iptables.rules) mit folgendem Inhalt:
*filter
# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]
# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]
# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]
# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# do not block localhost
-A INPUT -i lo -j ACCEPT
# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT
# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# commit changes
COMMIT
Beachten Sie, dass ich ein zusätzliches Beispiel hinzugefügt habe, wenn Sie ICMP und Datenverkehr zu bestimmten Ports zulassen möchten.
Jetzt können Sie es mit diesen Befehlen laden:
iptables-restore < iptables.rules
ip6tables-restore < iptables.rules
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 werden also nach dem Neustart wiederhergestellt. Die Regeln werden beim Herunterfahren nicht automatisch gespeichert, führen Sie also netfilter-persistent save
aus um die dauerhaften Regeln zu aktualisieren.