DD-WRTを使用してWi-Fiインターフェース上のすべてのWANアクセスをブロックする

DD-WRTを使用してWi-Fiインターフェース上のすべてのWANアクセスをブロックする

ath0私は 2 つの Wi-Fi インターフェイス ( 、 )を備えた dd-wrt ​​ルーターを持っていますath1。オンになっているものすべてにath0WAN アクセスを一切与えないようにします。LAN (デバイスとの間の) のみにします。

これを最も簡単かつ堅牢な方法で行うにはどうすればよいでしょうか?

以前、仮想 AP、AP 用の新しいブリッジ、および高度なルーティングとファイアウォール設定を追加して、ath1 を使用してこれを試しました。ただし、これは複雑すぎるため、ath0この目的には、とにかく使用されていない (5GHz) インターフェイスを使用する方がはるかに簡単だと考えました。

私はクライアントとして OpenVPN を使用していますが、これが少し複雑になっています。古いアプローチで iptables ファイアウォールを使用すると、VPN が原因で /etc/ 内のファイルがルール (-I一番上) を上書きし、VPN 経由であればすべての WAN アクセスを許可するため、常にファイアウォール設定を手動で再設定する必要がありました。squashFS では、これを防ぐ方法が見つからず、設定を保存した後やルーターを再起動した後で常に手動で上書きする必要があるのはあまり良いことではありません。また、後で再度上書きされないかどうかもわかりません。

VPN アクセスもしたくありませath0ん。ソース IP で iptables を使用することはできません。これは、その SSID/インターフェース上のすべてのクライアントが接続するとすぐに適用されるため、事前に IP を知ることができないからです。

調べてみたのですが、非常に高度な仮想 AP/ブリッジ ソリューション以外に、私のケースに当てはまるものは見つかりませんでした。

答え1

ルータに に加えてebtables(または)もあり、すべての (W)LAN インターフェイスが同じマスター ( という名前だとします) へのブリッジ スレーブであると仮定します。ebtables-nftiptablesbridge0

ebtables -I INPUT -i ath0 -j mark --set-mark 0xabcd
iptables -I FORWARD -i bridge0 -m mark --mark 0xabcd -j DROP

(マーク値は0xabcd任意であることに注意してください。)

これにより、「LAN 側」からルータに着信するすべてのトラフィックがブロードキャスト ドメイン内に「留まる」ようになります。その理由は、ebtablesブリッジINPUTスレーブ/ポートから別のポートに送信されるトラフィック (つまり、L2 転送) が含まれないためです。また、ルータ自体をターゲットとするトラフィック (つまりath0、マークされているもの) については、L3 で転送しないようにする必要があります (つまり、「LAN」から「WAN」/VPN などに転送できるようにするためです)。

代わりに、iptables やパケット マーキングに依存せずにこれを行うこともできます。

ebtables -I INPUT -i ath0 -d Unicast -p ip ! --ip-dst $ROUTER_LAN_IP -j DROP

テストはされていませんが、-d UnicastDHCPなどを維持することが想定されています。IPv6(トラフィック)も必要な場合は、L3のルータ用) を機能させるには、おそらく次のような、より多くの例外 (別のアプローチでも DHCP を許可できるようになります) のための追加チェーンが必要になります。

ebtables -N ATH0
ebtables -A ATH0 -p ip --ip-dst $ROUTER_LAN_IP -j ACCEPT # unicast
ebtables -A ATH0 -p ip --ip-dport 67 -j ACCEPT # broadcast
ebtables -A ATH0 -p ip ... -j ACCEPT
...
ebtables -A ATH0 -p ip6 ... -j ACCEPT
...
ebtables -A ATH0 -j DROP
ebtables -I INPUT -i ath0 -j ATH0

しかし、ご覧のとおり、後者のアプローチははるかに扱いにくいです。

PS 私は WRT やそれに類するものすべてについてまったく経験がないので、xtables ルールをそれらで永続化するにはどうすればよいのか全くわかりません。(公平を期すために言うと、私の知る限りでは、"一般的な" Linux ディストリビューションでも、いずれにせよディストリビューション固有です。)

関連情報