これはルータにあります。私はhash:net型のipsetである$mac
クライアントのMACを持っています。$set
私の意図は、ネットワークにアクセスできる人を除くすべてのネットワークへのアクセスを拒否することです$set
。$mac
-A lan_forward -m mac ! --mac-source $mac -m set --match-set $set dst -j REJECT
しかし、これはうまくいきません。$set
MACアドレスが何であれ、誰もがブロックします。問題は何ですか?これをLOG
ターゲットに置き換えると、次のように表示されます。
[ 4128.497456] Blocked website: IN=lanbridge OUT=tun0 MAC=XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SRC=192.168.1.186 DST=XXX.XXX.XXX.XXX LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=21305 DF PROTO=TCP SPT=40030 DPT=443 WINDOW=64240 RES=0x00 SYN URGP=0
MACがホワイトリストにあるにもかかわらず、TCP RSTへの接続を拒否することをtcpdumpを介して確認できます。
編集する!問題を発見しました。
私の問題は、1つ以上のルールがあることです。
-A lan_forward -m mac ! --mac-source $mac1 -m set --match-set $set dst -j REJECT
-A lan_forward -m mac ! --mac-source $mac2 -m set --match-set $set dst -j REJECT
-A lan_forward -m mac ! --mac-source $mac3 -m set --match-set $set dst -j REJECT
したがって、最初の項目が一致しても、2番目の項目は失敗して拒否されます。 MARKを使用することはほとんど決まっていましたが、パケットマーキングの正しい使用ではないように見えACCEPT
ます。ACCEPT
フィルタリング中のMACに適用するルールの後に何も追加しないことを覚えておいてください。
答え1
1つの方法は、新しいチェーンにジャンプして受け入れ/拒否を決定することです。しかし、あなたの説明によると、カスタムMACアドレスが許可されているかブロックされているのかわからないので、ここのロジックを裏返す必要があるかもしれません。
-A lan_forward -m set --match-set $set dst -j a_new_chain
-A a_new_chain -m mac --mac-source $mac -j ACCEPT
-A a_new_chain -j REJECT
これは、関連するすべてがコレクションにありますが、許可されなければならず、$mac
他のすべてが拒否されなければならないと仮定します。
別の問題は接続追跡である可能性があります。開いている接続をブロックする必要がある場合は、接続追跡を適用する前に上記の規則を適用するか、一部の外部ツールを使用して既存の接続を終了する必要があります。それ以外の場合は、開いている接続に対して接続を開いたままにできる項目をバイパスして、ipsetテーブルに追加できます。