暴力破解ssh的方法是很常见的。要减少这个暴力攻击对我们的伤害。我总结了两种方法。
方法一:直接把sshd的22端口改成一个陌生的非其他服务的端口
步骤如下:
1.想好自己想改成哪个端口号(比如是2222)
2.先写好防火墙开发端口(如果是阿里云和腾讯云等,要加一步,到平台上配置开放2222端口)
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
3.修改sshd文件
vim /etc/ssh/sshd_config
大概在17行,有这样的代码,意思是默认sshd端口是22端口
#Port 22
把他改成
Port 2222
重启服务
systemctl restart sshd
方法二:用/etc/hosts.allow 和/etc/hosts.deny来控制
思路:我们可以写一个脚本,通过/var/log/secure中,通过统计访问失败的ip,超过四次就将他加入到/etc/hosts.deny中,加入之后就不能登录到服务器了,即使密码正确,必须要管理员来把他删掉才可以进入。把这个脚本加入crontab里。
步骤如下:
1.先写/etc/hosts.allow。这个很关键。可以把我们日常登录的ip都写上,以免登录出错多了,登录不进去。
(不知道自己ip,可以去百度138ip等网站,查看自己ip)
比如我的ip是33.33.33.33
我们可以这样写
vim /etc/hosts.allow
#####################
sshd:33.33.33.33:allow
假如我们想让一个网段都写进去的话,可以这样写:
vim /etc/hosts.allow
####################
sshd:33.33.33.:allow
2.写脚本。
#!/bin/bash
cat /dev/null > /root/black.deny
awk '/Failed/{time[$(NF-3)]++}END{for(ip in time) if(time[ip]> 4)print ip}'
/var/log/secure >> /root/black.deny
for i in `cat /root/black.deny`
do
grep $i /etc/hosts.deny > /dev/null
if [ $? -ne 0 ]
then
echo "sshd:$i:deny" >> /etc/hosts.deny
fi
done
解释一下: 先把文件清空一次,加快下面循环的运行速率。通过awk命令,用/Failed/,Failed字段,建立time[]数组统计ip出现次数,如果ip出现次数大于4,就打印出来。重定向到/root/black.deny文件中。
循环是用于把/etc/hosts.deny文件里面的没有的ip加进去(因为grep一个没有的东西$?为1)
3.加入到crontab中
crontab -e
0 */1 * * * sh /root/cron_sh/sshd_failed_4.sh
4.重启sshd服务
systemctl restart sshd