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

源泉:ここそしてここ

答え2

あなたの質問への回答が遅すぎるかもしれませんが、最近同様の問題を解決する必要があり、Googleからここに案内しました。

検索に失敗した後、DNS応答を傍受し、その中のドメイン名を与えられた正規表現と比較し、一致するIPアドレスを一覧表示する小さなユーティリティをCで作成しました。ここにいる:https://github.com/vmxdev/sidmat/

独自のDNSサーバーを設定する必要はありません。このユーティリティは、すべてのサーバーでDNS応答をキャプチャできます。

たとえば、facebook.com(およびサブドメイン)の現在確認されているIPアドレスを表示するには、次のように実行できます。

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

ここで、eth0はルーター(またはDNS応答が転送される場所)のネットワークインターフェースです。

iptables(またはipsetを使用したiptables)と簡単に統合できます。

しかし:

  • 実用性は非常に簡単です。攻撃者が欺くために多くの検査を行いません。
  • ユーザーが名前解決にDNSを使用していない場合、この手法は役に立ちません。

答え3

ブラックリストを書くための最も簡単な方法は、おそらく以下を使用することです。DNS

インストールするdnsmasq

$ sudo apt-get install dnsmasq

この行/etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

これは防ぐでしょうFacebookとすべてのサブドメイン。

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

答え4

ローカルキャッシュバインド9を実行すると、通常は次のように実行されます。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   

また見なさい:

BIND9およびISC-DHCPの実行たとえばfacebook.com

オンライン広告をブロックする簡単なDNSベースの方法

関連情報