本次实验要求为:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT。
因为监控频率为每5分钟一次,我们可以利用脚本+计划任务的形式来操作。
- 创建脚本
首先创建两个文件用于存储监控时的ip情况和禁掉的ip信息,接着创建脚本dos.sh。脚本中,ss -nt | awk -F" +|:" '/ESTAB/{print $6}' | sort | uniq -c 命令可以筛选出当前连接主机的Ip和连接数,我们将这些信息输入到dos.txt中,然后利用exec命令从dos.txt文件中读取信息;同时我们将单个ip连接次数和ip分别设定为变量$nums和$ip,逐行读取时,如果$nums达到100(大于等于用-ge),则将ip封禁,同时在dos_drop.txt写入$ip is dorpped(如下图)。
执行 chmod +x dos.sh 命令给予脚本执行权限,执行 bash dos.sh 命令查看效果,因为笔者这边实验的问题,所以暂时只有dos.txt文件中有记录(如下图)。
为了尽快看到效果,笔者这边先将连接数上限设定为3,执行后,dos_drop.txt文件中也有了记录(如下图)。
*所以上面的脚本中,最好加上“sleep 10”或者更长时间的限制,不然会一直将封禁的ip信息输入到dos_drop.txt文件中,可能会导致远程连接奔溃。
- 创建计划任务
计划任务的创建在上一周的作业中有提到,这里就不再细讲,执行 crontab -e 命令创建计划任务,不清楚的情况下,直接在上方写全PATH路径,因为是每5分钟执行一次,计划任务的第一个部分为*/5(如下图)。
到这一步,我们就可以让主机自己按照时间去查看ip连接情况,并将信息统计到对应的文件中查看。