编写脚本检查/var/log/secure访问日志文件。
思路:通过统计日志文件中的登陆失败的ip,并将达到阈值的ip添加到/etc/hosts.deny来拒绝某个ip的再次访问。
脚本:之前写的,比较low。
#!/bin/bash #SSH配置文件所在位置 SSH_config='/etc/hosts.deny' #ssh 日志文件位置 SSH_log='/var/log/secure' #记录尝试登陆超过15次且未登陆成功的ip,以及添加进黑名单的时间日志 Deny_log='/var/lib/ssh_shell/ssh_deny.log' #储存所有ip及访问次数文件 Visit_ip='/var/lib/ssh_shell/ssh_visit.txt' #超过设置下面次数将被添加进黑名单 Visit_number=60 #检查ssh日志文件是否存在 if [ ! -e $SSH_log ] then echo -e "\033[41;37m ssh 日志文件不存在 请检查原因 \033[0m" exit 1 fi if [ ! -e "$SSH_config.bak" ] then cp $SSH_config $SSH_config.bak if [ $? -eq 0 ] then echo " 备份文件成功" >>$Deny_log else echo -e"\033[41;37m ssh备份文件不成功 \033[0m" exit 2 fi else echo " 已有备份文件 " >>$Deny_log fi cat $SSH_log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{ print $2"==="$1}' > $Visit_ip echo "---------$(date +%F_%T)------------" >>$Deny_log for VI in $(cat $Visit_ip) do Number=$(echo $VI |awk -F=== '{print $2}') IP=$(echo $VI |awk -F=== '{print $1}') if [ $Number -gt $Visit_number ] then grep $IP "$SSH_config" >/dev/null if [ $? -ne 0 ] then echo " sshd:$IP:deny" >>$SSH_config echo "$IP " >>$Deny_log fi fi done