web-dev-qa-db-ja.com

SSDPディスカバリパケットを選択的にドロップする

私はいくつかのAmazonAlexaデバイス(Echo、2つのドット)とBelkinWemoスマートスイッチを持っています。 Alexaアプリを使用すると、スマートホームデバイスをスキャンでき、見つかったものはすべて自動的に追加されます。これは通常、アプリ、Amazon、デバイスのネットワーククラウド間の通信によって処理されますが、特にWemoは代わりにSSDPデバイス検出を使用しているようです。 Alexaはほぼ毎回Wemoを見つけます。

IFTTTからWemoへのリモートコントロールを許可しながら、実際には失敗させたいです。はい、それは奇妙な使用例です:)私の最初の試みは、セカンダリネットワークをセットアップし、それにWemoを貼り付けることでした。しかし、何らかの理由で、Wemoとルーターはそのネットワーク上で約1分以上接続されたままになりません。それで私はそれをあきらめて、ファイアウォールルールを介してそれをやろうとしました-それは私の快適ゾーンのかなり外にあります。 SSDP/UPNPにも慣れていませんが、すぐに理解できます。ルーターでDDWRTを使用しています。各Alexaデバイス、電話、Wemoに静的IPアドレスを割り当てました。

Alexaの検出メカニズムの詳細がわからないので、EchoからのM-SEARCHメッセージの受信と、WemoからのNOTIFYアナウンスの送信の両方を削除する必要があると思います。デバイス検出をネットワーク上で一般的に機能させ続けたいと思います。私はiTunesのリモコンとPlexを使用しており、同様のデバイスをさらに追加する可能性があります。また、どのAlexa /電話デバイスが検出を開始するかわからないので、それらすべてをブロックして満足しています。

したがって、必要なのは、プロトコル全体または通常のHTTP通信(IFTTTが使用していると想定)を無効にすることなく、2つのデバイス間のSSDP通信をドロップするルータールールです。

私が試したところ、AはWemoのIPローカルIPアドレスであり、Bは他の4つのデバイスのIPアドレスの1つです。

iptables -I FORWARD -s A -d B -j logdrop
iptables -I FORWARD -s B -d A -j logdrop

応答はユニキャストであるはずなので、M-SEARCHへの応答が落ちると思いました。たぶん私は間違ったテーブルを使用していますか?

iptables -I INPUT -s A -d B -j logdrop
iptables -I INPUT -s B -d A -j logdrop
repeat for OUTPUT, PREROUTING, POSTROUTING

いいえ。上記の表のバリエーションを維持しながら、UDPを追加しようとしました(そして、TCPを個別に追加するか、どちらも追加しませんでした)。

iptables -I FORWARD -p udp -s A -d B logdrop
iptables -I FORWARD -p udp -s B -d A logdrop

だからそれはまだうまくいきませんでした。たぶん、マルチキャスト機能をいじってみることができますか?

iptables -I FORWARD -p udp -s A -d 239.255.255.250 -j logdrop
iptables -I FORWARD -p udp -s 239.255.255.250 -d A -j logdrop
iptables -I FORWARD -p udp -s B -d 239.255.255.250 -j logdrop
iptables -I FORWARD -p udp -s 239.255.255.250 -d B -j logdrop
also the INPUT/OUTPUT/PRE/POSTROUTING tables

いいえ。

だから私はたくさんの組み合わせを試しました(私が示したもののすべての順列ではありませんが、それらの多く)そして原則としてそれらがお互いを見つけるのを防ぐことができませんでした。なんと、ルーターでUPNPを完全に無効にしてみました。それでもうまくいかなかったようです。これらのダーンデバイスがどのように通信しているのかわかりません!パケットスニッフィングをしますが、それはWi-Fiであり、Windowsを使用しているので、どうやらそれは難しいようです。私はもっ​​と一般的なルールで運が良かったです。 iptables -I FORWARD -d A -j logdropしかし、それらはあまりにも徹底的で、もちろんIFTTTの接続機能を壊し、それでもどのルールが魔法を使っているのか理解するのに苦労しました。

ですから、2晩自分で試してみたら、助けを求める時が来ました。ファイアウォールルールを設定する正しい方法は何ですか?または、SSDPまたはルーティングルール(または理論的にはAlexa)について根本的に誤解していることは何ですか?

2
ojchase

最初の問題は、そもそもこれらのパケットがルーティングされていないことです。

iptables -I FORWARDは、IP層で転送されるパケットを処理します。つまり、デバイスが2つのIPネットワーク間のルーターとして機能する場合です。ただし、sameサブネット内のパケットはルーターに到達することすらなく、Wi-FiAPとイーサネットスイッチによってリンク層に転送されます。自分自身。

したがって、mightは、ebtablesを使用してソフトウェアに到達するパケットをフィルタリングできる可能性があります。たとえば、通常、Wi-FiAP間を通過するパケット組み込みのイーサネットスイッチはLinuxの「ブリッジ」インターフェイスを経由します。実際、これについて話しているさまざまなWebサイトがあります( eg )。

たとえば、これはath*(Atherosワイヤレス)インターフェイスを介して送信されるallマルチキャストパケットをブロックします。

ebtables -A FORWARD -o ath+ -d Multicast -j DROP

残念ながら、通常、ハードウェアで転送されるパケットに対して同じことを行うことはできません。ebtablesでさえそれらを認識しません。

ここで、関連するすべてのパケットが通常のユニキャストである場合は、2番目のサブネットを設定し、ルーターが2つのネットワーク間でデータをルーティングできるようにすることをお勧めします。ただし、マルチキャストが関係している場合、これは厄介な場合があります。ほとんどのマルチキャストの「転送」または「プロキシ」機能は単方向に見えます。本格的なマルチキャストルーティングはDD-WRTの能力を超えています。さらに、多くの検出パケットのTTLが1であるため、ルーターが最初のネットワークを超えてパケットを通過することはありません。

(補足として、iTunesは通常SSDPを使用しません-mDNSを介してDNS-SDを使用します。)

2
user1686

Echoドットでも同様の問題が発生しました。彼らが発見したとき、私のSony SA-NS400スピーカーはネットワークから切断され、通常は戻ってきません。それらはすべて同じwifiインターフェース上にあります。これは、WiresharkとIntel DeviceSnifferで確認できます。アマゾンのサポートは役に立ちましたが、どこにも行きませんでした。これを行うのは、具体的にはurn:Belkin:device:**パケットだと思います(確認のために自分で再作成していません)。私の解決策は、ドットごとにこのルールを適用することでした(X.X.X.XはドットのIPです)。

ebtables -A FORWARD --protocol IPv4 --ip-source X.X.X.X --ip-destination 239.255.255.250 -j DROP

これにより、ドットからの検出のみがブロックされ、他のデバイスによる検出が可能になります。実際にドットから検出を行う必要がある場合は、スクリプトを実行してebtablesを変更し、完了したら元に戻します。これを回避し、マルチキャストが他のインターフェイスに到達できるようにする方法をまだ見つけていません。これにより、ebtablesを変更せずに、色相エミュレーターへの変更を取得できます。

1
5iver