การใช้ Linux IPTables จะบล็อก torrents หรือโปรโตคอล P2P ได้อย่างไร?


17

ที่สถาบันของเราเราเชื่อมต่อคอมพิวเตอร์มากกว่า 300 เครื่องกับ LAN ที่แตกต่างกันกับอินเทอร์เน็ต รวมที่นี่คือ Officies LAN และห้องปฏิบัติการอินเทอร์เน็ตสำหรับนักเรียน และเราต้องการควบคุม Torrents หรือโปรโตคอล P2P ใด ๆ วิธีแก้ไขปัญหาก่อนหน้านี้ของเราคือ KerioWinRoute 6.5.x ซึ่งเป็นที่พอใจมากที่สุด

ปัญหาคือเราย้ายไปยัง Ubuntu 8.04 LTS โดยใช้แพลตฟอร์ม Webmin

คำตอบ:


14

การปิดกั้น P2P ที่ใช้พอร์ตเป็นโซลูชันแทบจะไม่ 100% สิ่งที่คุณอาจต้องการพิจารณาเรียกว่าการกรอง L7 (การกรองเลเยอร์ 7) โดยพื้นฐานแล้วลินุกซ์มีการติดตั้ง regex โดยใช้การจับคู่บนทุกแพ็กเกจเพื่อตัดสินใจว่าอะไรดีและอะไรแย่

http://l7-filter.sourceforge.net/

สิ่งนี้สามารถช่วยคุณบล็อกสิ่งต่าง ๆ รวมถึง skype

http://l7-filter.sourceforge.net/protocols

โปรดทราบ: การจับคู่ Regex เพื่อตรวจสอบและกรองแพ็คเก็ตเป็นทรัพยากรเข้มข้นทำให้ระบบใด ๆ มีความเสี่ยงต่อการโจมตี DDOS มากวิธีที่ต้องการจะกำหนดเป้าหมายโปรโตคอลภายใน iptables


11

โซลูชันทางเทคนิคที่เหมาะสมเพียงอย่างเดียวคือให้ทราฟฟิกทั้งหมดผ่านพร็อกซีที่จะถอดรหัสทราฟฟิก SSL ในทันทีจากนั้นใช้การกรองเลเยอร์ 7 กับทราฟฟิกที่ผ่าน

ผลิตภัณฑ์ดังกล่าวค่อนข้างแพงเนื่องจากมีทีมงานวิศวกรขนาดใหญ่อยู่ข้างหลังพวกเขาทำการปรับปรุงกฎที่จำเป็นในการจำแนกแพ็คเก็ต

คุณสามารถช่วยตัวเองได้บ้างกับโมดูล iptables ตามที่ระบุไว้ใน ipp2p หรือ l7-filter ก่อนหน้านี้ แต่จะไม่จับปริมาณข้อมูลที่เข้ารหัส

ไม่ว่าในกรณีใดเทคโนโลยีแทบจะไม่สามารถแก้ปัญหาสังคมได้และการใช้งานในทางที่ผิดขององค์กร / สาธารณะ / เครือข่ายใดก็ตามสำหรับ p2p นั้นเป็นปัญหาสังคม ลองพูดคุยกับผู้ใช้ของคุณรับองค์กรของคุณเพื่อสร้างนโยบายที่เหมาะสมและบังคับใช้มาตรการลงโทษ ในประสบการณ์ของฉันนี้ทำงานได้ดีกว่าเทคโนโลยีคงที่แข่งขันกับผู้ใช้ของคุณ


พร็อกซีเซิร์ฟเวอร์ถอดรหัส SSL ได้อย่างไร?
David Pashley

โปรดระวังว่าการใช้ SSL Proxy นั้นถูกห้ามในบางเรื่อง
รัศมี

David Pashley พวกเขาส่งใบรับรองไปที่นั่นแทนไซต์หนึ่ง เพื่อให้พวกเขาเป็นส่วนตัวแล้วส่งต่อไปยังไซต์จริง
รัศมี

1
อีกหนึ่งขั้นตอนที่เกี่ยวข้องในการใช้นโยบายกลุ่มเพื่อผลักดันใบรับรองหลักที่เชื่อถือได้สำหรับพร็อกซี SSL เพื่อให้สามารถสร้างใบรับรองที่เชื่อถือได้
Zan Lynx

