
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 -A
fügen Sie Regeln hinzuAm Endedes Regelsatzes. iptables -I
Fü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 ip6tables
Regeln hinzufügen, wenn dies für Ihr Setup angemessen ist.