linux , nginx: 封禁IP的办法 (自动化脚本封ip, 根据瞬时的请求总量,或者根据日志中某段时间的总量)
如果您怀疑其中一台服务器可能遭到了攻击,需要加以检查。怎么检查?我将向您介绍几个命令,可帮助您确定服务器是否遭到来自某个IP地址的分布式拒绝服务(DDoS)的攻击。这种攻击是一种协同的活动,使用一个或多个IP地址,企图破坏网站使其服务器无法访问。
不妨看看如何判断您的Linux服务器是否遭到了攻击。
您需要什么?
您唯一需要的是Linux实例和拥有sudo特权的用户。我将在Ubuntu Server 20.04上进行演示。
如何安装netstat?
我们将使用netstat工具来查明当前连接到您服务器的IP地址。想在Ubuntu上安装netstat,您实际上需要安装net-tools,如下所示:
sudo apt-get install net-tools -y
如果您使用CentOS或基于Red Hat的安装,netstat应该已安装上去。
如何检查服务器负载?
我们要做的第一件事是检查服务器负载。为此使用的命令将返回逻辑处理器(线程)的数量。在服务器上,这个数字应该相当低,但这取决于您运行的负载。您应该确保这个数字有个基准值,确保一切都OK。如果您怀疑出了情况,再次运行线程检查并进行比较。
要检查逻辑处理器的数量,执行该命令:
grep processor /proc/cpuinfo | wc -l
如果该数字远高于基准值,表明可能有问题。
比如在我的Pop!_OS桌面上,我有16个线程,但是在托管Nextcloud的Ubuntu服务器上,我只有两个线程。如果这些数字中的任何一个翻倍,表明我可能遭到了DDoS攻击。
如何检查网络负载?
接下来检查网络负载。您可以使用许多工具来执行此操作,不过我选择了nload。想安装nload,执行以下命令:
sudo apt-get install nload -y
在CentOS上,该命令将是:
sudo dnf install nload -y
要运行该工具,只需执行以下命令:
nload
您应该会看到一个很正常的入站和出站网络负载(图A)。
如果该负载大大超出您的预期,您可能遭到了攻击。
如何查明连接到您服务器的IP地址?
接下来要做的是查明连接到您服务器的IP地址。为此,我们将这样使用netstat:
netstat -ntu|awk '{print $5}'|cut -d: -f1 -s|sort|uniq -c|sort -nk1 -r
上述命令的输出将列出连接到服务器的每个IP地址以及每个IP地址的实例数。如您所见,有两个IP地址连接到我的服务器(图B)。
请确保仔细浏览该列表。如果看到一个IP地址含有大量实例(超过100个),这个地址是罪魁祸首的可能性很大。一旦确定了罪魁祸首,您可以使用以下命令禁止这个IP地址:
sudo route add ADDRESS reject
其中ADDRESS是可疑对象的IP地址。
查看IP限制状态:
iptables --list
这时,返回并重新检查线程、连接的IP地址和网络负载,看看是否已缓解了DDoS攻击。如果成功缓解,就要报告这个可疑的IP地址,可能还要完全禁止该地址访问您的网络。
如何确认自己受到DDOS攻击?
在系统上执行:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
执行后,将会显示服务器上所有的每个IP多少个连接数。
以下是我自己用VPS测试的结果:
1 192.168.21.246
1 192.168.21.36
1 192.168.21.71
1 192.204.26.65
1 192.204.26.73
1 205.209.180.55
1 Address
1 servers)
3 192.168.21.28
3 192.168.21.53
4 192.168.21.15
6 192.168.21.51
每个IP几个、十几个或几十个连接数都还算比较正常,如果像上面成百上千肯定就不正常了。