Bagaimana melakukan penyaringan domain di Linux?


12

Lebih disukai sesuatu yang mirip dengan iptables. Pada dasarnya, saya ingin melakukan pemfilteran domain / daftar putih / daftar hitam seperti yang saya lakukan dengan IP iptables. Apakah ada rekomendasi tentang cara melakukan ini?


apa / mengapa kamu mencoba untuk memblokir? Apakah Anda mencoba memfilter HTTP keluar / masuk atau SMTP atau NTP? Alat yang berbeda dapat digunakan untuk skenario yang berbeda.
Creek

1
Beberapa saran yang mungkin membantu Anda adalah denyhosts.sourceforge.net/faq.html dan fail2ban.org/wiki/index.php/Main_Page .
Ramesh

1
@ josten idealnya Anda akan menggunakan proxy HTTP seperti Squid . Memblokir nama domain iptablesdapat dilakukan tetapi mungkin tidak pasti
Creek

Jawaban:


8

Jika Anda menghentikan lalu lintas menggunakan resolusi nama dengan aturan iptables, nama-nama tersebut akan diselesaikan selama pembuatan aturan itu. Jika sesuatu berubah, Anda berkuasa tidak akan valid lagi. Ini bisa menjadi solusi (bukan yang indah ...):

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

Dari host lain di dalam LAN:

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

Pada dasarnya, Anda mengatakan kepada setiap paket dns ( udp/53) yang memiliki string heksadesimal yang www.facebook.com toakan dihapus. Perhatikan bahwa ini akan menjatuhkan resolusi nama, dan bukan lalu lintas http itu sendiri.

Bilangan heks yang dipisahkan dengan pipa ( |03|www|08|facebook|03|com) adalah representasi dari .simbol titik pada permintaan dns. Ia akan mengatakan berapa banyak karakter berikut yang akan mewakili setiap bagian dari FQDN (host, domain, domain tingkat atas) Contoh:

tuan rumah: mail.google.com

representasi hex: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

Representasi "visual": 04mail06google03com

Mendapatkan paket dengan 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.....

Tapi ingat:

  • Jika Anda mencoba memfilter traffig yang lebih spesifik seperti smtp, ftp atau http, proksi protokol itu harus lebih baik.
  • Anda "membajak" permintaan dns dan tidak memblokir domain. Pengguna tidak sebodoh itu;)

Sumber: Di sini dan di sini


mengapa tipe algo adalah bm?
Gaurav Kansal

Algoritma Boyer-Moore - en.wikipedia.org/wiki/…

4

Mungkin jawaban untuk pertanyaan Anda sudah terlambat, tetapi baru-baru ini saya perlu menyelesaikan masalah serupa dan Google membawa saya ke sini

Setelah pencarian yang gagal saya menulis sebuah utilitas kecil di C yang mencegat tanggapan DNS, membandingkan nama domain di dalamnya dengan regex yang diberikan dan daftar yang cocok dengan alamat IP. Ini dia: https://github.com/vmxdev/sidmat/

Anda tidak perlu mengatur server DNS Anda sendiri, utilitas dapat menangkap respons DNS dari server mana pun

Misalnya, untuk melihat alamat ip facebook.com (dan subdomain) yang diselesaikan sekarang Anda dapat menjalankan

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

di mana eth0 adalah antarmuka jaringan pada router (atau di mana tanggapan DNS lewat)

Anda dapat dengan mudah mengintegrasikannya dengan iptables (atau iptables dengan ipset)

Tapi:

  • utilitas sangat sederhana. Itu tidak melakukan banyak pemeriksaan, sehingga penyerang bisa menipu itu
  • teknik ini tidak berguna jika pengguna tidak menggunakan DNS untuk resolusi nama

3

Untuk daftar hitam cara termudah mungkin dengan menggunakan dnsmasq

Install dnsmasq

$ sudo apt-get install dnsmasq

dan tambahkan baris ini ke /etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

Ini akan memblokir facebook.com dan semua subdomainnya.

Catatan: Untuk ubuntu lihat posting ini .


1

Jika menjalankan caching bind9 lokal itu sering disadari oleh a dummy-block

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

dan dummy-blockfile:

$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   

Lihat juga:

Menjalankan BIND9 dan ISC-DHCP dengan facebook.comcontoh.

Pendekatan Berbasis DNS Sederhana untuk Memblokir Iklan Web

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.