IPtablesのMacアドレスフィルタ

IPtablesのMacアドレスフィルタ

ポート2001にアプリケーションがあり、macアドレスを持つ一部のユーザーがこのポートに接続できるようにしたいと思います。だから私は次のコマンドを使います。

sudo iptables -A INPUT -p tcp --destination-port 2001 -j DROP

sudo iptables -A INPUT -p tcp --destination-port 2001 -m mac --mac-source [My PC mac] -j ACCEPT

service iptables save

誰にでも働きますが、私にはうまくいきません。 (macアドレスは許可されていません。)何が問題ですか?

答え1

iptableルールは「最初のゲーム」に基づいています。したがって、最初のルールはすべてを放棄し、2番目のルールは決して達成されません。

順序を変更すると(最初に「受け入れ」、次に「削除」)、期待どおりに機能します。

答え2

IPtablesルールが競合しています。 IPtablesは最初の一致基準として機能します。この-Aオプションを使用すると、ルールがリストの末尾にあるように、ルールがリストのACCEPT末尾に配置されます。

したがって、その説明(ポート2001のtcp接続)を含むパケットを説明する順序でルールを入力すると、そのパケットは破棄され、次のいずれかのルールも解決されません。もちろん、それが唯一のルールであれば!

私は理解このリンクは古いしかし、IPtablesルールの優先順位がどのように機能するかについての優れた情報を提供します。

したがって、このルールを消去したいと思います。まず、ルールを識別してから削除する必要があります。

sudo iptables -L --line-numbers    
sudo iptables -D INPUT [The Number of the Drop Rule]

その後、このオプションを使用する前と同様に、ルールを再追加できます-A。これで、IPtableが期待どおりに機能するはずです。

関連情報