iptables บนโหนด exit ของ tor


9

ฉันต้องการเรียกใช้เราเตอร์Torแบบเปิด

นโยบายทางออกของฉันจะคล้ายกับReducedExitPolicy

แต่ฉันต้องการทำให้เครือข่ายทอร์ใช้ทรัพยากรของฉันในทางที่ผิด

กรณีที่ฉันต้องการป้องกันไม่ให้ลูกค้าทำผ่าน Tor:

  • การตอกหนึ่งไซต์ด้วยแพ็คเก็ตจำนวนมาก
  • อุกกาบาต aggresive ของบล็อก IP ทั้งหมด

กรณีที่ฉันไม่ต้องการป้องกันไม่ให้ลูกค้าทำผ่าน Tor:

  • อัปโหลดไฟล์ภาพ hudreds สองสามอันไปยังคลาวด์
  • การขุดทอร์เรนต์

คำถามของฉันคือสามารถทำสิ่งนี้ได้ทั้งหมดและอย่างไร

ความคิดแรกของฉันคือไฟร์วอลล์ (Linux / iptables หรือ * BSD / ipfw / pf) - แต่นี่อาจจะไร้ประโยชน์เนื่องจากคุณสมบัติโดยธรรมชาติของเราเตอร์ Onion

มีการพัฒนาทีม torproject อย่างต่อเนื่องในหัวข้อนี้หรือไม่?

ฉันยังขอคำแนะนำทั่วไปเกี่ยวกับการรักษาความปลอดภัยของโหนดทางออก Tor

อัปเดต (ก.ย. 2555)

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

วิธีที่ดีที่สุดที่คุณสามารถทำได้เพื่อหยุดยั้งผู้คนจากการใช้งานโหนดการใช้งานในทางที่ผิดใน DDOS คือการตรวจจับแพ็คเก็ตบ่อยครั้งที่ส่งไปยัง IP เดียว

ขีด จำกัด "บ่อยมาก" ขึ้นอยู่กับแบนด์วิดท์โหนดทั้งหมด ... หากผิดจะมีผลบวกปลอมบล็อกการรับส่งข้อมูลที่ถูกต้องตามกฎหมายของแอป TCP แบบเรียลไทม์และการรับส่งข้อมูลที่มาจากไคลเอนต์จำนวนมากไปยังปลายทางเดียว

อัปเดต (ธันวาคม 2014)

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

