在高负载期间,CSF 不会添加 IP 来拒绝将文件作为 cron

在高负载期间,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 添加到防火墙拒绝文件中。命令是

脑脊液

这会将 IP 添加到 cfs.deny 文件中。我经常在运行中使用它。嵌入到此脚本中后,它不起作用。

我的直觉是,当脚本被触发(+200)时,在高负载期间服务器负载实在太高,并且不知何故命令从未执行或所需的文件操作没有发生。

我的下一步是在脚本完成并且负载下降后添加 IP。看看这是否有所作为。

我预计 CSF 命令行操作将在高负载期间排队。

答案1

您可以尝试运行csf使用完整路径运行该命令。/usr/sbin/csf

据我所知,csf 在运行时不实现任何类型的排队csf -d因此快速阻止太多 IP 会导致负载。

您可以尝试直接将 IP 添加到/etc/csf/csf.deny文件中(每行一个 IP,IP 后可选添加注释),然后使用以下命令重新启动 csfcsf -r

我不确定这是否会减少对负载的影响。无论如何,当您阻止过多 IP 时,无论您使用哪种方法,都会降低系统速度(反正都是 iptables)。

您可以检查脚本,以便如果负载低于阈值,则发出 csf 重新启动以加载新的csf.deny,否则休眠并稍后重试,直到负载足够低。

相关内容