IPTables - Nur Datenverkehr aus bestimmten Bereichen zulassen

IPTables - Nur Datenverkehr aus bestimmten Bereichen zulassen

Ich versuche, den gesamten Datenverkehr zu einem Webserver außer von einigen definierten Subnetzen zu blockieren. Ich habe zahlreiche Beiträge überprüft und dachte, ich hätte iptables richtig eingestellt, aber aus irgendeinem Grund ist die Site auch außerhalb der Subnetze, die ich im Regelsatz definiert habe, noch erreichbar. Kann mir jemand erklären, was ich falsch gemacht haben könnte? Ich habe festgestellt, dass das Entfernen von Regel 3 verhindert, dass die Site überhaupt erreichbar ist. Die Site selbst befindet sich in 10.10.0.0/16.

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    any     10.10.0.0/16         anywhere            
2        0     0 ACCEPT     all  --  any    any     172.30.0.0/16        anywhere            
3        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            

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

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    lo      anywhere             anywhere    

Das Ziel wird darin bestehen, verschiedene auf die Whitelist gesetzte öffentliche IPs hinzuzufügen und die Site zu sperren, sodass sie nur für einige zugänglich ist.

Folgende Regeln wurden hinzugefügt:

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
iptables -I INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I INPUT -s 172.30.0.0/16 -j ACCEPT
iptables -P INPUT DROP

Antwort1

DerRegelreihenfolgespielt in iptables eine Rolle. Mit der Verwendung iptables -Afügen Sie Regeln hinzuAm Endedes Regelsatzes. iptables -IFügt jedoch eine Regel über dem Regelsatz ein, sofern Sie keine Zeilennummer angeben (was nicht der Fall ist). Infolgedessen werden Regeln nicht in der beabsichtigten Reihenfolge ausgewertet.

Hier ist eine Beispielkonfiguration, die funktionieren sollte, basierend aufdieser Beitrag. Löschen Sie Ihre Regeln vorher, um Duplikate zu vermeiden.

iptables -P FORWARD DROP
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 10.10.0.0/16 -j ACCEPT
iptables -A INPUT -s 172.30.0.0/16 -j ACCEPT
# add some more whitelisting rules here
iptables -P INPUT DROP # Drop everything we don't accept

Die dritte Regel ist wichtig:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Andernfalls erhält Ihr Server keine Antworten auf die von ihm initiierten Verbindungen, beispielsweise DNS-Anfragen.

Nebenbei bemerkt, iptables funktioniert für IPv4, aber nicht für IPv6. Wenn Ihr Server also IPv6-fähig ist, können sich Clients überIPv6. Dies ist möglich, wenn die Verbindung über den Hostnamen statt über die IP-Adresse hergestellt wird und der Hostname in eine gültige IPv6-Adresse auf Ihrem Server aufgelöst wird. Sie wissen das wahrscheinlich, aber viele Leute wissen immer noch nicht, dass iptables IPv6-Verkehr (und Angriffe) filtert. Ich würde dann auch ähnliche ip6tablesRegeln hinzufügen, wenn dies für Ihr Setup angemessen ist.

verwandte Informationen