帮助编写服务器脚本以禁止列表中的 IP

帮助编写服务器脚本以禁止列表中的 IP

我有一个 VPS,用作 openvpn 和 web 服务器。出于某种原因,我的 apache 日志文件中充满了数千个这样的黑客攻击尝试:

“POST /xmlrpc.php HTTP/1.0” 404 395

这些攻击尝试占据了我 90% 的日志。我认为他们正在寻找 WordPress 漏洞。显然他们没有成功(我的服务器上甚至没有 Wordpress),但这很烦人,而且可能还会消耗资源。我正在尝试编写一个 bash 脚本来执行以下操作:

  1. 搜索 Apache 日志并获取有问题的 IP(即使他们尝试一次),
  2. 将它们排序到列表中,每个唯一的 IP 占一行,
  3. 然后使用 IP 表规则阻止它们。

我是 Bash 新手,到目前为止,我的脚本除了步骤 3 之外什么都做。我可以手动阻止 IP,但这很繁琐,而且这是 Linux,它完全有能力为我做到这一点。我还希望脚本是可自定义的,以便我(或任何其他想要使用它的人)可以更改变量以适应我/他们将来可能遇到的任何情况。以下是迄今为止的脚本:

#!/bin/bash
##IP LIST GENERATOR
##Author Chev Young
##Script to search Apache logs and list IP's based on custom filters
##
##Define our variables:
DIRECT=~/Script ##Location of script&where to put results/temp files
LOGFILE=/var/log/apache2/access.log ## Logfile to search for offenders
TEMPLIST=xml_temp ## Temporary file name
IP_LIST=ipstoban ## Name of results file
FILTER1=xmlrpc ## What are we looking for? (Requests we want to ban)
cd $DIRECT
if [ ! -f $TEMPLIST ];then touch $TEMPLIST ##Create temp file
fi
cat $LOGFILE | grep $FILTER1 >> $DIRECT/$TEMPLIST ## Only interested in the IP's, so:
sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' -e t -e d $DIRECT/$TEMPLIST | sort | uniq > $DIRECT/$IP_LIST
rm $TEMPLIST ## Clean temp file
echo "Done. Results located at $DIRECT/$IP_LIST"

因此我需要脚本的下一部分的帮助,该部分应该禁止 IP(传入和传出)出现在生成的 $IP_LIST 文件中。我不在乎它是直接使用 UFW 还是 IPTables,只要它禁止 IP 即可。我可能会将其作为 cron 任务运行。我遇到的问题是理解如何使用结果文件的行作为单独的变量来执行类似以下操作:

ufw 拒绝 $IP1 $IP2 $IP3 等

有什么想法吗?谢谢。

答案1

如果您正确安装了 fail2ban,则上面的脚本就没必要了。一旦攻击者再次尝试 n 次,他们就会被禁止,时间长度由您在配置中设置。

相关内容