SSH 暴力登录 封IP脚本 https://my.oschina.net/kylidboy/blog/799104
https://my.oschina.net/7shell/blog/88487 这里也是一段类似脚本, 但好像判断了ip是否重复, 很详细
发现有IP大量的请求ssh登录(还精心一分钟登录一次。。。。。。)。查了一下/var/log/secure,发现各种IP各种尝试root登录,遂Bing了一下,获得一个直接的解决办法,方便快速搞的定。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash num=10 #上限 for i in awk '/Failed/{print $(NF-3)}' /var/log/secure|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'` do iptables -I INPUT -p tcp -s $i --dport 22 -j DROP done # 也可以在/etc/hosts.deny里加上sshd:{ip}:deny # 加入crontab计划任务 # 每2小时执行一次 # crontab -e # * */2 * * * sh /path/file.sh |
我自己的方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
手动检查尝试破解并加入拒绝访问您列表 vim /etc/connDenied.sh ------------------------- #!/bin/bash num=25 for i in `awk '/Failed/{print $(NF-3)}' /var/log/secure|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'` do #iptables -I INPUT -p tcp -s $i --dport 22 -j DROP echo "sshd:$i:deny" >> /etc/hosts.deny done chmod +x /etc/connDenied.sh sh /etc/connDenied.sh service sshd restart cat /etc/hosts.deny //echo "sh /etc/connDenied.sh" >> /etc/rc.local 不使用 使用任务方式: cp /etc/hosts.deny /etc/hosts.deny.bak vim /etc/connDeniedTask.sh ------------------------- #!/bin/bash rm -f /etc/hosts.deny cp /etc/hosts.deny.bak /etc/hosts.deny num=25 for i in `awk '/Failed/{print $(NF-3)}' /var/log/secure|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'` do echo "sshd:$i:deny" >> /etc/hosts.deny done service sshd restart #网上说不重启直接生效,没测试 chmod +x /etc/connDeniedTask.sh crontab -e //每小时执行一次 * */1 * * * sh /etc/connDeniedTask.sh |
改良别人的,可以自行判断是否已经存在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/bin/bash #Denyhosts SHELL SCRIPT #参考: https://my.oschina.net/7shell/blog/88487, 出处: http://www.mekau.com/4630.html #panyongzheng@163.com DEFINE=5 cat /var/log/secure |awk '/Failed/{print $(NF-3)}' |sort |uniq -c |awk '{print $2 "=" $1;}' >/tmp/black.txt #for i in 'cat /root/black.txt' for i in `cat /tmp/black.txt` do IP=`echo $i |awk -F"=" '{print $1 }'` NUM=`echo $i |awk -F"=" '{print $2 }'` #echo "地址:$IP 错误次数:${NUM}" if [[ $NUM -ge $DEFINE ]]; then #echo '准备加入黑名单' grep $IP /etc/hosts.deny > /dev/null #cat /etc/hosts.deny | grep $IP > /dev/null if [ $? -gt 0 ]; then echo -e "\033[31m DENY: 地址:$IP 错误次数:${NUM} \033[0m" echo "sshd:$IP:deny" >>/etc/hosts.deny else echo -e "\033[32m INFO: 已经存在:$IP \033[0m" fi else echo -e "\033[33m WAR: 次数不够, 地址:$IP 错误次数:${NUM} \033[0m" fi done service sshd restart #重启一次ssh |
另一种办法: http://blog.ddup.us/2012/04/09/server-intrusion-events/ 一段iptables配置规则,每分钟至多允许三条ssh连接,一旦超过之后,客户端的连接将会在下一分钟内全部被拒绝。
1 2 3 4 5 6 |
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set \ --name SSH -j ACCEPT iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl \ --name SSH -j LOG --log-prefix "SSH_brute_force " iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 \ --hitcount 4 --rttl --name SSH -j DROP |