1
นั่นเป็นเพียงวิธีแก้ปัญหาที่น่าเกลียดจริงๆ ... พูดคุยกับผู้ใช้ของคุณ ...
Antoine Benkemoun

2

เป็นวิธีปฏิบัติที่ดีในการบล็อกพอร์ตตัวติดตามทั่วไปเช่น: 6881-6889 2710 6969

แต่สิ่งนี้จะไม่ช่วยต่อต้านตัวติดตามที่ถูกโยงบน 80 พอร์ต (เช่น tpb.tracker.thepiratebay.org) ดังนั้นการบล็อกทั้งหมด แต่ 80,443,22 จะไม่ช่วย

ipp2pเป็นทางออกที่ดีที่สุดที่ฉันรู้ ดูส่วนเอกสาร / การใช้งาน

เกี่ยวกับ l7-filter ในความคิดเห็น bittorrent.pat พูดว่า:

รูปแบบนี้ได้รับการทดสอบและเชื่อว่าทำงานได้ดี อย่างไรก็ตามมันจะไม่ทำงานบนสตรีมบิตเรตต์ที่เข้ารหัสเนื่องจากเป็นไปไม่ได้ที่จะจับคู่ข้อมูลที่เข้ารหัสได้ดี

ในระบบ BSD pf สามารถใช้การกระทำได้ขึ้นอยู่กับจำนวนสถานะหรือการเชื่อมต่อต่อวินาทีดังนั้นคุณสามารถติดแท็กทราฟฟิกที่มีลักษณะเหมือน bittotent 'ทำให้เกิดการเชื่อมต่อที่รวดเร็ว อ่านคู่มือ iptables อาจเป็นไปได้เช่นกัน



1

ทางออกที่ง่ายคือการบล็อกพอร์ตที่ส่งออกทั้งหมดยกเว้นพอร์ตที่คุณต้องการอนุญาต

หรือคุณสามารถค้นหารายการพอร์ตที่น่าจะใช้สำหรับแอปพลิเคชัน P2P ทั่วไปและบล็อกพอร์ตเหล่านั้น Bittorrent มีแนวโน้มที่จะอนุญาตให้มีการดาวน์โหลดในจำนวน จำกัด หากคุณไม่ได้อัปโหลดดังนั้นคุณควรตรวจสอบให้แน่ใจว่าคุณไม่ยอมรับการเชื่อมต่อที่เข้ามา

คุณอาจพบว่ามีประโยชน์ในการตั้งค่าการบัญชี IP บางประเภทในเราเตอร์ของคุณตามพอร์ต TCP ที่ใช้แล้วค้นหาว่าพอร์ตใดที่ใช้งานมากที่สุด IPTraf เป็นเครื่องมือที่มีประโยชน์สำหรับตรวจสอบสิ่งนี้

ฉันควรเตือนคุณว่าคุณจะไม่หยุดทุกอย่าง ผู้คนมีความคิดสร้างสรรค์และจะหาวิธีแก้ไขข้อ จำกัด ใด ๆ ที่คุณมี ไฟร์วอลล์ส่วนใหญ่จะหยุดผู้ใช้ชั่วคราวซึ่งอาจเพียงพอ


1

คุณไม่สามารถบล็อก P2P ได้อย่างสมบูรณ์ยกเว้นว่าคุณจะอนุญาตพอร์ต TCP "ดี" 80, 443, 22 ... และแม้กระทั่งนั่นก็เพียงพอแล้วสำหรับประเภทคอมพิวเตอร์ที่มี VPN และสิ่งอื่นที่คล้ายคลึงกัน


P2P ทำงานโดยใช้ HTTP และ HTTPS พอร์ตโดยไม่มีปัญหาและการกำหนดค่ามาก
Kazimieras Aliulis

softly.lt เรียกว่ามันอย่างเต็มที่ ในช่วงไม่กี่ปีที่ผ่านมาแอพพลิเคชั่น p2p จำนวนมากขึ้นกำลังเคลื่อนเข้าหาพอร์ต 80 (มักจะเข้ารหัส) หรือจะสแกนพอร์ตที่กำลังมองหาที่เปิดอยู่ Application layer snooping (รูปแบบเฉพาะของการตรวจสอบแพ็คเก็ตลึก) จะจับการใช้งานโดยตรง แต่ไม่จำเป็นว่าจะต้องทำการรับส่งข้อมูลหรือไม่
Scott Pack

