
Ich habe an der Verbesserung meiner iptable-Regeln gearbeitet. Hier ein paar Hintergrundinformationen zu dem, was ich bisher getan habe, was ich erreichen möchte und zu meinen Problemen:
Ich habe einen RPi und ein WiFi-Modul und habe ein 3G-Modem daran angeschlossen. Ich möchte, dass der gesamte Datenverkehr von meinem WiFi an meine 3G-Schnittstelle weitergeleitet wird. Ich habe diese Regeln erstellt und sie funktionieren einwandfrei. Wenn ich das Tablet verbinde, habe ich vollen Internetzugang:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -F
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -i ppp0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan1 -o ppp0 -j ACCEPT
Jetzt möchte ich das alles blockieren und nur den Datenverkehr an zwei IP-Adressen durchlassen. Ich habe eine Kette erstellt, aber die Dinge funktionieren nicht so gut, wie ich gehofft hatte:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -F
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -N TEST
iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN
iptables -A TEST -j ACCEPT
iptables -A FORWARD -i wlan1 -o ppp0 -j TEST
iptables -A FORWARD -i wlan1 -o ppp0 -j DROP
Wenn ich dies ausführe, werden alle Internetzugriffe, einschließlich dieser beiden IP-Adressen, blockiert. Ich habe es versucht! mit demselben Ergebnis.
Kann mir bitte jemand helfen herauszufinden, was mir hier entgeht?
Danke
Antwort1
iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN
Ihr Hauptproblem ist, dass diese Regeln nicht zustandsbehaftet sind und Sie die Regeln nur in eine Richtung gehandhabt haben. Wenn wir für einen Moment so tun, als gäbe es keine anderen Probleme, würden diese Regeln den Verkehr nur in eine Richtung handhaben. Aber da Sie wahrscheinlich bidirektionale Kommunikation benötigen, wie erhalten Sie Antworten auf alles, was Sie senden und das Ziel '34.215.23.64' hat? Die Antwort wird ein Paket mit der Quelladresse '34.215.23.64' sein und das Ziel wäre Ihre IP.
Sie sollten daher zumindest in Erwägung ziehen, die iptables ... --state RELATED,ESTABLISHED ...
Regel () wieder hinzuzufügen.
iptables -N TEST
iptables -A TEST -d -j RETURN
iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN
iptables -A TEST -j ACCEPT
iptables -A FORWARD -i wlan1 -o ppp0 -j TEST
iptables -A FORWARD -i wlan1 -o ppp0 -j DROP
Aber das ist nicht das einzige Problem. Die Logik Ihrer Kette ist fehlerhaft.
Ein für 34.215.23.64
_de_t -j TEST
...
Versuchen Sie stattdessen jedenfalls so etwas.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -F
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -F
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# permit all established connections
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# chain for wlan -> ppp0 traffic
iptables -N WLAN2PPP
iptables -A WLAN2PPP -d 34.215.23.64 --state NEW -j ACCEPT
iptables -A WLAN2PPP -d 52.37.29.39 --state NEW -j ACCEPT
# everything else from wlan to ppp0 is dropped
iptables -A WLAN2PPP -j DROP
# send wlan1 -> ppp0 traffic to the chain.
iptables -A FORWARD -i wlan1 -o ppp0 -j WLAN2PPP