Làm thế nào để lọc tên miền trong Linux?


12

Tốt nhất là một cái gì đó tương tự như iptables. Về cơ bản, tôi muốn thực hiện lọc tên miền / danh sách trắng / danh sách đen giống như tôi làm với IP iptables. Có bất kỳ khuyến nghị về cách làm điều này?


cái gì / tại sao bạn đang cố gắng chặn? Bạn đang cố gắng lọc HTTP đi hoặc đến HTTP hoặc NTP? Các công cụ khác nhau có thể được sử dụng cho các kịch bản khác nhau.
Lạch

1
Một vài gợi ý có thể giúp bạn là denyhosts.sourceforge.net/faq.htmlfail2ban.org/wiki/index.php/Main_Page .
Ramesh

1
@josten lý tưởng là bạn sẽ sử dụng proxy HTTP như Squid . Chặn tên miền trong iptablescó thể được thực hiện nhưng nó có thể rất nguy hiểm
Lạch

Câu trả lời:


8

Nếu bạn giảm lưu lượng sử dụng phân giải tên với quy tắc iptables, tên sẽ được giải quyết trong quá trình tạo quy tắc đó. Nếu có gì đó thay đổi, quy tắc của bạn sẽ không còn hiệu lực nữa. Đây có thể là một giải pháp (không phải là một cách đẹp ...):

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

Từ một máy chủ khác trong mạng LAN:

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

Về cơ bản, bạn đang nói với mọi gói dns ( udp/53) có chuỗi thập lục phân www.facebook.com tobị loại bỏ. Lưu ý rằng điều này sẽ giảm độ phân giải tên, và không phải chính lưu lượng truy cập http.

Các số hex được phân tách bằng ống ( |03|www|08|facebook|03|com) là đại diện của dấu chấm .sim trên các truy vấn dns. Nó sẽ cho biết có bao nhiêu trong số các charaters sau đây sẽ đại diện cho từng phần của FQDN (máy chủ, tên miền, tên miền cấp cao nhất) Ví dụ:

tổ chức: mail.google.com

đại diện hex: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

"đại diện trực quan: 04mail06google03com

Lấy gói với 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.....

Nhưng hãy nhớ:

  • Nếu bạn đang cố gắng lọc các giao dịch cụ thể hơn như smtp, ftp hoặc http, một proxy của giao thức đó sẽ tốt hơn.
  • Bạn đang "chiếm quyền điều khiển" truy vấn dns và không chặn tên miền. Người dùng không phải là ngu ngốc;)

Nguồn: Đâyđây


Tại sao loại algo là bm?
Gaurav Kansal

Thuật toán Boyer-Moore - en.wikipedia.org/wiki/ Từ

4

Có thể câu trả lời cho câu hỏi của bạn đã quá muộn, nhưng gần đây tôi cần giải quyết một vấn đề tương tự và google đưa tôi đến đây

Sau khi tìm kiếm không thành công, tôi đã viết một tiện ích nhỏ trong C chặn các phản hồi DNS, so sánh tên miền trong đó với regex đã cho và liệt kê các địa chỉ IP phù hợp. Đây là: https://github.com/vmxdev/sidmat/

Bạn không cần thiết lập máy chủ DNS của riêng mình, tiện ích có thể bắt phản hồi DNS từ bất kỳ máy chủ nào

Ví dụ: để xem các địa chỉ IP của facebook.com (và tên miền phụ) được giải quyết ngay bây giờ, bạn có thể chạy

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

Trong đó eth0 là giao diện mạng trên bộ định tuyến (hoặc nơi phản hồi DNS đi qua)

Bạn có thể dễ dàng tích hợp nó với iptables (hoặc iptables với ipset)

Nhưng:

  • tiện ích thực sự đơn giản. Nó không thực hiện nhiều kiểm tra, vì vậy kẻ tấn công có thể lừa nó
  • kỹ thuật này là vô ích nếu người dùng không sử dụng DNS để phân giải tên

3

Đối với danh sách đen cách dễ nhất có lẽ là sử dụng dnsmasq

Tải về dnsmasq

$ sudo apt-get install dnsmasq

và thêm dòng này vào /etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

Điều này sẽ chặn facebook.com và tất cả các tên miền phụ của nó.

Lưu ý: Đối với Ubuntu, hãy xem bài viết này .


1

Nếu chạy một bộ đệm ẩn cục bộ bind9, nó thường được nhận ra bởi một dummy-block

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

dummy-blocktập tin:

$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   

Xem thêm:

Chạy BIND9 và ISC-DHCP với facebook.comví dụ.

Cách tiếp cận dựa trên DNS đơn giản để chặn quảng cáo web

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.