1
@packs: ไคลเอนต์ BitTorrent มากขึ้นเสนอการเข้ารหัสเต็มรูปแบบและแม้แต่ลวงตาเป็นโปรโตคอลอื่นเนื่องจาก ISP ทำการตรวจสอบแพ็คเก็ต
Zan Lynx

@grawity - แน่นอน แต่พวกเขาจะต้องเป็นผู้ใช้ขั้นสูงที่รู้วิธี VPN + พร็อกซีและคนประเภทนั้นอาจฉลาดพอที่จะไม่ใช้ Torrent ในที่ทำงาน
djangofan

@packs - ใช่แล้ว ISP มีการแพ็คเก็ตแบบ inpspection แต่ถ้าพวกเขาเปิดใช้งานการเข้ารหัส uTorrent คุณจะไม่สามารถบอกได้ว่าทราฟฟิกนั้นมีอะไรยกเว้นว่าพวกเขามีการเชื่อมต่อจำนวนมากเปิดอยู่ สำหรับสิ่งที่พวกเขารู้คุณอาจกำลังเล่น Diablo 3
djangofan

1

bittorrent และ p2p ส่วนใหญ่ในขณะนี้วันนี้ค่อนข้างชัดเจน แทนที่จะบล็อกการรับส่งข้อมูลให้ใช้กฎ QOS เพื่อให้ลูกค้าที่อดอยากที่ใช้แบนด์วิดท์จำนวนมากหรือทราฟฟิกปริมาณ p2p ช้าลงจนเหลือศูนย์เป็นระยะเวลา มันจะไม่บล็อกโพรโทคอล แต่มันจะขัดขวาง p2p'ers ที่ช้าดังนั้นจึงไม่คุ้มค่าที่จะทำ

อย่าลืมว่าปริมาณการใช้งาน torrent ทั้งหมดนั้นไม่ดี แต่บางอย่างก็ดี! :-)


1

ใช้กฎการส่งต่อ iptables เหล่านี้เพื่อปล่อยการเพาะบิตและการค้นพบเพื่อน พวกเขาทำงานให้ฉัน

#Block Torrent
iptables -A FORWARD -m string --algo bm --string "BitTorrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "BitTorrent protocol" -j DROP
iptables -A FORWARD -m string --algo bm --string "peer_id=" -j DROP
iptables -A FORWARD -m string --algo bm --string ".torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce.php?passkey=" -j DROP
iptables -A FORWARD -m string --algo bm --string "torrent" -j DROP
iptables -A FORWARD -m string --algo bm --string "announce" -j DROP
iptables -A FORWARD -m string --algo bm --string "info_hash" -j DROP

กฎในการดำเนินการตีเคาน์เตอร์เพิ่มขึ้นอย่างมาก

# iptables -vL -n

Chain FORWARD (policy ACCEPT 16403 packets, 6709K bytes)
 pkts bytes target     prot opt in     out     source               destination
    8   928 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "BitTorrent protocol" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "peer_id=" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  ".torrent" ALGO name bm TO 65535
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce.php?passkey=" ALGO name bm TO 65535
  582 52262 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "torrent" ALGO name bm TO 65535
   10  1370 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "announce" ALGO name bm TO 65535
   31  4150 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            STRING match  "info_hash" ALGO name bm TO 65535

ขอบคุณสำหรับการแบ่งปัน. ตัวกรองทำงานอย่างไร หากBitTorrentพบสตริงใน URL สตริงนั้นจะหายไป? นี่เป็นเพียงเพื่อป้องกันการดาวน์โหลดไฟล์ torrent เริ่มต้น แต่เมื่อไฟล์ torrent ถูกดาวน์โหลดไปแล้วสิ่งนี้จะไม่ป้องกันทราฟฟิกของ BitTorrent ใช่ไหม?
Houman

0

โปรแกรมช่องสัญญาณ SSL ยอดนิยมเช่น Ultrasurf สามารถให้ผู้ใช้ข้ามไฟร์วอลล์ของคุณได้อย่างง่ายดาย ในการบล็อกทราฟฟิกบิตเข้ารหัสคุณจะต้องใช้อุปกรณ์ UTM พิเศษที่สามารถตรวจสอบและบล็อกอุโมงค์ที่เข้ารหัสผ่าน http (s) ฉันรู้เพียงเกี่ยวกับสิ่งที่สามารถทำได้ - แอสทาโร่ แต่ควรมีมากกว่านี้


