iptables: erlauben Sie bestimmte IPS und blockieren Sie alle anderen Verbindungen

26

Wie erlaube ich bestimmte IPS und blockiere alle anderen Verbindungen in Iptables?

David
quelle
Wie Gilles demonstriert, sieht das Konzept folgendermaßen aus: Fügen Sie ACCEPT-Regeln für jede bestimmte Sache hinzu, die Sie nach Quell-IP oder anderen Qualifikationen zulassen möchten, und setzen Sie dann die Standardrichtlinie auf REJECT.
Caleb

Antworten:

27

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 ipsetund 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 lound -o lowird sicherlich Probleme für bestimmte Anwendungen verursachen.

Xenoterracid
quelle
4
Anstelle von DROP sollten Sie unerwünschte Pakete ZURÜCKWEISEN, da dies die Diagnose von Problemen erheblich erleichtert und Zeitüberschreitungen verhindert. Siehe IP-Pakete mit einem ICMP-Fehler ablehnen oder einfach verwerfen?
Gilles 'SO - hör auf böse zu sein'
Ich habe beide Setups ausprobiert und KeePass2 startet nicht, keine Ahnung? Auch wenn ich damit iptables -Falle Regeln löschen soll, kann ich nicht mal ubuntu.com
Pawel Cioch
@PawelCioch warum sollte KeePass2 überhaupt eine Internetverbindung benötigen?
Alex
@Alex DB-Datei im Remote-Speicherort zu speichern, dies möchte ich einzelne IP. Aber ich
finde
10

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
Gilles 'SO - hör auf böse zu sein'
quelle
@Gilles Um die Zustände RELATED und ESTABLISHED ordnungsgemäß zu verwenden, müssen Sie das Anfangspaket als NEW-Zustand abgleichen. loim obigen Beispiel ist vom Statusvergleich ausgeschlossen und immer zulässig.
Pinguin359
@ penguin359: Könnten Sie erläutern, warum NEU benötigt wird? Ich bin weit davon entfernt, ein Iptables-Experte zu sein. Ich habe diese Regeln teilweise von meinem Heimrouter kopiert, was bei NEW nicht zutrifft. Soweit ich weiß, sind nach der ersten Regel nur noch NEUE (oder UNTRACKED) Pakete übrig. (Wenn ich zu weit weg bin und Sie in einem Kommentar nichts erklären können, posten Sie Ihre Versionen mit Erklärungen als Antwort und ich lösche meine.)
Gilles 'SO - hör auf, böse zu sein',
@ Gilles Ich lasse immer den Status UNGÜLTIG fallen, bevor ich etwas akzeptiere ... was dazu führt, dass alles, was nicht UNGÜLTIG, VERWANDT, FESTGELEGT ist, der Status NEU sein muss. Aber ich kenne keinen Grund, warum alles andere NEW spezifizieren muss. Theoretisch kann es jedoch dazu kommen, dass Sie INVALID akzeptieren, wenn Sie INVALID nicht verarbeiten und NEW nicht angeben. Aber sobald INVALID behandelt wurde, scheint es mir, dass das Überprüfen des Status NEW für jede Regel einfach mehr Verarbeitung für das Paket erfordert.
Xenoterracide
@ Gilles auch eine Standardrichtlinie der Ablehnung ist schlecht, weil es für jedes Paket, das empfangen wird, ein Ablehnungspaket sendet, was einen DOS-Angriff verstärkt.
Xenoterracide
@ xenoterracide: Guter Punkt. Sollte REJECT jemals verwendet werden? Ich habe gefragt: IP-Pakete mit einem ICMP-Fehler ablehnen oder einfach verwerfen?
Gilles 'SO- hör auf böse zu sein'
7

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
Ishtiyaque Noori
quelle
3
Vielen Dank für die prägnante Antwort. Wie würde sich das ändern, wenn ich ein paar IPs und IP-Bereiche zulassen möchte. Anstelle von yourIPaddresskö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 22in Ihrem Beispiel auf ändern 2288? Blockiert dies auch rsync, sftp usw. für diesen Server von allen IP-Adressen außer den zulässigen?
PKHunter
1
Beachten Sie, dass dies -p tcphier wichtig ist, da --dportes ohne dies nicht funktioniert. Ich würde auch vorschlagen, -j REJECTanstatt zu verwenden, DROPweil REJECTder Port mit dem geschlossenen Port identisch ist und DROPPakete, die für diesen Port bestimmt sind, schwarz durchlöchert werden. In der Praxis kann ein entfernter Angreifer DROPkonfigurierte Ports anhand tatsächlich geschlossener Ports erkennen.
Mikko Rantalainen