Wie erlaube ich bestimmte IPS und blockiere alle anderen Verbindungen in Iptables?
Wie erlaube ich bestimmte IPS und blockiere alle anderen Verbindungen in Iptables?
Antworten:
Ich habe vor langer Zeit einen Blogeintrag über grundlegende Iptables-Regeln für den Desktop-Benutzer geschrieben, den Sie wahrscheinlich lesen sollten, sowie den dazugehörigen Artikel über Stateful Firewall-Design . Aber vor dem Kernel 2.6.39 (das beinhaltet ipset
und Sie können das für das Whitelisting von IPs verwenden, wenn Sie mehr als 10 zur Whitelist haben (wobei 10 willkürlich ist)).
Behandeln Sie zuerst Zustände, von denen wir wissen, dass sie akzeptiert oder gelöscht werden sollen, und Schnittstellen.
iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept
Wenn Sie nur eine Erlaubnis durch IP nur ohne Zustand tun möchten
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
Es ist jedoch wahrscheinlich, dass Sie dabei auf Probleme stoßen, und ich schlage vor, den Status zu verwenden, um Ihr Leben zu erleichtern. Zum Beispiel nicht zulassen -i lo
und -o lo
wird sicherlich Probleme für bestimmte Anwendungen verursachen.
iptables -F
alle Regeln löschen soll, kann ich nicht mal ubuntu.com
Hier ist ein (ungetestetes!) Beispiel, das nur eingehende Verbindungen blockiert . Verbindungen über die Loopback-Schnittstelle von 192.168.3.x, ICMP oder zum SSH-Port sind zulässig. Alle anderen Verbindungen werden abgelehnt.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
lo
im obigen Beispiel ist vom Statusvergleich ausgeschlossen und immer zulässig.
Die folgende Regel erlaubt nur Ihre IP und blockiert alle anderen IPs über Port 22 oder ssh. Testen Sie mit einem neuen Terminal, bevor Sie die Verbindung trennen.
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
yourIPaddress
könnte ich ein paar IP-Adressen und Bereiche hinzufügen? Und wenn ich SSH auf einem nicht standardmäßigen Port wie 2888 verwende, würde der Befehl das 22
in Ihrem Beispiel auf ändern 2288
? Blockiert dies auch rsync, sftp usw. für diesen Server von allen IP-Adressen außer den zulässigen?
-p tcp
hier wichtig ist, da --dport
es ohne dies nicht funktioniert. Ich würde auch vorschlagen, -j REJECT
anstatt zu verwenden, DROP
weil REJECT
der Port mit dem geschlossenen Port identisch ist und DROP
Pakete, die für diesen Port bestimmt sind, schwarz durchlöchert werden. In der Praxis kann ein entfernter Angreifer DROP
konfigurierte Ports anhand tatsächlich geschlossener Ports erkennen.
Hier ist ein voll funktionsfähiges Beispiel.
Funktioniert auch mit den Anwendungen (mein Kommentar zu keepass startet nicht)