自动禁止攻击IP登陆SSH
2022-11-11 10:45:10
当你拥有一台服务器并且可以远程ssh登陆后,你会发现有很多恶意扫描工具骚扰你的服务器。最好的方法就是更换SSH登陆的端口号并且定时修改。但是仅仅想禁止某些IP登陆呢?
在服务器上有这么一个文件记录着禁止IP访问的信息,/etc/hosts.deny
,如果你不想一个IP通过SSH远程访问你的服务器,可以在这个文件下添加一条信息:sshd:xx.xx.xx.xx:deny
即可。
既然手动添加即可生效,那我想通过从sshd的日志里发现恶意访问的IP自动添加到这里该怎么办呢?
前人提供了这么一个脚本可以做这件事。前提:有systemd服务管理。
ssh_deny.sh
#!/bin/bash journalctl -u ssh.service | awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /root/black.list for i in `cat /root/black.list` do IP=`echo $i |awk -F= '{print $1}'` NUM=`echo $i|awk -F= '{print $2}'` if [ ${#NUM} -gt 1 ]; then grep $IP /etc/hosts.deny > /dev/null if [ $? -gt 0 ];then echo "sshd:$IP:deny" >> /etc/hosts.deny fi fi done
将这个脚本放到/root/
下,然后输入命令:crontab -e
,添加一个定时任务:*/1 * * * * sh /root/ssh_deny.sh
,这样就可以了。
目前我的服务器已经记录了600多个恶意尝试登陆的IP。
重启crontab :
systemctl reload crond.service
crontab 日志:
日志位于/var/log/cron,参考这里清理日志文件。