服务器被SSH暴力破解解决方案
服务器端使用Debian 9×64系统,发现大量不存在的用户名登陆失败记录,于是使用Fail2ban进行IP封禁。
查看系统登录日志(仅root用户)
last|less
会返回一系列登录成功的记录,格式为
用户名+终端位置+IP地址+登录时间+在线时长
root pts/1 IP Sat May 25 17:23 still logged in
lastb
会返回一系列登录失败的记录,格式为
steam1 ssh:notty 188.165.44.214 Sat May 25 06:19 - 06:19 (00:00)
dan ssh:notty 134.175.18.237 Sat May 25 06:19 - 06:19 (00:00)
steam1 ssh:notty 188.165.44.214 Sat May 25 06:19 - 06:19 (00:00)
12345678 ssh:notty 82.223.130.223 Sat May 25 06:18 - 06:18 (00:00)
12345678 ssh:notty 82.223.130.223 Sat May 25 06:18 - 06:18 (00:00)
tom1 ssh:notty 164.132.62.233 Sat May 25 06:18 - 06:18 (00:00)
# 查看不存在的用户名登录失败的日志
grep "Failed password for invalid user" /var/log/auth.log | awk '{print $13}' | sort | uniq -c | sort -nr | more
# 查看root账户登录失败记录
sudo grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
下面的登录失败记录只是冰山一角
199 92.50.249.166
199 47.107.55.172
199 195.114.210.238
199 194.56.72.6
199 159.89.149.46
更改SSH端口
可以从输出结果看到这个服务器被攻击的相当频繁,还好之前改过SSH端口。
# 一键更改端口
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ssh_port.sh && chmod +x ssh_port.sh && bash ssh_port.sh
下面是手动方法:
vim /etc/ssh/sshd_config
打开SSH的配置文件,可以找到#Port
字样,默认一般为22,非常不安全,将其注释去掉并在其后添加一行,即Port ***
,添加新的SSH端口,在验证新端口好用后再将22端口注释掉。
在修改端口之后需要重启SSH服务
/etc/init.d/sshd restart //或者
service sshd restart
如果还是访问不通,需要进行防火墙配置
/etc/init.d/iptables stop //或者
service iptables stop
或者在防火墙过滤规则中上增加一条,允许对新增的端口的访问:
vim /etc/sysconfig/iptables
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
***********
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2022 -j ACCEPT
***********
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Fail2ban配置
之前尝试使用过 DenyHosts,其已经很长时间没有进行维护而且它用的Python2与服务器上部署的Python3有不兼容的现象,弃用。
Fail2ban 是一款实用软件,可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作。一般需求的操作并不复杂,修改配置文件即可。
安装
apt-get install fail2ban
打开配置文件
vim /etc/fail2ban/jail.conf
配置文件翻译如下:
我并没有在服务器上配置邮件服务,也不需要邮件提醒,主要是修改前12行
[DEFAULT]
# 忽略的IP列表,不受设置限制
ignoreip = 127.0.0.1/8
# 被封IP禁止访问的时间,单位是秒
bantime = 60000
# 检测时间,在此时间内超过规定的次数会激活fail2ban,单位是秒
findtime = 300
# 允许错误登录的最大次数
maxretry = 2
需要将Fail2ban设置为开机自启动
# 设置fail2ban开机启动
systemctl enable fail2ban
systemctl start fail2ban
# 启动与重启fail2ban
service fail2ban start
service fail2ban restart
日志查看功能
# 查看最近100条记录 ps.可以配合grep筛选已Ban列表
tail -100 /var/log/fail2ban.log
查看SSH服务监护状态,能看到当前被禁IP
fail2ban-client status sshd
- Author: Yang
- Link: https://yangt.me/posts/protect-server-under-ssh-cracking/
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.