Каждую минуту я запускаю cron, чтобы предотвратить атаки методом перебора.
awk '{print $2}' < ipkill.txt | while read ip; do
#query geographical info IP address
curl -o country.txt ipinfo.io/$ip
#parse the JSON result pull the country
country=$(cat country.txt | jq ".country")
#echo $country
#Get country & null-route IPs and quickstart the firewall
if [ $country != '"US"' ] && [ $country != 'null' ] && [ $country != '"JP"' ] && [ $country != '"CA"' ]; then
msg=" address blocked: "
echo $country$msg$ip >> blocked.txt
#below command disabled
#iptables -I INPUT -s $ip -j DROP
#add IP to CSF rules
csf -d $ip
#kill all associated processes from offending IP
process=`netstat -tuapn | grep $ip | awk {'print $7}' | awk -F '/' {'print $1'} | uniq`
for hacker in $process
do
kill $hacker
done
#blackhole IP
route add $ip gw 127.0.0.1 lo
echo $(date) " $ip null-routed and corresponding process killed."
load=`cat /proc/loadavg | awk '{print $1}'`
echo $(date) ' Load is now: '$load
fi
#csf -r
csf -q
done
Что работает довольно хорошо. (ограничить количество запросов к ipinfo.io до 10 000)
Основная проблема заключается в том, что CSF не добавляет IP-адреса в файл запрета межсетевого экрана. Команда
csf - d
Что добавляет IP в файл cfs.deny. Я использую его регулярно на лету. Встроенный в этот скрипт не работает.
Я догадываюсь, что загрузка сервера просто слишком высока в периоды высокой нагрузки, когда запускается скрипт (+200), и почему-то команда никогда не выполняется или требуемая файловая операция не выполняется.
Мой следующий шаг - добавить IP-адреса после завершения скрипта и падения нагрузки. Посмотрим, имеет ли это значение.
Я ожидал, что операции командной строки CSF будут помещены в очередь во время высоких нагрузок.
Вы можете попробовать запустить csf
команда с полным путем. /usr/sbin/csf
Насколько я знаю, csf не реализует никаких очередей при запуске csf -d
поэтому очень быстрая блокировка слишком большого количества IP-адресов вызовет нагрузку.
Вы можете попробовать добавить IP-адреса прямо в /etc/csf/csf.deny
файл (по одному IP-адресу на строку с дополнительным комментарием после IP-адреса), а затем перезапустите csf с csf -r
Я не уверен, что это меньше влияет на нагрузку. В любом случае, когда вы блокируете слишком много IP-адресов, это замедляет работу вашей системы независимо от используемого вами метода (в любом случае это все iptables).
Вы можете проверить свой скрипт, чтобы, если нагрузка ниже порогового значения, выполнить перезапуск csf для загрузки нового csf.deny
, в противном случае спите и повторите попытку позже, пока нагрузка не станет достаточно низкой.