セッションが開始されるネットワークインターフェイスにすべてのTCPトラフィックを制限する方法は?

セッションが開始されるネットワークインターフェイスにすべてのTCPトラフィックを制限する方法は?

同じサブネット用に構成された2つのネットワークインターフェース(lan0、wlan0)を持つ組み込みLinuxシステムがあります。このシステムのサーバーは、両方のインターフェイスでTCP接続を許可します。

要求を受信したのと同じインターフェイスでセッションへのすべての応答が送信されるようにするにはどうすればよいですか。つまり、TCPセッション内のすべてのトラフィックを特定のネットワークインターフェイスに制限する方法は何ですか?

Listen()ソケットと承認されたソケットは、setockopt(fd、BIND_TO_DEVICE)を使用してインターフェース/デバイスにバインドできます。サーバーは両方のインターフェースに対してこれを行います。これにより、セッションが生成されたインターフェイスを検出し、アウトバウンドトラフィックを同じインターフェイスに制限するのに役立ちます。

ただし、accept()が発生すると、SYN-ACKがクライアントに再送信され、問題はARPルックアップによってこの初期パケットが他の(間違った)インターフェイスを介して送信される可能性があることです。 arpはクライアントが他の/「間違った」インタフェースにも表示されるため、クライアントのIPアドレスを別の/「間違った」インタフェースに見つけることができます。

答え1

iptablesを使用して、インターフェイスへのTCP接続を制限できます。

#iptables -A INPUT -p tcp -i eth0 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN

--limit 1/s: Maximum average matching rate in seconds
--limit-burst 3: Maximum initial number of packets to match

関連情報