IPTables erlauben nur den Zugriff auf localhost

58

Ich habe mich über die Jahre bemüht, ein solides Verständnis für iptables zu erlangen. Jedes Mal, wenn ich versuche, die Manpages zu lesen, fangen meine Augen an zu glasieren.

Ich habe einen Dienst, auf den nur der Localhost Zugriff haben soll.

Welche Begriffe (oder Konfiguration, wenn sich jemand großzügig fühlt) sollte ich bei Google beachten, damit nur der lokale Host auf einen bestimmten Port zugreifen kann?

iptablessuck
quelle
2
Auf welchem ​​Port läuft dieser Dienst?
Bart De Vos
44344, es ist ein Service im Haus geschrieben
iptablessuck
1
Ich möchte meinen Nick vorübergehend für "Iptablesrules" ändern, aber ich kann nicht
Art Shayderov
@Art, sie saugen nur, weil ich sie nicht verstehe :)
iptablessuck
@iptablessuck eigentlich sieht es so aus, als könnte ich. Aber ich werde nicht, weil ich nicht sicher bin, ob ich es wieder ändern kann :)
Art Shayderov

Antworten:

65

Wenn Sie unter Service einen bestimmten Port verstehen, sollten die folgenden beiden Zeilen funktionieren. Ändern Sie die "25" in den Port, den Sie einschränken möchten.

iptables -A INPUT -p tcp -s localhost --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j DROP
Hyppy
quelle
1
"Alles, was von localhost zu Port 25 kommt, akzeptieren" und die zweite Regel lautet "Alles, was zu Port 25 kommt, fallen lassen". Die erste Zeile wird zuerst verarbeitet, wodurch localhost zugelassen wird, und alles andere wird von der zweiten Zeile gelöscht. Ja?
iptablessuck
Das ist richtig!
Hyppy
4
@Hyppy, wie würdest du das "rückgängig machen"?
Tester
10
@tester geben diese Befehle wieder, aber ersetzen -Amit-D
pepoluan
1
@Astronaut Geben Sie 'sudo service iptables save' ein, um die Änderungen zu speichern. dann neu starten. Sie können überprüfen, ob die Änderungen gespeichert wurden, indem Sie 'sudo iptables -L'
Vinayak
30

Ich würde empfehlen:

iptables -A INPUT -i lo -p tcp --dport $APP_PORT -j ACCEPT
iptables -A INPUT -p tcp --dport $APP_PORT -j DROP

Weil selbstadressierte Pakete nicht unbedingt 127.0.0.1 als Quelle haben, sondern alle über die loSchnittstelle "eingeben" .

Wenn Sie wirklich verstehen möchten, müssen iptablesSie zunächst gute Diagramme herunterladen und ausdrucken, in denen die Beziehungen der netfilterTabellen erläutert werden. Hier sind zwei großartige:

Schließlich lesen Sie eine Menge von iptablesHOWTOs. Die praktischen Beispiele würden Ihnen helfen, schnell auf den neuesten Stand zu kommen :)

pepoluan
quelle
ty! loZeigt sich für mich nach Verwendung dieser Befehle mit dem letzten Befehl von diesem Link cyberciti.biz/faq/howto-display-linux-iptables-loaded-rules iptables -L -v -n --line-numbers
2
@Gracchus Ich finde es viel einfacher iptables-save, die Ausgabe in einer Datei zu speichern, sie mit vimoder zu bearbeiten emacsund die bearbeitete Datei mitiptables-apply
pepoluan
Ich denke, je nach Anwendungsfall sollte die zweite Regel explizit ABLEHNEN, anstatt stillschweigend abzulegen. Wird es als Best Practice stillschweigend verworfen? Ist die Verwendung von REJECT sicher?
Mr. Doomsbuster
1
@ tech-pro Ja, REJECT ist sicher zu bedienen. Dies hängt davon ab, was Sie erreichen möchten und ob Sie den Leuten, die versuchen, den Hafen zu nutzen, gegenüber höflich sein möchten. REJECT sendet ein TCP-RST-Paket zurück, das dem Client mitteilt, dass der Computer in Betrieb ist, der Port jedoch geschlossen ist. Wenn Sie einen Port schließen, von dem andere erwarten, dass er verwendet wird, ist REJECT gut. Wenn Sie nur Port-Scanner erwarten, ist DROP besser.
Law29
1
@ x-yuri Zum Beispiel starte ich unboundals DNS-Cache, davor dnscrypt-proxy. unboundbindet an 127.0.53.1:53und dnscrypt-proxybindet an 127.0.53.2:53. Erraten Sie, von welcher Quelladresse ungebunden / dnscrypt-proxy antwortet, wenn eine App entweder ungebunden oder dnscrypt-proxy zum Auflösen eines vollqualifizierten Domänennamens auffordert?
Pepoluan