Назад | Перейти на главную страницу

CSF не добавляет IP-адреса для запрета файла в качестве cron во время высоких нагрузок

Каждую минуту я запускаю 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, в противном случае спите и повторите попытку позже, пока нагрузка не станет достаточно низкой.