Linux'ta alan adı filtreleme nasıl yapılır?


12

Tercihen benzer bir şey iptables. Temel olarak, IP'lerde yaptığım gibi alan adı filtreleme / beyaz liste / kara liste yapmak istiyorum iptables. Bunun nasıl yapılacağı konusunda herhangi bir öneriniz var mı?


neyi / neden engellemeye çalışıyorsun? Giden / gelen HTTP veya SMTP veya NTP'yi filtrelemeye mi çalışıyorsunuz? Farklı senaryolar için farklı araçlar kullanılabilir.
Creek

1
Size yardımcı olabilecek önerileri çift denyhosts.sourceforge.net/faq.html ve fail2ban.org/wiki/index.php/Main_Page .
Ramesh

1
@josten ideal olarak Squid gibi bir HTTP proxy kullanırsınız . Alan adlarını Engelleme iptablesolabilir bitmiş ama riskli olabilir
Creek

Yanıtlar:


8

Trafiği iptables kurallarıyla ad çözümlemesini kullanarak bırakırsanız, adlar bu kuralın oluşturulması sırasında çözümlenir. Bir şey değişirse, kuralınız artık geçerli olmayacaktır. Bu bir çözüm olabilir (güzel bir çözüm değil ...):

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

LAN içindeki başka bir ana bilgisayardan:

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

Temel olarak, udp/53onaltılık dize www.facebook.com tobırakılan her dns paketine ( ) söylüyorsunuz . Bunun http trafiğinin kendisini değil ad çözümlemesini düşüreceğini unutmayın.

Pipetler ( |03|www|08|facebook|03|com) ile ayrılmış onaltılık sayılar ., dns sorgularındaki nokta simbolunun temsilidir. Aşağıdaki karakterlerden kaç tanesinin bir FQDN'nin (ana bilgisayar, etki alanı, üst düzey etki alanı) her bölümünü temsil edeceğini söyleyecektir. Örnek:

konak: mail.google.com

onaltılı gösterim: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

"görsel sunum: 04mail06google03com

Paketi tcpdump ile almak:

# 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.....

Ama hatırla:

  • Eğer smtp, ftp veya http gibi daha spesifik traffig'leri filtrelemeye çalışıyorsanız, bu protokolün proxy'si daha iyi olmalıdır.
  • Dns sorgularını "ele geçiriyorsunuz" ve etki alanını engellemiyorsunuz. Kullanıcılar o kadar aptal değil;)

Kaynaklar: Burada ve burada


neden algo türü bm?
Gaurav Kansal

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

4

Belki sorunuzun cevabı çok geç, ama son zamanlarda benzer bir sorunu çözmem gerekiyordu ve google beni buraya getiriyor

Başarısız aramalardan sonra, C'de DNS yanıtlarını engelleyen, içindeki etki alanı adını verilen normal ifadeyle karşılaştıran ve eşleşen IP adreslerini listeleyen küçük bir yardımcı program yazdım. İşte: https://github.com/vmxdev/sidmat/

Kendi DNS sunucunuzu kurmanıza gerek yoktur, yardımcı program herhangi bir sunucudan DNS yanıtlarını yakalayabilir

Örneğin, şu anda çözülen facebook.com (ve alt alan adları) ip adreslerini görmek için şunu çalıştırabilirsiniz:

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

Burada eth0, yönlendiricideki ağ arabirimidir (veya DNS yanıtlarının geçtiği yerde)

Iptables (veya ipset ile iptables) ile kolayca entegre edebilirsiniz

Fakat:

  • yarar gerçekten basit. Birçok kontrol gerçekleştirmez, bu nedenle saldırgan hile yapabilir
  • kullanıcılar ad çözümlemesi için DNS kullanmıyorsa bu teknik işe yaramaz

3

Kara liste için en kolay yol muhtemelen dnsmasq kullanmaktır

Yüklemek dnsmasq

$ sudo apt-get install dnsmasq

ve bu satırı şuraya ekle: /etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

Bu, facebook.com'u ve tüm alt alanlarını engeller .

Not: Ubuntu için bu gönderiye bakın .


1

Yerel bir önbellek bağlama9 çalıştırıyorsanız, genellikle bir dummy-block

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

ve dummy-blockdosya:

$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   

Ayrıca bakınız:

BIND9 ve ISC-DHCP Running ile facebook.comörneğin.

Web Reklamcılığını Engellemek için Basit DNS Tabanlı Bir Yaklaşım

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.