本文通过编写shell脚本,利用ipset(本文不涉及ipset安装)实现功能如下:
root用户最近登录失败的IP,如果登录失败次数达到允许的最大次数(15次)后,判定为入侵ip,将其加入ipset黑名单进行防御。
一、编写如下脚本,命名为:add_ipset_droplist.sh
-
#!/bin/bash
-
# Add bad ip to ipset list droplist.
-
#
-
# Define failed login times 定义某个ip下root登录允许的最大失败次数(这里设置的是最多15次):
-
Max_Failed_Logins=15
-
#
-
bad_ip_list=$(mktemp -t bad_ip.XXXXXX)
-
pam_tally2 --user | gawk '/root/{print $5}' > ${bad_ip_list}
-
BadIP=$(cat ${bad_ip_list})
-
#echo "The BadIP is: ${BadIP}"
-
-
# local login such as /dev/pts/0 is not in limit. 终端登录不作处理。
-
sed -n '/pts.[0-9]/w /tmp/ptsisok.nosee' ${bad_ip_list}
-
ptsisok=$(cat /tmp/ptsisok.nosee | wc -l)
-
if [ ${ptsisok} -gt 0 ]
-
then
-
rm -f /tmp/ptsisok.nosee
-
#echo "ptsisok is: ${ptsisok} "
-
BadIP=""
-
fi
-
# 删除建立的临时文件
-
if [ -e /tmp/ptsisok.nosee ]
-
then
-
rm -f /tmp/ptsisok.nosee
-
fi
-
rm -f $bad_ip_list
-
-
# Search lastest 8000 items from /var/log/secure 查看日志记录的最新8000条记录
-
Failed_Logins=$(tail -8000 /var/log/secure | grep "Failed password for root" | sed -n '/'${BadIP}'/p' | wc -l)
-
#echo "The Failed_Logins is: ${Failed_Logins}"
-
#
-
# 将入侵IP添加到ipset黑名单droplist
-
if [ ${Failed_Logins} -gt ${Max_Failed_Logins} ]
-
then
-
ipset add droplist ${BadIP} 2> /dev/null
-
service ipset save
-
fi
注意:以上脚本中,本机的ipset黑名单为:droplist,需将其替换为你自己的ipset黑名单。
二、将脚本移动到 /etc/rc.d/ 目录下,并赋予脚本可执行权限
[root@iqtzs_cn ~]# cp add_ipset_droplist.sh /etc/rc.d/
[root@iqtzs_cn ~]# chmod u+x add_ipset_droplist.sh
三、添加crontab定时任务,设置每3分钟执行一次:
-
# 添加crontab定时,执行间隔为3分钟。
-
[root@iqtzs_cn ~]# vim /etc/crontab
-
SHELL=/bin/bash
-
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
-
MAILTO=root
-
-
# For details see man 4 crontabs
-
-
# Example of job definition:
-
# .---------------- minute (0 - 59)
-
# | .------------- hour (0 - 23)
-
# | | .---------- day of month (1 - 31)
-
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
-
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
-
# | | | | |
-
# * * * * * user-name command to be executed
-
0/3 * * * * root /etc/rc.d/add_ipset_droplist.sh
0/3 * * * * root /etc/rc.d/add_ipset_droplist.sh
通过查看日志,可以看到crontab每3分钟执行一次:
[root@iqtzs_cn ~]# tail -50 /var/log/cron | grep add_ipset_droplist.sh
Sep 10 12:55:01 iqtzs_cn CROND[14251]: (root) CMD (/etc/rc.d/add_ipset_droplist.sh)
Sep 10 12:58:01 iqtzs_cn CROND[14805]: (root) CMD (/etc/rc.d/add_ipset_droplist.sh)
至此,每3分钟就会执行一次,会把发现的多次入侵ip加入黑明白拒绝访问,网络安全防御级别提升。经测试,在使用PAM锁定多次登录失败的用户基础上,可以很有效的拒绝恶意IP的SSH暴力破解。
说明:以上操作均在CentOS 7 64位系统上进行。
参考:
-
-
Centos7 设置定时任务
-
-
阅读(1944) | 评论(0) | 转发(0) |