最好是類似的東西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
具有十六進位字串的 dns packet( )進行www.facebook.com to
丟棄。請注意,這將丟棄名稱解析,而不是 http 流量本身。
以 Pipes() 分隔的十六進位數字|03|www|08|facebook|03|com
表示.
dns 查詢上的點符號。它將說明以下字元中的多少個將代表一個字元的每個部分完全合格域名(主機、網域、頂級域)範例:
主持人:mail.google.com
十六進位表示: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
也許你的問題的答案太晚了,但最近我需要解決類似的問題,谷歌把我帶到這裡
搜尋失敗後,我用 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(或 iptables 與 ipset)集成
但:
- 實用性非常簡單。它不執行很多檢查,因此攻擊者可以欺騙它
- 如果使用者不使用 DNS 進行名稱解析,則此技術毫無用處
答案3
答案4
如果運行本地快取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
也可以看看:
運行 BIND9 和 ISC-DHCP舉例facebook.com
說明。