
Ich möchte eine Firewall mit iptables einrichten.
Der Server betreibt den httpd-Dienst (httpd). Das Betriebssystem ist Centos7 und die folgenden Informationen gelten nach der Installation von iptables-services und dem Starten von iptables ohne Änderungen.
[root@iptables ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Wie Sie sehen können, scheint in der Eingabekette, Zeile 3, der Server geöffnet zu sein.
Der Zugriff auf die Webseite über den Browser funktioniert jedoch nicht.
Muss ich etwas einstellen?
als Ausgabe von iptables-save
(aus dem Kommentar übernommen):
# Generated by iptables-save v1.4.21 on Thu Sep 16 13:41:53 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [527:50260]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Sep 16 13:41:53 2021
Antwort1
Wie ich vermutet habe, iptables -L
verbirgt sich die zusätzliche Übereinstimmung, iptables-save
zeigt aber die nackte Wahrheit. Ihre Regel Nr. 3 trifft nur auf lo
— eine Loopback-Schnittstelle zu. Diese Firewall akzeptiert nur Verbindungen zu tcp/22 (SSH) von außen.
Die einfachste Lösung wäre:
iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT
Du kannst zusätzlich mit Conntrack filtern und mit Multiport beide Regeln zu einer einzigen kombinieren:
iptables -I INPUT 4 -m conntrack --ctstate NEW -p tcp -m multiport --dports 80,443 -j ACCEPT -m comment --comment "HTTP/HTTPS service"
Beachten Sie auch den Kommentar, den ich hinzugefügt habe. Verwenden Sie Kommentare fürjedeRegel und Sie werden mir eines Tages für diesen Rat danken, wenn Ihre Firewall auf über 50 Regeln anwächst.
Verwenden Sie nicht -m state
. Dies ist veraltet. Es wird tatsächlich -m conntrack
im Hintergrund verwendet und es ist transparenter, es explizit so zu schreiben.
Verwenden Sie nicht iptables -L
. Wie Sie gesehen haben, sieht die Ausgabe „hübscher“ aus, und hier enden die Vorteile, aber es werden auch nicht alle erforderlichen Details angezeigt. Die Ausgabe von iptables-save
sieht weniger hübsch aus, zeigt aber alle feinsten Details, verwenden Sie also immer letzteres.