Linuxでドメイン名フィルタリングを実行するには?

Linuxでドメイン名フィルタリングを実行するには?

好ましくは同様ですiptables。基本的にこの問題を解決しようとしていますiptables。これを行う方法についての提案はありますか?

ベストアンサー1

トラフィックをドロップするために 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パケット()を破棄しますwww.facebook.com to。これはhttpトラフィック自体ではなく名前解決を削除することに注意してください。

DNSクエリのドット表記|03|www|08|facebook|03|comを表すPipes()で区切られた16進数。.次の文字のうち、文字の各部分を表す文字数を示します。完全修飾ドメイン名(ホスト、ドメイン、トップレベルドメイン)例:

マスター: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.@[email protected]
        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クエリを「ハイジャック」しています。ユーザーはそれほど愚かではありません;)

源泉:ここそしてここ

おすすめ記事