การกรองโดเมนใน Linux ทำอย่างไร


12

iptablesโดยเฉพาะอย่างยิ่งสิ่งที่คล้ายกับ โดยทั่วไปฉันต้องการจะทำกรองโดเมน / ยกเว้น / บัญชีดำเหมือนผมจะมีที่อยู่ IP iptablesใน มีคำแนะนำเกี่ยวกับวิธีการทำเช่นนี้หรือไม่?


คุณพยายามบล็อกอะไร คุณพยายามกรอง HTTP หรือ SMTP ขาออกหรือขาออกหรือ NTP หรือไม่ สามารถใช้เครื่องมือต่าง ๆ สำหรับสถานการณ์ต่าง ๆ
Creek

1
คู่ของข้อเสนอแนะที่อาจช่วยให้คุณมีความdenyhosts.sourceforge.net/faq.htmlและfail2ban.org/wiki/index.php/Main_Page
Ramesh

1
@josten นึกคิดคุณจะใช้พร็อกซี HTTP เช่นปลาหมึก การปิดกั้นชื่อโดเมนiptablesสามารถทำได้แต่อาจเป็นไปได้
Creek

คำตอบ:


8

หากคุณลดทราฟฟิกโดยใช้การจำแนกชื่อด้วยกฎ iptables ชื่อจะได้รับการแก้ไขในระหว่างการสร้างกฎนั้น หากมีอะไรเปลี่ยนแปลงกฎของคุณจะไม่สามารถใช้ได้อีกต่อไป นี่อาจเป็นวิธีแก้ปัญหา (ไม่ใช่ Beautyfull หนึ่ง ... ):

# 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

โดยพื้นฐานแล้วคุณกำลังพูดกับทุก ๆ dns แพ็กเก็ต ( udp/53) ที่มีสตริงเลขฐานสิบหกที่www.facebook.com toถูกทิ้ง โปรดทราบว่าการทำเช่นนี้จะทำให้การจำแนกชื่อล้มเหลวและไม่ใช่ปริมาณการรับส่งข้อมูล http

ตัวเลขฐานสิบหกที่คั่นด้วยไพพ์( |03|www|08|facebook|03|com) คือการแสดงของ dot .simbol บนเคียวรี dns มันจะบอกว่าจำนวนผู้ต่อไปนี้จะเป็นตัวแทนของแต่ละส่วนของFQDN (โฮสต์, โดเมน, โดเมนระดับบนสุด) ตัวอย่าง:

โฮสต์: mail.google.com

ตัวแทน hex: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

การแสดง "visual": 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.@.@....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.....

แต่จำไว้:

  • หากคุณพยายามกรองการดูแลการแสดงโฆษณาที่เฉพาะเจาะจงมากขึ้นเช่น smtp, ftp หรือ http พร็อกซีของโปรโตคอลนั้นน่าจะดีกว่า
  • คุณกำลัง "ไฮแจ็ก" เคียวรี DNS และไม่บล็อกโดเมน ผู้ใช้ไม่ได้โง่ขนาดนั้น)

แหล่งที่มา: ที่นี่และที่นี่


ทำไม algo type คือ bm
Gaurav Kansal

อัลกอริทึม Boyer-Moore - en.wikipedia.org/wiki/…

4

บางทีคำตอบสำหรับคำถามของคุณอาจจะสายเกินไป แต่เมื่อเร็ว ๆ นี้ฉันจำเป็นต้องแก้ปัญหาที่คล้ายกันและ google นำฉันมาที่นี่

หลังจากการค้นหาไม่สำเร็จฉันได้เขียนโปรแกรมอรรถประโยชน์ขนาดเล็กใน C ที่ขัดขวางการตอบสนอง DNS ให้เปรียบเทียบชื่อโดเมนกับ regex ที่ระบุและรายการที่อยู่ IP ที่ตรงกัน นี่คือ: https://github.com/vmxdev/sidmat/

คุณไม่จำเป็นต้องตั้งค่าเซิร์ฟเวอร์ DNS ของคุณเองยูทิลิตี้สามารถรับการตอบสนอง DNS จากเซิร์ฟเวอร์ใดก็ได้

ตัวอย่างเช่นหากต้องการดูที่อยู่ ip ของ facebook.com (และโดเมนย่อย) ซึ่งได้รับการแก้ไขแล้วในขณะนี้คุณสามารถเรียกใช้ได้

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

โดยที่ eth0 เป็นอินเตอร์เฟสเครือข่ายบนเราเตอร์ (หรือที่ DNS ตอบสนองผ่าน)

คุณสามารถรวมเข้ากับ iptables ได้อย่างง่ายดาย (หรือ iptables กับ ipset)

แต่:

  • ยูทิลิตี้ง่ายจริงๆ มันไม่ทำการตรวจสอบจำนวนมากดังนั้นผู้โจมตีสามารถโกงได้
  • เทคนิคนี้ไม่มีประโยชน์หากผู้ใช้ไม่ใช้ DNS สำหรับการจำแนกชื่อ

3

สำหรับบัญชีดำวิธีที่ง่ายที่สุดน่าจะใช้dnsmasq

ติดตั้ง dnsmasq

$ sudo apt-get install dnsmasq

และเพิ่มบรรทัดนี้ไปที่ /etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

วิธีนี้จะบล็อกfacebook.comและโดเมนย่อยทั้งหมด

หมายเหตุ: สำหรับ Ubuntu ดูโพสต์นี้


1

หากใช้การแคชในระบบ 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ตัวอย่าง

วิธีการที่ใช้ DNS อย่างง่ายสำหรับการบล็อกโฆษณาบนเว็บ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.