Erstellen/Konfigurieren einer Firewall mit iptables

Erstellen/Konfigurieren einer Firewall mit iptables

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 -Lverbirgt sich die zusätzliche Übereinstimmung, iptables-savezeigt 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 conntrackim 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-savesieht weniger hübsch aus, zeigt aber alle feinsten Details, verwenden Sie also immer letzteres.

verwandte Informationen