Linuxでドメインフィルタリングを行う方法


12

できれば似たようなものiptables。基本的に、でIPを使用する場合と同じように、ドメインフィルタリング/ホワイトリスト/ブラックリストを作成しiptablesます。これを行う方法に関する推奨事項はありますか?


何を/なぜブロックしようとしていますか?発信/着信HTTPまたはSMTPまたはNTPをフィルタリングしようとしていますか?さまざまなシナリオでさまざまなツールを使用できます。
クリーク14年

1
あなたを助けるかもしれないいくつかの提案はdenyhosts.sourceforge.net/faq.htmlfail2ban.org/wiki/index.php/Main_Pageです。
ラメシュ14年

1
@jostenは、理想的にはSquidのようなHTTPプロキシを使用します。でドメイン名をブロックiptablesすることができます行われますが、それはdiceyかもしれ
クリーク

回答:


8

iptablesルールで名前解決を使用してトラフィックをドロップすると、そのルールの作成中に名前が解決されます。何かが変更されると、ルールは無効になります。これは解決策になる可能性があります(ビューティーフルではありません...):

# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP

LAN内の別のホストから:

# host www.facebook.com
www.facebook.com A record not found, try again

基本的に、ドロップudp/53する16進文字列を持つすべてのdns packet()に言っていますwww.facebook.com to。これにより、httpトラフィック自体ではなく、名前解決がドロップされることに注意してください。

pipes(|03|www|08|facebook|03|com)で区切られた16進数は、.dnsクエリのドットシンボルの表現です。FQDNの各部分(ホスト、ドメイン、トップレベルドメイン)を表す次の文字の数を示します。例:

ホスト: mail.google.com

16進表現: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

「視覚的な」表現: 04mail06google03com

tcpdumpでパケットを取得する:

# tcpdump -i eth0 -X dst port 53

15:50:11.643672 IP xxx.xxx.xxx.xxx:xxx > ns4.google.com.domain: 16530 A? mail.google.com. (33)
        0x0000:  4500 003d 779a 4000 4011 b390 c949 4742  E..=w.@.@....IGB
        0x0010:  d8ef 260a 8424 0035 0029 0fc0 4092 0000  ..&..$.5.)..@...
        0x0020:  0001 0000 0000 0000 046d 6169 6c06 676f  .........mail.go
        0x0030:  6f67 6c65 0363 6f6d 0000 0100 01         ogle.com.....

でも覚えておいて:

  • smtp、ftp、httpなどのより具体的なトラフィックをフィルタリングしようとしている場合は、そのプロトコルのプロキシの方が優れているはずです。
  • DNSクエリを「ハイジャック」しており、ドメインをブロックしていません。ユーザーはそれほど愚かではありません;)

ソース:ここここ


なぜアルゴタイプはbmですか?
ガウラフカンサル

アルゴリズムボイヤー-ムーアは- en.wikipedia.org/wiki/...

4

あなたの質問に対する答えは遅すぎるかもしれませんが、最近私は同様の問題を解決する必要があり、グーグルはここに私をもたらします

検索に失敗した後、CでDNS応答をインターセプトし、指定された正規表現とドメイン名を比較し、一致したIPアドレスをリストする小さなユーティリティを作成しました。ここにあります:https : //github.com/vmxdev/sidmat/

独自のDNSサーバーを設定する必要はありません。ユーティリティはどのサーバーからのDNS応答もキャッチできます

たとえば、今すぐ解決できるfacebook.com(およびサブドメイン)のIPアドレスを表示するには、次を実行します。

# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...

eth0はルーターのネットワークインターフェイス(またはDNS応答が通過する場所)

iptables(またはipsetsのiptables)と簡単に統合できます

だが:

  • ユーティリティは本当に簡単です。多くのチェックを実行しないため、攻撃者はそれをごまかすことができます
  • ユーザーが名前解決にDNSを使用しない場合、この手法は役に立ちません

3

ブラックリストの最も簡単な方法は、おそらくdnsmasqを使用することです

インストール dnsmasq

$ sudo apt-get install dnsmasq

この行を /etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

これにより、facebook.comとそのすべてのサブドメインがブロックされます。

注:Ubuntuについては、この投稿を参照してください。


1

ローカルキャッシングbind9を実行している場合、多くの場合、 dummy-block

zone "facebook.com" { type master; file "dummy-block"; };

およびdummy-blockファイル:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                          2         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                     604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
*       IN      A       127.0.0.1   

こちらもご覧ください:

facebook.com例付きのBIND9およびISC-DHCPの実行

Web広告をブロックするための簡単なDNSベースのアプローチ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.