iptablesルールは接続を遮断するか、または完全に開いたままにします

iptablesルールは接続を遮断するか、または完全に開いたままにします

私は iptable ルールの強化に取り組んでいます。ここでは、これまでにやったこと、達成しようとしていること、そして問題点について少し説明します。

私は RPi と WiFi モジュールを持っており、3G モデムをそれに接続しています。WiFi からのすべてのトラフィックを 3G インターフェイスに転送したいと考えています。次のルールを作成しましたが、問題なく動作し、ペアリングするとタブレットで完全なインターネット アクセスが得られます。

    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

今、私はこれらすべてをブロックし、2 つの IP アドレスへのトラフィックのみを通過できるようにしたいと考えています。チェーンを作成しましたが、思ったほどうまく機能しません。

    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

これを実行すると、これら 2 つの IP アドレスを含むすべてのインターネット アクセスがブロックされます。 ! を試しましたが、結果は同じでした。

誰か、私がこの点で何を見逃しているのかを理解するのを手伝ってくれませんか?

ありがとう

答え1

iptables -A TEST -d 34.215.23.64 -j RETURN
iptables -A TEST -d 52.37.29.39 -j RETURN

主な問題は、これらのルールがステートフルではなく、ルールを一方向にしか処理していないことです。他の問題がないと仮定すると、これらのルールはトラフィックを一方向にしか処理しません。しかし、双方向通信が必要なので、送信先が「34.215.23.64」である送信物に対する応答をどうやって取得するのでしょうか。応答は、送信元アドレスが「34.215.23.64」で、送信先がユーザーの IP であるパケットになります。

したがって、少なくとも ( iptables ... --state RELATED,ESTABLISHED ...) ルールを再度追加することを検討する必要があります。

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

しかし、問題はそれだけではありません。チェーンのロジックが壊れています。

したがって、宛先が のパケットは34.215.23.64最初に転送で処理されます。最初にルールに一致します-j TEST。TEST チェーンでは、そのパケットはチェーンに送り返され (-j RETURN)、次に一致するルールは DROP になります。

とにかく、代わりに次のようなことを試してください。

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

関連情報