Wie kann ich Port 6379 für externen Verkehr auf Ubuntu blockieren?

8

Ich möchte den Zugriff auf Port 6379 auf meinem Server blockieren, möchte aber dennoch eine interne Verbindung herstellen. Die Redis-Server-Anwendung wird auf diesem Port ausgeführt und ich möchte nur lokal eine Verbindung herstellen (127.0.0.1). Wie kann ich das machen?

Steve Rodrigue
quelle

Antworten:

10

Dazu müssen Sie sicherstellen, dass Ihre IPTables-Regeln ordnungsgemäß konfiguriert sind. Ubuntu lässt seine Server im Allgemeinen standardmäßig weit offen, weshalb ich ihre Verwendung als Server immer noch nicht empfehle, es sei denn, Sie wissen genau, wie dies richtig funktioniert.

Ich stelle mir vor, dass du iptables -L -nvso aussiehst, ja?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

Es ist leer und weit offen. Das Ubuntu IPTables HowTo wird wahrscheinlich einiges dabei helfen. ( https://help.ubuntu.com/community/IptablesHowTo )

Ich empfehle so etwas, das SSH auf jeder Schnittstelle und TCP 6379 auf jeder Schnittstelle erlaubt, außer der, die Sie nicht wollen:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Sie würden diese Datei dann in /etc/iptables.rules speichern.

Natürlich sollten alle anderen Ports, die Sie speziell öffnen möchten, hinzugefügt werden.

Hinweis: Ich habe aus Gründen der Übersichtlichkeit die spezifischen 6379-Zeilen hinzugefügt. Das untere ACCEPT direkt vor dem COMMIT würde dies tatsächlich zulassen, da alle Loopback-Verbindungen auf einem Linux-System für einen ordnungsgemäßen Betrieb zulässig sein müssen.

Sie sollten die Regeln auch in Ihre Datei / etc / network / interfaces einfügen, um sicherzustellen, dass sie beim Aufrufen der Schnittstelle und nicht später beim Startvorgang hinzugefügt werden. Es wird empfohlen, so etwas hinzuzufügen:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

Bearbeiten: Um diese Konfiguration zunächst zu laden, müssen Sie den oben genannten Befehl iptables-restore ausführen:

iptables-restore < /etc/iptables.rules
Magellan
quelle
Ich gehe davon aus, dass dies den Port 6379 für das gesamte Web öffnen würde, oder? Was soll ich tun, um dies nur für 127.0.0.1 zu öffnen?
Steve Rodrigue
Nein, da die Standardregel DROP lautet. Wenn es keine explizite ACCEPT-Regel gibt, wird es durch den Standard-DROP neben: INPUT oben blockiert.
Magellan
Persönlich denke ich, dass die Standard-ACCEPT-Regel in einer "Server" -Bereitstellung nur kriminell ist. Aber es ist nicht überraschend, da Ubuntu in erster Linie eine Desktop-Distribution ist.
Magellan
Ok, ich habe genau das getan, was Sie angefordert haben, aber anscheinend kann ich von außen immer noch eine Verbindung zu Port 6379 herstellen. Soll ich den Server neu starten oder so?
Steve Rodrigue
1
Ja, aber die Zähler interessieren mich nicht wirklich und das funktioniert bei mir. Fühlen Sie sich frei, die Antwort zu bearbeiten, um sie einem strengeren Prozess anzupassen.
Magellan
3

Nun, ich würde vorschlagen, die "unkomplizierte Firewall" (ufw) zu verwenden, die auch von Canonical empfohlen wird. Das Lesen und Schreiben von iptables ist zu kompliziert für gelegentliche Port-Locking-Aufgaben.

Siehe hier: https://wiki.ubuntu.com/UncomplicatedFirewall

Mojovski
quelle
1
Ältere Versionen von UFW hatten nicht die Möglichkeit, Regeln auf ausgewählte Ports anzuwenden, es war alles oder nichts. Und professionelle Sysadmins sollten sich angewöhnen zu verstehen, was ihre Iptables-Einstellungen bewirken und wie die Ketten funktionieren.
Magellan
2

Etwas wie

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

Sollte arbeiten.

Kedare
quelle
Dies gibt mir diesen Fehler: iptables v1.4.4: unbekannte Option `--dport '
Steve Rodrigue
Können Sie es mit dem neuen Befehl erneut versuchen? Ich habe den Teil --protocol und -i hinzugefügt (an Ihre Schnittstelle anpassen), er sollte jetzt funktionieren.
Kedare
Das Problem, das ich mit diesem Vorschlag habe, ist, dass er nicht über Neustarts hinweg gespeichert wird, es sei denn, andere erforderliche Befehle werden ausgeführt, und es wird davon ausgegangen, dass es nur eine Nicht-Loopback-Schnittstelle gibt.
Magellan
Ich würde empfehlen, den Negationsoperator zu verwenden: -i! lo
Magellan
Adrian: Du meinst, wenn ich den Server neu starte, wäre diese Änderung nicht mehr aktiv?
Steve Rodrigue