Ich habe einen Host, der als Gateway für die Weiterleitung eines Heimnetzwerks zum Internet fungiert. IP-Masquerading ist seit Monaten aktiviert und das System hat einwandfrei funktioniert.
Wie konfiguriere ich es so, dass es auch als Firewall fungiert? Irgendwelche Bedingungen, die ich in den Verkehr gebracht habe FORWARD
Kette funktioniert einfach nicht.
Zum Beispiel
-A FORWARD -i eth1 -p tcp -j ACCEPT
Lässt einfach den gesamten TCP-Verkehr vom Routing ab, anstatt ihn auf den Verkehr zu beschränken, der von eth1 stammt. Ebenfalls...
-A FORWARD -s 192.168.2.0/24 -p tcp -j ACCEPT
... lässt nicht nur TCP-Verkehr aus dem 192.168.2.0-Subnetz zu, sobald ich die Regel anwende, stoppt der gesamte TCP-Verkehr das Routing.
Ich konnte keine eindeutige Dokumentation zum Packet Mangling mit Masquerade finden oder darüber, wie man Masquerade unterbindet und stattdessen SNAT verwendet.
eth0
ist eine externe Schnittstelle im selben Subnetz wie der DSL-Routereth1
ist eine interne Schnittstelle, über die alle meine Hosts problemlos mit DHCP arbeiten
Wie konfiguriere ich iptables für IP-Masquerading und Firewalling?
# Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*nat
:PREROUTING ACCEPT [10859:2328892]
:INPUT ACCEPT [1002:126271]
:OUTPUT ACCEPT [1256:91484]
:POSTROUTING ACCEPT [638:43890]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Oct 29 12:48:19 2015
# Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*filter
:INPUT ACCEPT [5:803]
:FORWARD ACCEPT [127:18532]
:OUTPUT ACCEPT [5:431]
-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT -m comment --comment "HTTP Serve eth1"
-A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT -m comment --comment "SSH Serve eth1"
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -m comment --comment "ssh on eth1"
-A INPUT -i eth0 -p tcp -m tcp --dport 53 -j DROP -m comment --comment "drop dns from eth0"
-A INPUT -p icmp -j ACCEPT
-A INPUT -i eth0 -j DROP
-A INPUT -i eth1 -j REJECT
-P INPUT DROP
-A FORWARD -p tcp -j ACCEPT -m comment --comment "all tcp from internal"
-A FORWARD -p udp -j ACCEPT -m comment --comment "all udp from internal"
-A FORWARD -p icmp -j ACCEPT
-P FORWARD DROP
-A OUTPUT -o eth1 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-P OUTPUT DROP
COMMIT
# Completed on Thu Oct 29 12:48:19 2015
quelle
SNAT
funktioniert nicht, verwenden Sie wahrscheinlich die falsche Quelladresse.iptables-save
mit Ihren gewünschten Regeln sowie einer verbalen Beschreibung von ihnen.Antworten:
Iptables und das Networking im Allgemeinen sind komplizierter, als Sie es zu schätzen wissen.
Nehmen wir also an, Sie tun dies nur in der Hoffnung, den gesamten ausgehenden Datenverkehr von der internen eth1 wie in Ihrer ersten Zeile zu aktivieren:
Wo dies bricht, ist das Alle Verbindungen und der Datenverkehr erfolgen in beide Richtungen . FORWARD verarbeitet den gesamten Datenverkehr, der nicht auf den Router (INPUT) abzielt oder vom Router (OUTPUT) stammt. FORWARD erhält also sowohl die Verbindung, über die der ausgehende TCP-Datenverkehr initiiert wird (was Ihre Regel zulässt), als auch alle Antworten, die versuchen, diese Verbindung zu bestätigen und den Datenverkehr weiterzuleiten (da Sie alles andere verwerfen, was nicht übereinstimmt, wäre eine neue Regel erforderlich, um erlauben).
Hier wird iptables sehr schnell sehr kompliziert, weil es verrückt ist, eine Regel für jedes potenzielle Paket in beide Richtungen aufzustellen. Es wird einfacher, wenn die erste Regel immer darin besteht, Datenverkehr über hergestellte Verbindungen mit -m state --state ESTABLISHED zuzulassen. als Sie anfingen, in Ihrer anderen Frage zu verwenden, Ihr NAT-Problem aussortierend . Auf diese Weise können Sie nur Regeln für Verbindungen schreiben, deren Start Sie zulassen möchten. Es kann auch hilfreich sein, eingehende und ausgehende Verbindungen nach ihren eigenen Regeln zu sortieren (es sei denn, Sie machen sich nur Gedanken über ausgehende), wie im Folgenden beschrieben:
quelle