เพื่อหลีกเลี่ยงการปิดบริการฉันต้องใช้ชุดiptablesกฎต่อไปนี้( ONEWเป็นเชนสำหรับแพ็กเก็ต TCP SYN (aka ใหม่) ขาออก:

ฉันไม่แน่ใจว่ามันจะพอเพียง แต่ที่นี่คือ:

-A ONEW -o lo -j ACCEPT
-A ONEW -p udp --dport 53 -m limit --limit 2/sec --limit-burst 5 -j ACCEPT
-A ONEW -m hashlimit --hashlimit-upto 1/second --hashlimit-mode dstip --hashlimit-dstmask 24 --hashlimit-name ONEW -j ACCEPT
-A ONEW -m limit --limit 1/sec -j LOG --log-prefix "REJECTED: "
-A ONEW -j REJECT --reject-with icmp-admin-prohibited

คำตอบ:


2

โปรดทราบว่า:

  • ลูกค้า Tor สลับวงจรเสมือนทุก ๆ 10 นาทีหรือมากกว่านั้นเป็นความเข้าใจปัจจุบันของฉัน ซึ่งหมายความว่า IP ต้นทางเปลี่ยนไปตามกรอบเวลานั้น คุณไม่น่าจะป้องกันพฤติกรรมใด ๆ ที่คุณคิดว่าเป็นอันตรายได้นานกว่านั้น

  • โปรดทราบว่าความจริงที่ว่า Tor มีเพียงการรับส่งข้อมูล TCP และไม่ใช่โปรโตคอลอื่น ๆ

iptablesสามารถให้คุณจัดการการเชื่อมต่อ TCP ขาออกใหม่แตกต่างจากการเชื่อมต่อที่มีอยู่เดิม สิ่งใดก็ตามที่ESTABLISHED,RELATEDควรเป็นACCEPTEDหรือวางผ่านสายโซ่ "การเชื่อมต่อ TCP ที่มีอยู่" และ TCP ขาออกที่ไม่ได้รับการตรวจพบอาจมีอัตรา จำกัด การรับส่งข้อมูล Tor ใด ๆ ควรเป็นไปตามนี้

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

ตามหลักแล้วอย่ารันอะไรบนกล่อง Tor ของคุณยกเว้น:

  • อย่างน้อยคุณอาจมี SSH อัพวางบนพอร์ตอื่นที่ไม่ใช่ 22
  • คุณอาจต้องการเรียกใช้เว็บเซิร์ฟเวอร์อย่างง่ายเพื่อแสดงหน้านี้ mini-httpdอินสแตนซ์chroot'ed ควรทำอย่างไร inetdอย่าใช้

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


1

มันจะยากกว่าปกติเพื่อป้องกันการโจมตีเหล่านี้เนื่องจาก IP ต้นทางไม่คงที่ อย่างไรก็ตามตามความรู้ของฉันเส้นทางในทอร์จะเปลี่ยนไปทุก ๆ สองสามนาทีหรือมากกว่านั้น

ดังนั้นคุณยังคงสามารถปรับใช้กฎข้อ จำกัด / กรองมาตรฐานบางอย่าง แต่มีเกณฑ์ที่สูงกว่าเนื่องจากคุณต้องสมมติว่ามีเครือข่ายทั้งหมดที่อยู่เบื้องหลัง IP ต้นทางของคุณ

คุณสามารถกรอง:

  • แพ็คเก็ต / สแกน / สแกนลายนิ้วมือที่แย่หรือทั่วไป (แฟล็ก TCP / IP ที่ไม่ดี, XMAS, ICMP ส่วนใหญ่ประเภทอื่น ๆ )
  • แพ็กเก็ต INVALID ที่ไม่เหมาะสมกับการเชื่อมต่อต่อเนื่องหรือใหม่ (สถานะ -m)
  • การเชื่อมต่อใหม่เริ่มต้นที่ขีด จำกัด ที่ค่อนข้างสูง

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

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

นอกจากนี้ยังถามเกี่ยวกับรายการส่งเมลของ Tor คุณอาจไม่ใช่คนแรกที่คิดเช่นนั้น: https://lists.torproject.org/cgi-bin/mailman/listinfo


1

ก่อนอื่นฉันจะไม่แนะนำ iptables เพื่อแก้ปัญหาทั้งหมดนี้โดยปกติแล้วโหนดทางออกในอุดมคติจะโหลดทราฟฟิกแบบ balace แม้ว่า VPN tunnels เพียงไม่กี่ตัวที่จะคอยจับตาดู ISP และแพ็กเก็ตปลายทางที่แท้จริงและ / หรือใช้พร็อกซีแคช ไปยังเนื้อหาสแตติกที่ได้รับความนิยมอย่างน้อย ... ในขณะที่มองไปที่ตัวเลือกเหล่านี้นี่คือการช่วยเหลือวงดนตรีสำหรับปัญหาการร้องเรียนการละเมิด;

แหล่งข้อมูลที่ใช้

http://www.ossramblings.com/using_iptables_rate_limiting_to_prevent_portscans

http://blog.nintechnet.com/how-to-block-w00tw00t-at-isc-sans-dfind-and-other-web-vulnerability-scanners/

การรวมลิงก์ซอร์สทั้งสองเข้ากับกฎที่สามารถใช้เพื่อกำจัดบ็อตที่พยายามใช้โหนดทางออก Tor ของคุณสำหรับการสแกนพอร์ต หมายเหตุสิ่งนี้อาจทำให้แฮ็กเกอร์ที่ใช้โหนดทางออกของคุณไม่พอใจเนื่องจากกฎเหล่านี้ทำให้เกิดแฮงค์เวลา nmap

#!/bin/bash
## Network interface used by Tor exit daemon
_tor_iface="eth1"
## Ports that Tor exit daemon binds to, maybe comma or space sepperated.
_tor_ports="9050,9051"
## Time to ban connections out in secconds, default equates to 10 minutes, same as default Tor cercut.
_ban_time="600"
## How long to monitor conections in seconds, default equates to 10 minutes.
_outgoing_tcp_update_seconds="600"
## How many new connections can be placed to a server in aloted update time limits. May nead to increes this depending on exit node usage and remote servers usages.
_outgoing_tcp_hitcount="8"
## How long to monitor connections for in minuets, default is 15 minutes but could be lessoned.
_outgoing_tcp_burst_minute="15"
## Hom many connections to accept untill un-matched
_outgoing_tcp_burst_limit="1000"

iptables -N out_temp_ban -m comment --comment "Make custom chain for tracking ban time limits" || exit 1
iptables -A out_temp_ban -m recent --set --name temp_tcp_ban -p TCP -j DROP -m comment --comment "Ban any TCP packet coming to this chain" || exit 1

iptables -N out_vuln_scan -m comment --comment "Make custom chain for mitigating port scans originating from ${_tor_iface}" || exit 1
for _tor_port in ${_tor_ports//,/ }; do
    iptables -A out_vuln_scan -p TCP -o ${_tor_iface} --sport ${_tor_port} -m recent --name temp_tcp_ban --update --seconds ${_ban_time} -j DROP -m comment --comment "Update ban time if IP address is found in temp_tcp_ban list" || exit 1
    iptables -A out_vuln_scan -p TCP -o ${_tor_iface} --sport ${_tor_port} -m state --state NEW -m recent --set -m comment --comment "Monitor number of new conncetions to ${_server_iface}" || exit 1
    iptables -A out_vuln_scan -p TCP -o ${_tor_iface} --sport ${_tor_port} -m state --state NEW -m recent --update --seconds 30 --hitcout 10 -j out_temp_ban -m comment --comment "Ban address when to many new connections are attempted on ${_tor_iface}" || exit 1
done
iptables -A out_vuln_scan -j RETURN -m comment --comment "Return un-matched packets for further processing" || exit 1

## Add rules to accept/allow outbound packets
iptables -N tor_out -m comment --comment "Make custom chain for allowing Tor exit node services" || exit 1
for _tor_port in ${_tor_ports//,/ }; do
    iptables -A tor_out -p TCP -o ${_tor_iface} --sport ${_tor_port} -m state --state NEW -m recent --set --name limit_${_tor_port} -m comment --comment "Track out-going tcp connections from port ${_tor_port}" || exit 1
    iptables -A tor_out -p TCP -o ${_tor_iface} --sport ${_tor_port} -m state --state NEW -m recent --update --seconds ${_outgoing_tcp_update_seconds:-60} --hitcount ${_outgoing_tcp_hitcount:-8} --rttl --name limit_${_tor_port} -j LOG --log-prefix "TCP flooding port ${_tor_port}" -m comment --comment "Log atempts to flood port ${_tor_port} from your server" || exit 1
    iptables -A tor_out -p TCP -o ${_tor_iface} --sport ${_tor_port} -m state --state NEW -m recent --update --seconds ${_outgoing_tcp_update_seconds:-60} --hitcount ${_outgoing_tcp_hitcount:-8} --rttl --name limit_${_tor_port} -j DROP -m comment --comment "Drop attempts to flood port ${_tor_port} from your server" || exit 1
    iptables -A tor_out -p TCP -o ${_tor_iface} --sport ${_tor_port} -m limit --limit ${_outgoing_tcp_burst_minute:-15}/minute --limit-burst ${_outgoing_tcp_burst_limit:-1000} -j ACCEPT -m comment --comment "Accept with conditions new connections from port ${_tor_port} from your server" || exit 1
done
iptables -A tor_out -j RETURN -m comment ---comment "Reurn un-matched packets for further filtering or default polices to take effect." || exit 1
## Activate jumps from default output chain to new custom filtering chains
iptables -A OUTPUT -p TCP -o ${_tor_iface} -j out_vuln_scan -m comment --comment "Jump outbound packets through vulnerability scaning mitigation" || exit 1
iptables -A OUTPUT -p TCP -o ${_tor_iface} -j tor_out -m comment --comment "Jump outbound packets through conditional acceptance" || exit 1

วิ่งไปข้างหน้าด้วยbashเพื่อให้,เวทมนต์ preformed กับตัวแปรด้วยcammas เช่น;

user@host~# bash iptables_limit_tor.sh

นี่คือรายการของตัวแปรอีกครั้ง

_tor_iface="eth1"
_tor_ports="9050,9051"
_ban_time="600"
_outgoing_tcp_update_seconds="600"
_outgoing_tcp_hitcount="8"
_outgoing_tcp_burst_minute="15"
_outgoing_tcp_burst_limit="1000"

หมายเหตุ: คุณยังอาจต้องการที่จะเชื่อมต่อขาออกกรองใหม่สำหรับ-m state NEW ! --synชนิดของตลกธุรกิจใช้โดยบางบอทสำหรับการหาเซิร์ฟเวอร์โหว่นี่คือห่วงโซ่ตัวอย่างที่คุณอาจมี prefice ข้างต้นทั้งสองต่อการกรองพูดคุยในรูปแบบดังกล่าว

iptables -N out_bad_packets -m comment --comment "Make new chain for filtering malformed packets" || exit 1
iptables -A out_bad_packets -p TCP --fragment -j out_temp_ban -m comment --comment "Drop all fragmented packets" || exit 1
iptables -A out_bad_packets -p TCP -m state --state INVALID -j out_temp_ban -m comment --comment "Drop all invalid packets" || exit 1
iptables -A out_bad_packets -p TCP ! --syn -m state --state NEW -j out_temp_ban -m comment --comment "Drop new non-syn packets" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL NONE -j out_temp_ban -m comment --comment "Drop NULL scan" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL ALL -j out_temp_ban -m comment --comment "Drop XMAS scan"|| exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL FIN,URG,PSH -j out_temp_ban -m comment --comment "Drop stealth scan 1" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL SYN,RST,ACK,FIN,URG -j out_temp_ban -m comment --comment "Drop pscan 1"|| exit 1
iptables -A out_bad_packets -p TCP --tcp-flags SYN,FIN SYN,FIN -j out_temp_ban -m comment --comment "Drop pscan 2" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags FIN,RST FIN,RST -j out_temp_ban -m comment --comment "Drop pscan 3" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags SYN,RST SYN,RST -j out_temp_ban -m comment --comment "Drop SYN-RST scan" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ACK,URG URG -j out_temp_ban -m comment --comment "Drop URG scans" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL SYN,FIN -j out_temp_ban -m comment --comment "Drop SYNFIN scan" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL URG,PSH,FIN -j out_temp_ban -m comment --comment "Drop nmap Xmas scan" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL FIN -j out_temp_ban -m comment --comment "Drop FIN scan" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags ALL URG,PSH,SYN,FIN -j out_temp_ban -m comment --comment "Drop nmap-id scan" || exit 1
iptables -A out_bad_packets -p TCP --tcp-flags RST RST -o ${_tor_iface} --sport ${_tor_port} -m limit --limit 2/second --limit-burst 3 -j out_temp_ban -m comment --comment "Mitigate Smurf attacks from excesive RST packets"
iptables -A out_bad_packets -p TCP --tcp-flags RST RST -o ${_tor_iface} --sport ${_tor_port} -m limit --limit 2/second --limit-burst 2 -j RETURN -m comment --comment "Ban Smurf attacks using excesive RST packets"
iptables -A out_bad_packets -j RETURN -m comment --comment "Return un-matched packets for further processing." || exit 1

อย่างไรก็ตามเชนข้างต้นจะมีข้อ จำกัด อย่างมากเนื่องจากแพ็คเก็ตที่ตรงกันใด ๆ จะมีการแบนไอพี (อาจเปลี่ยน-j out_temp_banเป็น-j DROPหรือ-j REJECTสำหรับการทดสอบ) เป็นเวลาหลายวินาทีอย่างไรก็ตามถูกเลือกในกฎของเชนนั้น ชุดของกฎนี้อาจทำให้เกิดข้อผิดพลาดในระยะยาวเมื่อแอปที่เขียนโค้ดไม่ดีบนไคลเอ็นต์สิ้นสุดการเชื่อมต่อใหม่ผ่าน Tor Cercut ใหม่

~~~~~

ซอฟแวร์ที่ต้องพิจารณาสำหรับปริมาณการใช้งานที่เพิ่มขึ้นตรวจสอบfirejailสำหรับ Linux แหล่งที่มาอยู่บน Github และ Source forge และสามารถพบ man man ได้ที่โฮมเพจเก่าโดเมนย่อย wordpress และ DigitalOcean มีแนวทางสำหรับ Nginx ด้วย PHP และ Firejail ที่ ด้วยการดัดแปลงเพียงเล็กน้อยจะช่วยให้คุณมีกำลังใจมากขึ้นว่าเครือข่ายควรจะถูก จำกัด ปริมาณ มีเครื่องมืออื่น ๆ เช่นKVMกันที่สามารถใช้เพื่อให้บริการ spiciffic ภายในขอบเขตการดำเนินงานเพื่อให้ร้านค้าจัดเรียงเพื่อค้นหาสิ่งที่ดีที่สุดสำหรับระบบของคุณ

อีกตัวเลือกหนึ่งคือการทำงานfail2banในลักษณะที่เมื่อผู้ดูแลระบบบ้าจัดการการเชื่อมต่อ http หรือ ssl ไปยัง IP ของคุณว่ามีการเพิ่มกฎให้ลดลง-m state --state NEWการเชื่อมต่อกับผู้ที่ร้องขอหน้าประกาศการออกของคุณ ถ้ารวมกับขีด จำกัด เวลายกเลิกการแบนอาจทำให้เซิร์ฟเวอร์ระยะไกลหยุดพักในขณะที่ผู้ดูแลระบบ sys mutters เกี่ยวกับบันทึกปัญหา ;-) อย่างไรก็ตามนั่นอยู่นอกเหนือขอบเขตของคำตอบปัจจุบันนี้และขึ้นอยู่กับซอฟต์แวร์ที่คุณใช้ให้บริการ หน้าประกาศออก; บอกใบ้ทั้ง nginx และ apache จะให้บริการ vhost หรือบล็อกเซิร์ฟเวอร์แรกในการกำหนดค่าของคุณหากมีการร้องขอ URL ตอนนี้ หากใช้อย่างอื่นนอกเหนือจาก apache หรือ nginx คุณต้องปรึกษา man man แต่สำหรับฉันมันเป็นเรื่องง่ายเหมือนการตั้งค่า vhost แรกเพื่อเข้าสู่ไฟล์อื่นและมี fail2ban เพิ่ม IP ใด ๆ จากบันทึกนั้นไปยังรายการชั่วคราว ; วิธีนี้ยังใช้งานได้ดีสำหรับการแบนบอทบนเซิร์ฟเวอร์สาธารณะเพราะโดยปกติจะใช้ที่อยู่ IP และไม่ได้ให้ผลลัพธ์คำขอโดเมนในเซิร์ฟเวอร์ที่ให้บริการกับดักบอท

ฉันยันดาบที่ใช้นโยบาย จำกัด การออก Tor (ดูเหมือนว่าคุณจัดการได้แล้ว) จากนั้นผลักดันทราฟฟิกผ่านช่องทาง VPN, คะแนนเครดิตพิเศษสำหรับการปรับสมดุลโหลดระหว่างอุโมงค์หลายช่อง เพราะสิ่งนี้จะทำให้การรับส่งข้อมูลของเครือข่ายของ Tor ลดลงและทำให้สายตาของ ISP ของคุณขุ่นมัวกับข้อเท็จจริงที่ว่าคุณกำลังใช้โหนดจบการทำงาน ... เว้นแต่พวกเขาต้องการยอมรับการดมกลิ่นและแยกการรับส่งข้อมูล VPN ของคุณ เนื่องจากกฎการรันที่ temp-ban หรืออนุญาตให้รีโมตโฮสต์ทำการห้ามตัวเองอาจนำไปสู่การละเมิดความเป็นส่วนตัวไปยังเครื่องลูกข่ายของโหนดซึ่งการผลักดันทราฟฟิกออกไปยัง VPN (หรือน้อย) จะช่วยรักษาความเป็นส่วนตัวของลูกค้า ISP จากการถูกไล่ล่าที่มีการร้องขอสำหรับบันทึกการเข้าชมเครือข่ายของคุณโดย capible รัฐบาลใด ๆ whois www.some.domainของการทำงาน

~~~~

การแก้ไข / ปรับปรุง

~~~~

ฉันเดินทางไปยังบันทึกย่อที่มีความสำคัญและดึงการกำหนดค่าสำหรับเซิร์ฟเวอร์สาธารณะที่ฉันใช้

นี่คือ fail2ban jail.localstansa

[apache-ipscan]
enabled  = true
port = http,https
filter = apache-ipscan
logpath = /var/log/apache*/*error_ip*
action = iptables-repeater[name=ipscan]
maxretry = 1

และนี่คือapache-ipscan.confไฟล์ตัวกรอง

[DEFAULT]
_apache_error_msg = \[[^]]*\] \[\S*:error\] \[pid \d+\] \[client <HOST>(:\d{1,5})?\]
[Definition]
failregex = \[client <HOST>\] client denied by server .*(?i)/.*
#^<HOST>.*GET*.*(?!)/.*
#   ^%(_apache_error_msg)s (AH0\d+: )?client denied by server configuration: (uri )?.*$
#            ^%(_apache_error_msg)s script '\S+' not found or unable to stat(, referer: \S+)?\s*$
ignoreregex = 
# DEV Notes: 
# the web server only responds to clients with a valid Host: 
# header. anyone who tries using IP only will get shunted into 
# the dummy-error.log and get a client-denied message
#
# the second regex catches folks with otherwise valid CGI paths but no good Host: header
#
# Author: Paul Heinlein

และนี่คือiptables-repeater.confไฟล์การกระทำ

# Fail2Ban configuration file
#
# Author: Phil Hagen <phil@identityvector.com>
# Author: Cyril Jaquier
# Modified by Yaroslav Halchenko for multiport banning and Lukas Camenzind for persistent banning
# Modified by S0AndS0 to combine features of previous Authors and Modders
#
[Definition]
# Option:  actionstart
# Notes.:  command executed once at the start of Fail2Ban.
# Values:  CMD
#
actionstart = iptables -N fail2ban-BADIPS-<name>
              iptables -A fail2ban-BADIPS-<name> -j RETURN
          iptables -I INPUT -j fail2ban-BADIPS-<name>
          ## Comment above line and uncomment bello line to use multiport and protocol in addition to named jails
          #iptables -I INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-BADIPS-<name>
          # set up from the static file
          #cat /etc/fail2ban/ip.blocklist.<name> |grep -v ^\s*#|awk '{print $1}' | while read IP; do iptables -I fail2ban-BADIPS-<name> 1 -s $IP -j DROP; done
          cat /etc/fail2ban/ip.blocklist.<name> |grep -v ^\s*#|awk '{print $1}' | while read IP; do iptables -I fail2ban-BADIPS-<name> 1 -d $IP -j DROP; done
          ## Comment above line and uncomment bellow line to check if there are blacklist files to load before attempting to load them
          # if [ -f /etc/fail2ban/ip.blacklist.<name> ]; then cat /etc/fail2ban/ip.blacklist.<name> | grep -e <name>$ | cut -d "," -s -f 1 | while read IP; do iptables -I fail2ban-BADIPS-<name> 1 -s $IP -j DROP; done; fi
# Option:  actionstop
# Notes.:  command executed once at the end of Fail2Ban
# Values:  CMD
#
actionstop = iptables -D INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-BADIPS-<name>
         iptables -F fail2ban-BADIPS-<name> 
         iptables -X fail2ban-BADIPS-<name>
# Option:  actioncheck
# Notes.:  command executed once before each actionban command
# Values:  CMD
#
#actioncheck = iptables -n -L INPUT | grep -q fail2ban-BADIPS-<name>
actioncheck = iptables -n -L OUTPUT | grep -q fail2ban-BADIPS-<name>
# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
#actionban = if ! iptables -C fail2ban-BADIPS-<name> -s <ip> -j DROP; then iptables -I fail2ban-BADIPS-<name> 1 -s <ip> -j DROP; fi
actionban = if ! iptables -C fail2ban-BADIPS-<name> -d <ip> -j DROP; then iptables -I fail2ban-BADIPS-<name> 1 -d <ip> -j DROP; fi
# Add offenders to local blacklist, if not already there
        if ! grep -Fxq '<ip>,<name>' /etc/fail2ban/ip.blocklist.<name>; then echo "<ip>,<name> # fail2ban/$( date '+%%Y-%%m-%%d %%T' ): auto-add for BadIP offender" >> /etc/fail2ban/ip.blocklist.<name>; fi
# Report offenders to badips.com
#        wget -q -O /dev/null www.badips.com/add/<name>/<ip>
# Option:  actionunban
# Notes.:  command executed when unbanning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          <time>  unix timestamp of the ban time
# Values:  CMD
#
#actionunban = iptables -D fail2ban-REPEAT-<name> -s <ip> -j DROP
actionunban = iptables -D fail2ban-REPEAT-<name> -d <ip> -j DROP
# Disabled clearing out entry from ip.blacklist (somehow happens after each stop of fail2ban)
#sed --in-place '/<ip>,<name>/d' /etc/fail2ban/ip.blacklist.<name>
[Init]
# Defaut name of the chain
# 
# Defaut name of the chain
name = BADIPS
# Option:  port
# Notes.:  specifies port to monitor
# Values:  [ NUM | STRING ]  Default:
# 
#port = ssh
# Option:  protocol
# Notes.:  internally used by config reader for interpolations.
# Values:  [ tcp | udp | icmp | all ] Default: tcp

หมายเหตุตัวกรองด้านบนได้รับการแก้ไขเพื่อปิดกั้นOUTPUTการกระทำเริ่ม / หยุด แต่คุณยังคงต้องการเพิ่มการกำหนดค่า-p TCP -m state --state NEWในแต่ละบรรทัดเพื่อให้มีการเชื่อมต่อขาออกใหม่เท่านั้นห้ามจากที่อยู่ IP ที่บันทึกไว้

สิ่งสุดท้ายคือการตั้งค่า Apache vHost ที่กำหนดเส้นทางผู้ที่ไม่ขอโดเมนไปยังการเข้าถึงข้อมูลเฉพาะและบันทึกข้อผิดพลาดและการตั้งค่าการอนุญาตการเข้าถึงที่ถูกปฏิเสธ vs การเข้าถึงที่ถูกปฏิเสธเสมอซึ่งมันเกิดข้อผิดพลาดเสมอ . สุดท้าย แต่ไม่ท้ายสุดคือการตั้งค่าหน้าข้อผิดพลาดสำหรับ Apache ให้เป็นการแจ้งเตือนการออกจากค่าเริ่มต้นจาก Tor เพื่อให้บริการแทน503หรือ404ข้อความธรรมดา หรือถ้าคุณเพิ่มบรรทัดสถานะลงในการกระทำของ iptables สำหรับ fail2ban คุณสามารถชี้ไปที่ไฟล์บันทึกเดียวกันที่ใช้โดยการแจ้งเตือนการออก ผลที่ได้คือเซิร์ฟเวอร์ของคุณจะไม่สามารถทำการเชื่อมต่อใหม่กับ IP ของเซิร์ฟเวอร์ที่ตรวจสอบที่อยู่ IP ของคุณ แต่การเชื่อมต่อที่สร้างขึ้นและที่เกี่ยวข้องจะยังคงได้รับอนุญาตเช่นพวกเขายังคงสามารถเรียกดูหน้าอื่น ๆ ของคุณได้ .


ยินดีมากที่สุดถ้าคุณชอบที่ฉันเพิ่งผลักสคริปต์ / บันทึกจำนวนมากไปที่GitHubซึ่งคุณอาจต้องการดู ฉันเริ่มโครงการนี้อย่างเป็นทางการในช่วงหนึ่งปีที่ผ่านมา แต่ตอนนี้สุขภาพเป็นปัญหาที่ฉันได้ทำให้เป็นสาธารณะสำหรับการแก้ไขข้อบกพร่องและเพิ่มคุณสมบัติในกรณีที่ฉันไม่สามารถทำได้ ที่และการกระทำ sertain นำ localy และ globaly โดยคนอื่น ๆ ได้encurgedฉันจะใช้ขาตั้งสำหรับการทำความเป็นส่วนตัวของสวิทช์ได้ง่ายขึ้น
S0AndS0

ผมเคยเขียนถึงโครงการอื่นและผลักดันมันGitHub สิ่งนี้มีวัตถุประสงค์เพื่อช่วยเหลือผู้ดูแลระบบเซิร์ฟเวอร์ในการปกป้องบันทึกของเซิร์ฟเวอร์โดยใช้การเข้ารหัสแบบไม่สมมาตรของ GnuPG ตราบใดที่โหนดทางออกของคุณหรือบริการที่ซ่อนไม่ได้เก็บคีย์ส่วนตัวที่เกี่ยวข้องโครงการข้างต้นควรป้องกันไม่ให้มีการบันทึกที่ผ่านมาที่อยู่ IP ของโหนดอื่น ๆ ที่เชื่อมต่อกับโหนดของคุณเอง
S0AndS0

0

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


0

ฉันมีทางออกที่ดีกว่า: เซิร์ฟเวอร์แคชปลาหมึก เซิร์ฟเวอร์แคชปลาหมึกสามารถใช้ได้กับการกำหนดค่าการกำหนดaclและคุณdenyหรือแต่ละaccept aclมันเป็นเรื่องที่น่าสนใจมากที่ทีมปลาหมึกได้กำหนดกฎในวิกิของพวกเขาที่คำถามของคุณพบว่ามี iptables,PFหรือคนอื่นไม่สามารถทำงานของคุณได้เพราะเพียงแค่ทำงานในเลเยอร์อื่น


ฉันไม่เห็นวิธีที่สมเหตุสมผลในการรวม Squid (ซึ่งฉันรู้และชื่นชอบ) เข้ากับ Tor ...
filiprem

Zebra routeลองกับ
PersianGulf

คุณหมายถึงการเปลี่ยนเส้นทางการจราจรของทอร์ออกซึ่งไปที่พอร์ต 80 และส่งผ่านปลาหมึกเพื่อเพิ่มการควบคุมบางอย่าง? วิธีนี้จะช่วยแก้ไขปัญหาเพียงเล็กน้อยเท่านั้น สาเหตุที่แท้จริงคือการป้องกันการละเมิด Tor สำหรับ DDOS ที่ใช้ IP
filiprem

คุณสามารถใช้การออกแบบเครือข่ายของคุณในสามชั้น: 1. ชั้นนอก 2. ชั้นกระบวนการ 3.user / server layer ====> มันจะทำให้ความปลอดภัยของคุณดีขึ้น
PersianGulf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.