我的服务器只要一放开SSH端口,就会遭受暴力攻击,像这样:
只好改了SSH默认端口,但没有用,可以用NMAP扫出来,比如:
无奈不用时关掉SSH端口,用的时候再打开,但这也太麻烦了。
下面给出几种方法,建议看情况组合使用。
错误禁登fail2ban
这里使用了一个软件:fail2ban。它可以在尝试失败一定次数后,禁止其登录一段时间,让尝试破解的黑客付出超长的时间代价。
1、安装
sudo apt update
sudo apt install fail2ban
2、修改配置(如端口)
# 复制配置配置文件,local文件的配置会覆盖默认conf文件的配置。
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
#编辑local配置文件
sudo vim /etc/fail2ban/jail.local
如果用的默认22端口,则不需要配置;若改过,则在下面填写对应端口:
[sshd]
port=8022
3、启动
sudo service fail2ban start
4、查看日志
sudo cat /var/log/fail2ban.log
5、尝试一下。
本地尝试登录,故意多次输入错误密码。可以看到前两次还能登录,第三次开始就直接拒绝了。
看一下服务器后台的登录记录:
更详细用法可自行另外搜索~
比如:
# bantime,findtime和maxretry选项的值定义了禁止时间和禁止条件。
# bantime是禁止使用IP的持续时间。 如果未指定后缀,则默认为秒。 默认情况下,bantime值设置为10分钟。 通常,大多数用户都希望设置更长的禁止时间。 根据您的喜好更改值:
/etc/fail2ban/jail.local/bantime = 1d
# 要永久禁止IP,请使用负数。
# findtime是设置禁令前的失败次数之间的持续时间。 例如,如果将Fail2ban设置为在五次失败之后禁止IP(maxretry,请参见下文),则这些失败必须在findtime持续时间内发生。
/etc/fail2ban/jail.local/findtime = 10m
# maxretry是禁止IP之前失败的次数。 默认值设置为5,对于大多数用户来说应该可以。
/etc/fail2ban/jail.local/maxretry = 5
查看哪些IP被ban:
sudo fail2ban-client status sshd
将IP从黑名单中移除:
fail2ban-client set sshd unbanip 8.8.8.8
修改SSH端口
打开配置文件,修改Port项改为8022(自定义的端口),保存重启SSH。
sudo vim /etc/ssh/sshd_config
sudo /etc/init.d/ssh restart
禁止root远程登录
一般攻击者只知道有个root用户,不知道你自己创建了哪些用户,所以可以禁止root远程登录,他也没法了。
打开配置文件,修改PermitRootLogin项改为no,保存重启SSH。
sudo vim /etc/ssh/sshd_config
sudo service ssh restart
禁止使用空白密码的用户访问
这个设置完就非常安全了,只能通过key来连接。但也有点麻烦,必须在要连接的电脑上都生成添加一次key。需要将 sshd_config 文件中的 PermitEmptyPasswords 行值设置为 no。
sudo vim /etc/ssh/sshd_config
然后修改:
PermitEmptyPasswords no
改完重启:
sudo service ssh restart
使用 SSH 版本 2
版本2修复了一些漏洞,相对安全一些。通过将 Protocol 参数添加到 sshd_config 文件来启用服务器使用第二个版本。
Include /etc/ssh/sshd_config.d/*.conf Protocol 2
关闭 TCP 端口转发和 X11 转发
这一点也供参考吧,X11转发可以支持在命令行模式下显示GUI界面,对有些同学可能需要。在 sshd_config 文件中关闭 AllowTcpForwarding 和 X11Forwarding 功能。
sudo vim /etc/ssh/sshd_config
然后修改:
X11Forwarding no
AllowTcpForwarding no
改完重启:
sudo service ssh restart