Ich muss meinen Computer so konfigurieren, dass nur HTTP-Datenverkehr von / zu serverfault.com zugelassen wird. Alle anderen Websites, Service-Ports sind nicht zugänglich. Ich habe mir die folgenden Iptables-Regeln ausgedacht:
#drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
Es funktioniert nicht ganz gut:
Nachdem ich alles fallen gelassen habe, gehe ich zu Regel 3 über:
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
Ich erhalte diesen Fehler:
iptables v1.4.4: host/network `serverfault.com' not found
Try `iptables -h' or 'iptables --help' for more information.
Denken Sie, dass es mit DNS zusammenhängt? Soll ich das auch zulassen? Oder sollte ich einfach IP-Adressen in die Regeln aufnehmen? Glauben Sie, was ich versuche, könnte mit einfacheren Regeln erreicht werden? Wie?
Ich würde mich über jede Hilfe oder Hinweise dazu freuen. Vielen Dank!
Antworten:
Bei den IPTables-Regeln ist die Reihenfolge wichtig. Die Regeln werden der Reihe nach hinzugefügt und angewendet. Darüber hinaus werden Regeln beim manuellen Hinzufügen sofort angewendet. Daher werden in Ihrem Beispiel alle Pakete, die die INPUT- und OUTPUT-Ketten durchlaufen, verworfen, sobald die Standardrichtlinie festgelegt wird. Dies ist übrigens auch der Grund, warum Sie die Fehlermeldung erhalten haben, die Sie erhalten haben. Was passiert ist folgendes:
Während die Quell- / Zieloptionen Hostnamen akzeptieren, wird davon dringend abgeraten. So zitieren Sie die Manpage:
Slillibri traf den Nagel auf den Kopf, worauf er antwortete, Sie hätten die DNS-ACCEPT-Regel verpasst. In Ihrem Fall spielt es keine Rolle, aber im Allgemeinen würde ich die Standardrichtlinie später im Prozess festlegen. Das Letzte, was Sie möchten, ist, dass Sie remote arbeiten und SSH zulassen, nachdem Sie eine Standardverweigerung aktiviert haben.
Abhängig von Ihrer Distribution sollten Sie auch in der Lage sein, Ihre Firewall-Regeln so zu speichern, dass sie beim Start automatisch angewendet werden.
Wenn Sie das alles wissen und Ihr Skript neu ordnen, empfehle ich Folgendes.
quelle
iptables -P
Anweisungen an einer beliebigen Stelle in Ihrem Skript platzieren, da Kettenrichtlinien nur angewendet werden, wenn Pakete am Ende einer Kette "abfallen". Normalerweise setze ich die Richtlinienanweisungen (normalerweiseDROP
Richtlinien) oben in meine iptables-Skripte.sudo iptables -I OUTPUT 1 -o lo -j ACCEPT
. Sollte das nicht hinzugefügt werden?Hinzufügen
DNS-Lookups zulassen.
quelle
Diese Art von Anforderung kann mit einem Web-Proxy und / oder Filter besser gehandhabt werden. Dansgaurdian kann dazu konfiguriert werden. Sie müssen NAT-Regeln verwenden, um den Datenverkehr durch den Filter zu zwingen.
Durch die Verwendung von iptables zum Filtern können alle Websites mit den entsprechenden IP-Adressen ausgewählt werden. Dies ist normalerweise eine kleine Teilmenge des gesamten Webs.
quelle
iptables
ist wahrscheinlich das falsche Tool, da es sich nicht besonders gut um DNS-Namen handelt. Ein Webproxy mit entsprechenden Filtereinstellungen passt viel besser.Ich fürchte, iptables funktioniert auf dieser Ebene nicht, es kümmert sich nur um die IP-Adresse, nicht um den Hostnamen. Wenn Sie den Zugriff auf virtuelle Hosts mit anderen Namen auf derselben IP-Adresse blockieren möchten, müssen Sie die .htaccess-Dateien eingeben.
quelle
Sie müssen dies auf Ihrem Webserver konfigurieren. iptables ist ein Paketfilter. HTTP-Transaktionen senden den Site-Namen (dh Stackoverflow) als Teil der TCP-Payload (dh nicht als Teil des TCP-Headers, den iptables leicht liest).
Angesichts dessen und der Tatsache, dass HTTP-Transaktionen mit ziemlicher Sicherheit über mehrere Pakete verteilt sein werden (dh, Sie können nicht einfach eine Zeichenfolge im HTTP-Header abgleichen), wird dies von Ihrer Webserverkonfiguration oder einem Proxy vor Ihnen viel besser gehandhabt davon.
Es wäre nützlich, die Gründe dafür zu kennen. Es gibt noch ein paar andere Alternativen:
quelle