iptables
โดยเฉพาะอย่างยิ่งสิ่งที่คล้ายกับ โดยทั่วไปฉันต้องการจะทำกรองโดเมน / ยกเว้น / บัญชีดำเหมือนผมจะมีที่อยู่ IP iptables
ใน มีคำแนะนำเกี่ยวกับวิธีการทำเช่นนี้หรือไม่?
iptables
โดยเฉพาะอย่างยิ่งสิ่งที่คล้ายกับ โดยทั่วไปฉันต้องการจะทำกรองโดเมน / ยกเว้น / บัญชีดำเหมือนผมจะมีที่อยู่ IP iptables
ใน มีคำแนะนำเกี่ยวกับวิธีการทำเช่นนี้หรือไม่?
คำตอบ:
หากคุณลดทราฟฟิกโดยใช้การจำแนกชื่อด้วยกฎ 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.....
แต่จำไว้:
บางทีคำตอบสำหรับคำถามของคุณอาจจะสายเกินไป แต่เมื่อเร็ว ๆ นี้ฉันจำเป็นต้องแก้ปัญหาที่คล้ายกันและ 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)
แต่:
สำหรับบัญชีดำวิธีที่ง่ายที่สุดน่าจะใช้dnsmasq
ติดตั้ง dnsmasq
$ sudo apt-get install dnsmasq
และเพิ่มบรรทัดนี้ไปที่ /etc/dnsmasq.conf
address=/facebook.com/127.0.0.1
วิธีนี้จะบล็อกfacebook.comและโดเมนย่อยทั้งหมด
หมายเหตุ: สำหรับ Ubuntu ดูโพสต์นี้
หากใช้การแคชในระบบ 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
ตัวอย่าง