一部の外部デバイスのネットワーク接続を制御するための「ソフトウェアスイッチ」として使用されているPC(Fedora 20を実行)があります。そのようなデバイスは8つあります。 PCには、外部への独自のイーサネット接続に加えて、2つの4ポートイーサネットカードがあります。デフォルトでは、8つのデバイスインターフェイスは、フィルタリングなしで外部インターフェイスに転送されます。
必要な機能は、特定のデバイスとの間のすべてのトラフィックをブロックする機能です。現在、bridge link set dev <device> state 0
を使用してこれを行っています。これにより、デバイスのブリッジ状態が「無効」に設定されます。ただし、これはデバイスからのDHCPトラフィックもブロックするようです。ネットワークのDHCPサーバーは外部インターフェースを介してアクセスできるため、ブリッジがこのトラフィックをブロックしているようです。つまり、デバイスがIPを更新しようとすると失敗します。これは、デバイスで実行しようとしているテストの点で問題があります。
私がやりたいのは、特定のデバイスについて、ブリッジ全体のすべてのトラフィックDHCPを除くをブロックすることです。 bridge
コマンドではこれを実行できないようです。そのため、ブリッジの状態を「転送中」のままにしておくことをお勧めします。いくつかの調査を行った結果、ebtables
は私が必要とするツールのようですが、それを構成するには、DHCPとネットワークに関する知識が必要です。いくつかのebtables
チュートリアルを読んだところ、ポート67と68でトラフィックを許可し(これらはDHCPに使用される唯一のポートだと思いますか?)、他のすべてのトラフィックをブロックする必要があると思います。
だから私の質問は:
ebtables
を設定して、私がやりたいことを行うことはできますか?ebtables
は、ジョブに最適なツールですか、その上に構成を容易にする抽象化レイヤーがありますか? (ferm
のiptables
を考えています。)ebtables
をどのように構成しますか?はい、netfilterルールをブリッジに適用するにはebtablesが必要です。
一致ルールはip
で、パラメータは--ip-source-port
および--ip-destination-port
。
必要なトラフィックを許可するようにebtablesを構成してから、他のトラフィックを明示的にドロップします。
DHCPクライアントポートはUDP 68、DHCPサーバーポートはUDP 67です。
正しいコマンド構文と順序は次のようになると思います。
ebtables -I INPUT -i eth0 -o eth0 -p ip -j DROP
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-source-port 67 -j ACCEPT
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-source-port 68 -j ACCEPT
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-destination-port 67 -j ACCEPT
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-destination-port 68 -j ACCEPT
ebtables-save