0

คุณสามารถใช้ ip2p ตามที่กล่าวไว้ก่อนหน้า มันจะไม่ปิดกั้นสิ่งต่าง ๆ อย่างสมบูรณ์อย่างไรก็ตาม เป็นการดีที่คุณควรจะปิดไฟทุกพอร์ตที่คุณไม่ได้ใช้เป็นพิเศษและใช้ ip2p ไม่ใช่ทางออกที่สมบูรณ์แบบ แต่สิ่งที่ดีที่สุดที่คุณน่าจะได้รับ


0

คุณไม่สามารถใช้การบล็อกพอร์ตโดยตรง มีทางเลือกเล็กน้อย ตัวกรอง Layer7 นั้นช้าไม่น่าเชื่อถือและความรู้ของฉันก็ไม่ได้รับการดูแลรักษาอีกต่อไป

IPP2P ก็โอเค แต่ถูกแทนที่ด้วย OpenDPI ซึ่งตอนนี้ถูกยกเลิกโดยผู้สนับสนุน ipoque (ผู้ขาย PACE, เทียบเท่ากับการค้า) nDPI ดูเหมือนจะเป็นข้อสรุปเชิงตรรกะของเส้นทางเล็ก ๆ นี้: http://www.ntop.org/products/ ndpi /

ที่ง่ายที่สุดและมีประสิทธิภาพอย่างเป็นธรรมเป็นส่วนขยายของข้อเสนอแนะของ David Pashley บล็อกพอร์ตทั้งหมดและอนุญาตเฉพาะสิ่งที่คุณต้องการ - และขยายบริการนี้โดยการจัดหาบริการเหล่านั้นที่คุณต้องการเช่นเว็บพร็อกซี่และอาจเป็นเซิร์ฟเวอร์จดหมายภายในที่อนุญาตพอร์ต 25 แต่ไคลเอนต์พูดคุยกับเซิร์ฟเวอร์ภายในเท่านั้น ด้วยวิธีนี้คุณสามารถมีไคลเอนต์ที่ไม่จำเป็นต้องเปิดพอร์ตบนไฟร์วอลล์เลย สิ่งนี้ควรใช้งานได้ แต่อาจเริ่มลดลงถึงบิตหากคุณต้องการใช้แอปที่ซับซ้อนและ / หรือแอปที่เขียนไม่ดีซึ่งต้องการการเข้าถึงโดยตรง


0

ด้านล่างเป็นชุดกฎ iptables ของฉัน งานนี้มีเสน่ห์เหมือนกัน ฉันสร้างพร็อกซีการสกัดกั้นแบบโปร่งใส https และส่งทราฟฟิกทั้งหมดผ่านพร็อกซีเซิร์ฟเวอร์นั้น

ใช้กฎ iptables นี้ฉันสามารถควบคุมเครือข่าย

  • 2086, 2087, 2095 พอร์ตเปิดเพราะเราใช้ WHM cpanel และ cpanel เว็บเมล
  • 8080 สำหรับเว็บเซิร์ฟเวอร์เพิ่มเติม
  • 192.168.2.0 เป็นเครือข่ายท้องถิ่น

กฎ IPTables:

#Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*nat
:PREROUTING ACCEPT [470:38063]
:POSTROUTING ACCEPT [9:651]
:OUTPUT ACCEPT [1456:91962]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.1:3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.2.1:3127
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3127
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
# Generated by iptables-save v1.4.8 on Tue Mar 10 15:03:01 2015
*filter
:INPUT ACCEPT [2106:729397]
:FORWARD ACCEPT [94:13475]
:OUTPUT ACCEPT [3252:998944]
-A INPUT -p tcp -m tcp --dport 3127 -j ACCEPT
-A FORWARD -m string --string "BitTorrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "BitTorrent protocol" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "peer_id=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string ".torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce.php?passkey=" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "torrent" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "info_hash" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "get_peers" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "announce_peer" --algo bm --to 65535 -j DROP
-A FORWARD -m string --string "find_node" --algo bm --to 65535 -j DROP
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 8080 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2086 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2087 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 2095 -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 192.168.2.0/24 -p udp -m udp --sport 1024:65535 --dport 1024:65535 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Tue Mar 10 15:03:01 2015
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.