西风古道

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

shell>vim /opt/MyShells/ssh_scan.sh
#!/bin/bash
#CentOS7 使用firewalld,如果开启了seLinux,需要允许策略或关闭 #ssh防猜用户密码 #设置时区,可根据日志文件的时间格式自行决定 export LC_ALL=en_US.utf8 #测试时间格式是否与日志时间格式一致 #FORMAT=$(awk 'BEGIN{print strftime("%b %e %H:%M",systime()-60)}') #获取前1分钟内的secure记录,统计ssh认证失败的IP和其失败次数,并用Iptables阻止 SCANNER=$(awk 'BEGIN{tm=strftime("%b %e %H:%M",systime()-60)} {if($0 ~ tm&&/Failed password/&&/ssh2/)print $(NF-3)}' /var/log/secure | sort | uniq -c | awk '{print $1"="$2}') #/usr/bin/logger -t SSHSCAN '进行了SSH Scan' $FORMAT $SCANNER for i in $SCANNER do #取认证失败次数 NUM=`echo $i|awk -F= '{print $1}'` #取IP地址 IP=`echo $i|awk -F= '{print $2}'` /usr/bin/logger -t RAIDSCAN '进行了Raid Scan' $i $NUM $IP #若其在失败次数不超过N次且之前没有被阻断过,那么添加一条策略将其阻断,并记录日志 (-ge 大于等于) if [ $NUM -ge 3 ] then #如果使用firewalld,在cron中调用该脚本,那么不能开启seLinux,原因未知 /usr/bin/firewall-cmd --add-rich-rule='rule family="ipv4" source address='$IP' reject' fi done #END of Script
shell>echo '*/1 * * * * root /opt/MyShells/ssh_scan.sh' >> /etc/crontab
shell>service crond restart

 

posted on 2017-06-22 09:57  西风古道  阅读(139)  评论(0编辑  收藏  举报