保护你的ssh服务器
一. 简介
There were 35 failed login attempts since the last successful login.
每次ssh登陆vps都会出现类似上面的提示,然而你并没有错误登陆过,这时候就需要考虑采取些措施来保护你的ssh服务器啦。
二. 原因
上面的报错是有人在破解你的ssh登陆密码,写的程序用字典一个个尝试登录,如果不巧你的vps设置的密码过于简单,就很容易被这样暴力破解掉。
三. 解决方法
解决的方法也很简单
方法1:更改默认端口号
更改ssh端口号,一般都是攻击的默认22端口,这样改了之后,别人就攻击不到了。
可以通过修改ssh的配置文件/etc/ssh/sshd_config实现,修改点为
/etc/ssh/sshd_config
# 搜索Port,将前面的#去掉,然后修改后面数值,默认为22
#Port 22
Port 822
重启sshd之前,防火墙先开放设置的端口号
firewall-cmd --zone=public --add-port=822/tcp --permanent
firewall-cmd --reload
重启sshd服务就可以啦
systemctl restart sshd
不过这样以后自己登陆也要记住这个端口号,我是不太喜欢。
2018.4.25更新:买了个128MB内存的小鸡,天天被攻击的关机,fail2ban太耗内存了。你们牛,你们牛,我换端口还不行嘛!!!
方法2:密钥登陆
ssh关闭密码登录,只允许密钥登陆,这样再怎么暴力破解也不用担心被攻破,不过上面的报错还是会出现的。
这个也是通过修改/etc/ssh/sshd_config来实现,不过修改之前,我们需要先将自己的密钥配置到vps上。
2.1 生成公钥/私钥对
如果你还没有密钥的话,需要先生成
# -P '' 就表示空密码
# 一般不用设置密码,设置了每次使用还要输入密码,麻烦
ssh-keygen -t rsa -P ''
然后回车就好了,密钥会默认在保存在~/.ssh文件夹下面。
~/.ssh
id_rsa.pub是公钥
id_rsa是私钥
2.2 将公钥配置到vps上
首先将id_rsa.pub复制到vps,然后执行
touch ~/.ssh/authorized_keys
echo "# Added by xxx" >> ~/.ssh/authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
2.3 修改ssh配置文件
/etc/ssh/sshd_config
# 搜索PermitRootLogin,修改为下面的
PermitRootLogin without-password
这样就可以只使用密钥登陆vps了。
同样修改完后,记得执行systemctl restart sshd
重启ssh服务。
不过要记住这样改了之后,使用密码是登陆不了vps的,所以一定要保存好刚才生成的私钥。
方法3:安装fail2ban
使用fail2ban检测登陆错误日志,超过设定的错误次数,则一定时间内不允许该ip再访问,这样错误提示就会越来越少啦。
因为我用的centos7的默认防火墙firewalld,所以安装的是支持firewalld的fail2ban,配置也是按这个来的,用iptables的同学请搜索别的教程。
fail2ban安装命令
# 添加EPEL软件库
yum -y install epel-release
# 安装支持firewalld的fail2ban
yum -y install fail2ban-firewalld fail2ban-systemd
# 启动fail2ban
systemctl start fail2ban
# 开机启动
systemctl enable fail2ban
创建/etc/fail2ban/jail.local配置文件,内容为
/etc/fail2ban/jail.local
[DEFAULT]
# 被封IP禁止访问的时间,设定值为7天,单位是秒
bantime = 604800
# 检测时间,在此时间内超过规定的次数会激活fail2ban,设定值为1天,单位是秒
findtime = 86400
# 允许错误登录的最大次数,和findtime配合使用
maxretry = 5
[sshd]
# 启用,不启用则为:false,开启对SSH服务的防护
enabled = true
# 如果你的是其他的端口,需要在此处填写正确.
port = ssh
# 含有规则的配置文件,在/etc/fail2ban/filter.d/文件夹下,默认为sshd
filter = sshd
[sshd-ddos]
# 启用,不启用则为:false,开启SSH-DDOS防护
enabled = true
# 如果你的是其他的端口,需要在此处填写正确.
port = ssh
# 含有规则的配置文件,在/etc/fail2ban/filter.d/文件夹下,默认为sshd
filter = sshd-ddos
这里我配置的是在1天内错误5次,则7天内禁止登陆。
配置文件变了,重新启动fail2ban
systemctl restart fail2ban
过段时间查看效果
fail2ban-client status sshd
就会看到被禁登陆的ip啦。
四. 总结
虽然咱vps上没什么重要文件,被破解后可以重装系统再次拿回管理权,但是也麻烦不是。如果有重要文件的话,那危害就更加严重了。
所以赶紧把fail2ban装起来,保护你的vps吧。