Linux使用fail2ban防止暴力破解
服务器遭受SSH暴力破解攻击,通过分析/var/log/secure日志获取攻击源IP。提升安全性的措施包括:封禁IP、修改SSH端口、启用密钥认证或安装Fail2ban。本文重点介绍Fail2ban的安装配置,通过修改jail.local设置封禁规则(如永久封禁攻击IP),调整sshd.conf中的failregex匹配日志格式,并验证服务状态。最后提供日志查看和排错方法,确保防护生效。
明显被攻击
1.查看日志获取攻击源 IP
grep "Failed password" /var/log/secure | grep root | awk '{print $(NF-3)}' | sort | uniq -c
这条命令的作用是在/var/log/secure
文件中查找包含 “Failed password” 且涉及root
用户的行,然后提取出攻击源 IP 地址,并统计每个 IP 出现的次数。
可以采取以下措施来增强服务器的安全性:(目前采取最后一种,看第三步)
- 封禁攻击 IP:可以使用
iptables
等防火墙工具,将这些频繁尝试攻击的 IP 地址封禁,阻止它们继续访问服务器。例如,使用命令sudo iptables -A INPUT -s 攻击IP -j DROP
来封禁特定 IP。 - 修改 SSH 端口:将 SSH 服务的默认端口(22)修改为其他不常用的端口,减少被扫描和攻击的概率。修改
/etc/ssh/sshd_config
文件中的Port
参数,然后重启 SSH 服务。- 编辑
/etc/ssh/sshd_config
,将Port 22
改为其他端口(如2222
),然后sudo systemctl restart sshd
重启 SSH 服务,减少被扫描的概率。
- 编辑
- 启用密钥认证:禁用密码登录,只允许通过 SSH 密钥进行登录。这样可以大大提高 SSH 登录的安全性,因为暴力破解密钥几乎是不可能的。生成密钥对并将公钥添加到服务器的
~/.ssh/authorized_keys
文件中,然后在/etc/ssh/sshd_config
中设置PasswordAuthentication no
。- 生成密钥:本地执行
ssh-keygen
,一路回车生成密钥对。 - 上传公钥:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@你的服务器IP
。 - 禁用密码登录:编辑
/etc/ssh/sshd_config
,设置PasswordAuthentication no
,重启 SSH 服务。
- 生成密钥:本地执行
- 安装 Fail2ban:Fail2ban 是一个可以自动监测日志文件,发现暴力破解等攻击行为,并自动封禁攻击 IP 的工具。安装并配置 Fail2ban 后,它会根据预设的规则自动对攻击 IP 进行封禁。
- 安装:
sudo apt-get install fail2ban
(Debian/Ubuntu)或sudo yum install fail2ban
(CentOS)。 - 配置:复制
/etc/fail2ban/jail.conf
为jail.local
,编辑jail.local
,设置[sshd]
下的enabled = true
等规则,然后sudo systemctl start fail2ban
启动服务,自动监测并封禁攻击 IP。
- 安装:
2.查看详细攻击日志
grep "Failed password" /var/log/secure | grep 攻击IP
使用命令 grep "Failed password" /var/log/secure | grep 攻击IP
(将攻击IP
替换为具体 IP,如202.105.21.108
),查看该 IP 的具体攻击时间、尝试的用户名等详细日志,进一步了解攻击情况。
3.封禁攻击 IP:安装fail2ban
3.1安装
sudo yum install fail2ban
cd /etc/fail2ban/
sudo cp jail.conf jail.local
3.2配置封禁主机规则
vi /etc/fail2ban/jail.local
设置 [sshd]
下的 enabled = true
等规则(取消注释):
[DEFAULT]
#bantime = 600m
findtime = 600
maxretry = 10 # 可选:登录失败多少次后封禁
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure # CentOS 系统 SSH 日志默认路径
bantime = -1 # 永久封禁
3.3封禁失败规则
3.3.1打开配置文件
/etc/fail2ban/filter.d/sshd.conf
找到failregex
字段
设置为
failregex = ^.*Failed password for.*from <HOST>.*$
如果这个规则不行的话,
解决步骤
-
简化
failregex
测试
先将sshd.conf中的failregex改为更简单的规则,测试是否能让fail2ban正常启动。比如修改为:failregex = ^.*Failed password for.*from <HOST>.*$
这个正则会匹配所有包含 “Failed password for” 和来源主机
<HOST>
的行,更宽松,便于测试。 -
重启
fail2ban
并检查状态:
执行sudo systemctl restart fail2ban
,然后用sudo systemctl status fail2ban
查看服务是否能正常启动。如果能启动,说明是之前的正则太复杂或有语法错误;如果仍不能启动,继续下一步。 -
恢复
sshd.conf
到默认配置:
如果有sshd.conf
的备份,恢复备份文件;如果没有,可卸载并重新安装fail2ban
(CentOS 系统命令:sudo yum remove fail2ban && sudo yum install fail2ban
),恢复默认配置后,再尝试逐步修改failregex
。 -
匹配系统日志格式:
查看/var/log/secure
中 “Failed password” 相关的日志行,确保failregex
能准确匹配。例如,若日志行是Sep 10 16:00:00 VolcanicEngineECS1 sshd[12345]: Failed password for root from 192.168.1.1 port 22 ssh2
,则之前的简化正则是可以匹配的。
保存文件后,重启 fail2ban
:
sudo systemctl restart fail2ban
sudo systemctl status fail2ban # 再次查看状态
4.验证
修改配置并重启后,通过以下命令确认 sshd
监狱是否正常启用:
sudo fail2ban-client status sshd
5排错:
查看日志:
sudo tail -f /var/log/fail2ban.log
更多推荐
所有评论(0)