Pertama saya tidak akan menyarankan iptables untuk menyelesaikan semua ini, benar-benar keluar ideal Tor node akan memuat lalu lintas balace melalui beberapa terowongan VPN untuk menjaga mata dari paket dan tujuan ISP yang sebenarnya dan / atau menggunakan caching proxy untuk menjaga keluar permintaan ulangi untuk konten statis populer ke minimum ... sambil melihat ke opsi itu di sini adalah bantuan band untuk masalah pengaduan penyalahgunaan;
Sumber informasi yang digunakan
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/
Menggabungkan kedua tautan sumber ke dalam aturan yang dapat digunakan untuk menggagalkan bot yang mencoba menggunakan simpul keluar Tor Anda untuk pemindaian port. Catatan ini mungkin membuat peretas menggunakan simpul keluar Anda sangat tidak senang karena aturan ini menyebabkan nmap hang-time.
#!/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
Jalankan di atas dengan bash
agar sihir terbentuk pada variabel dengan ,
cammas yaitu;
user@host~# bash iptables_limit_tor.sh
Inilah daftar variabel lagi
_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"
Catatan Anda mungkin juga ingin memfilter koneksi keluar baru untuk -m state NEW ! --syn
jenis bisnis lucu yang digunakan oleh beberapa bot untuk menemukan server yang dapat dieksploitasi.
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
Namun, rantai di atas akan sangat ketat karena setiap paket yang cocok akan memiliki IP yang diblokir (mungkin berubah -j out_temp_ban
menjadi -j DROP
atau -j REJECT
untuk pengujian) selama beberapa detik yang dipilih dalam aturan rantai itu. Seperangkat aturan ini juga dapat menyebabkan faulse positif ketika aplikasi berkode buruk di ujung klien terhubung kembali melalui Tor cercut baru.
~~~~~
Perangkat lunak yang perlu dipertimbangkan untuk memilah lalu lintas lebih lanjut. Periksa firejail
Linux, sumbernya ada di Github dan Source menempa dan halaman manual dapat ditemukan di halaman rumah lama, sub domain wordpress, dan DigitalOcean memiliki panduan untuk Nginx dengan PHP dan Firejail yang dengan sedikit modifikasi bisa memberi Anda jauh lebih banyak hasutan ke mana jaringan harus diperketat kembali. Ada alat-alat lain seperti KVM
juga yang dapat digunakan untuk menjaga layanan spiciffic dalam batas-batas operasional jadi berbelanja di sekitar untuk menemukan salah satu yang paling cocok untuk sistem Anda.
Namun pilihan lain adalah untuk menjalankan fail2ban
sedemikian rupa sehingga ketika sys-admin mad menerima koneksi http atau ssl ke IP Anda bahwa aturan ditambahkan ke drop-m state --state NEW
koneksi ke mereka yang meminta halaman pemberitahuan keluar Anda. Ini jika digabungkan dengan batas waktu un-ban yang waras dapat membuat server jarak jauh istirahat sementara sys-admin mereka bergumam tentang polusi log ;-) Namun, itu berada di luar cakupan jawaban saat ini dan tergantung pada perangkat lunak apa yang Anda gunakan untuk melayani keluar dari halaman pemberitahuan; petunjuk nginx dan apache akan melayani blok vhost atau server pertama dalam konfigurasi Anda jika sekarang URL diminta. Jika menggunakan sesuatu yang lain selain apache atau nginx Anda akan ingin berkonsultasi dengan halaman manual tetapi bagi saya itu sesederhana mengatur vhost pertama untuk login ke file yang berbeda dan memiliki fail2ban menambahkan IP dari log itu ke daftar larangan sementara ; ini juga berfungsi baik untuk melarang bot di server publik karena mereka biasanya menggunakan alamat IP dan tidak memberikan hasil permintaan domain di server yang melayani jebakan bot,
Saya akan menggunakan twisted menjalankan kebijakan keluar Tor terbatas (sepertinya Anda punya yang ditangani) dan kemudian mendorong lalu lintas melalui terowongan VPN, poin kredit tambahan untuk menyeimbangkan beban antara terowongan multipule. Karena ini akan menyebabkan lebih sedikit gangguan pada lalu lintas jaringan Tor dan membuat mata ISP Anda menjadi kabur karena Anda menjalankan simpul keluar ... kecuali jika mereka mau mengakui mengendus dan memecah lalu lintas VPN Anda. Ini karena menjalankan aturan yang melarang atau mengizinkan host jarak jauh untuk melarang diri sendiri dapat menyebabkan pelanggaran privasi bagi klien simpul Anda di mana dengan mendorong lalu lintas keluar ke VPN (atau beberapa) akan membantu privasi klien Anda dan menjaga Anda ISP tidak diburu dengan permintaan log lalu lintas jaringan Anda oleh pemerintah manapun yang mampu menjalankannya whois www.some.domain
.
~~~~
Suntingan / Pembaruan
~~~~
Saya melakukan perjalanan ke catatan ekstensif saya dan menarik konfigurasi untuk server publik yang saya gunakan
Ini jail.local
stansa fail2ban
[apache-ipscan]
enabled = true
port = http,https
filter = apache-ipscan
logpath = /var/log/apache*/*error_ip*
action = iptables-repeater[name=ipscan]
maxretry = 1
Dan inilah apache-ipscan.conf
file filternya
[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
Dan ini iptables-repeater.conf
file tindakannya
# 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
Catatan filter di atas telah diedit untuk memblokir OUTPUT
tindakan start / stop tetapi Anda masih ingin menambahkan -p TCP -m state --state NEW
konfigurasi ke setiap baris untuk hanya memiliki koneksi keluar baru yang diblokir dari alamat IP yang dicatat.
Terakhir adalah menyiapkan konfigurasi Apache vHost yang mengarahkan mereka yang tidak meminta domain ke akses specifide dan log kesalahan dan mengatur akses yang ditolak vs ditolak sehingga selalu kesalahan, bahkan loopback seharusnya tidak dapat menarik halaman tanpa muncul kesalahan . Terakhir namun tidak kalah penting adalah mengatur halaman kesalahan untuk Apache ke pemberitahuan keluar default dari Tor sehingga yang disajikan bukan 503
atau404
pesan lembut. Atau jika Anda telah menambahkan baris status ke tindakan iptables untuk fail2ban, Anda bisa dengan mudah hanya menunjuk ke file log yang sama yang digunakan oleh pemberitahuan keluar Anda. Hasilnya adalah bahwa server Anda tidak akan dapat membuat koneksi baru ke IP server yang memeriksa alamat IP Anda tetapi koneksi yang terhubung dan masih akan diizinkan, yaitu mereka masih bisa menelusuri halaman lain Anda tetapi Anda tidak dapat menelusuri melalui mereka .