Raspberry PiをAPとしてNftablesを介してARPリクエストをフィルタリングする方法(hostapdを使用)

Raspberry PiをAPとしてNftablesを介してARPリクエストをフィルタリングする方法(hostapdを使用)

ネットワーク上の特定のIPアドレスからARP要求をフィルタリングしたいです。私は以前試しました:

table arp filter {
        chain input {
                type filter hook input priority 0; policy drop;
                arp saddr ip 192.168.2.1 counter accept #ISP-Router
                arp saddr ip 192.168.1.100 counter accept #Laptop
                arp operation reply counter accept}}

ルーターやラップトップから来ていないすべてのARP要求を削除する必要があります。しかし、私のスマートフォンから送信された要求はまだ私のラップトップから受信されます。 (My Piはルーティングアクセスポイントとして機能し、イーサネットを介してISPルータに接続され、AP機能にはインターフェイスwlanを使用します。)

それから(少なくとも理論的には)最初に解決する必要があるので、受信フックでnetdevテーブルを試しました。

table netdev wlan {
        chain wlanFilter {
                type filter hook ingress device wlan0 priority 0;
                meta protocol arp counter drop # ARP-requests were still getting from smartphone to laptop, but ARP-Cache on Pi was incomplete afterwards  
                meta pkttype {broadcast, multicast} counter drop # didn´t filter ARP Broadcast}}

私もHostapd機能を試してみましたap_isolate=1。同じ結果。

私が使用するRaspberry Piオペレーティングシステムのカーネルバージョンは5.10.17-v7+、Hostapdバージョンは2.8-devel、nftバージョンは0.9.6、dnsmasqバージョンは2.80です。ip_forward有効になっており、NATも有効になっています。私はブリッジを使用していませんが、徹底的にするために同様のルールでテーブルブリッジを試しましたが、成功しませんでした。その後、ルーティングの代わりにアクセスポイントを接続するように設定全体を変更しました。すべてのルールセットを再試行しました。それも無駄です。

Nftablesのようなパケットフィルタが施行される前に、Hostapdがパケットをローカルネットワークに転送することは可能ですか?それとも私のルールに問題があるのでしょうか?それとも全く違うのですか?

ベストアンサー1

コメントの一部の人々が提案したように、コアはap_isolateのオプションですhostapd.conf。以前は、Raspberry Pi 3 B+に組み込まれているネットワークカードであるBCM43455チップのドライバサポートがないため、動作しませんでした。一部のWi-Fiアダプタで使用されるRT5370チップと連携します。だから私は設定でこれらのいずれかを使用します。

また、一部の構成を変更する必要があります。

まず、predictable interface namesraspi-configで有効にし、名前をMACアドレスにバインドします。これがなければ、再起動後にwlan0(内部カード)とwlan1(外部カード)の名前が変わる場合があります。

sudo rfkill listsudo rfkill block <number of interface of built-in card>2番目:ネットワークカード間の競合を防ぐには、使用 - >内蔵カードの無効化を使用します。

その後、ユーザーABの回答に従いました。https://superuser.com/questions/1661060/hostapd-how-to-block-only-netbios-broadcasts-to-clients-in-same-wlan-by-applyinヘアピンを有効にしてください。

これで、ブリッジスイートを使用してローカルトラフィックをフィルタリングするルールを作成できます。たとえば、

table bridge br0 {
        chain forward {
                type filter hook forward priority 0; policy drop;
        }
}

すべてのクライアントを分離するために使用できます。特定の通信を許可するために追加のルールを使用できます。

table bridge br0 {
        chain forward {
                type filter hook forward priority 0; policy drop;
                ether type arp accept
        }
}

おすすめ記事