类别:CentOS / 日期:2026-07-30 / 浏览:2592 / 评论:0
以CentOS7为例。要求新建一个bigboy普通用户作日常ssh远程登录,禁用root远程ssh登录,安装Fail2ban,限制10分钟内失败3次,封禁3小时,并记录到日志中。
#实时查看系统扫描命令: sudo tail -f /var/log/secure #查看最近n行记录 sudo tail -n 100 /var/log/secure
下面是一套完整的 CentOS 7 安全加固方案,按您的要求逐步执行。建议您在操作前先保持一个已连接的 SSH 窗口不要关闭,以防配置失误导致自己无法登录。
整体操作流程:
1、新建普通用户 bigboy并配置 sudo 权限
2、测试 bigboy用户 SSH 登录是否正常
3、禁用 root 用户的远程 SSH 登录
4、安装并配置 Fail2ban(规则:10分钟失败3次,封禁3小时,记录日志)
第1步:新建 bigboy普通用户
# 创建用户 bigboy,并自动创建家目录 useradd bigboy # 设置密码(输入两次确认,建议使用强密码) passwd bigboy # 将 bigboy 添加到 wheel 组,使其拥有 sudo 权限 usermod -aG wheel bigboy # 验证 sudo 权限是否配置正确(默认 wheel 组已有 sudo 权限) # 如果之前修改过 sudoers 文件,请检查: # visudo 确认以下行未被注释: # %wheel ALL=(ALL) ALL
第2步:测试 bigboy用户 SSH 登录
关键步骤:务必先测试成功再继续!
保持当前 root 的 SSH 窗口保持打开状态(不要关闭)
打开一个新的终端窗口,尝试用 bigboy用户登录:
ssh bigboy@你的服务器IP -p 22
输入刚刚设置的密码,确认能正常登录
登录成功后,测试 sudo 权限:
sudo whoami # 应该输出 root,表示 sudo 工作正常
如果登录失败,先排查问题再继续,否则您可能会把自己锁在门外!
第3步:禁用 root 远程 SSH 登录
用 bigboy 用户登录后,通过 sudo 编辑 SSH 配置文件:
sudo vi /etc/ssh/sshd_config
找到以下行并修改(如果找不到则直接添加):
# 禁止 root 通过 SSH 登录 PermitRootLogin no # 仅允许 bigboy 用户登录(可选,增加安全性) # 在文件末尾添加: AllowUsers bigboy
保存退出后,先不要重启 SSH 服务,先检查配置语法:
sudo sshd -t
如果没有报错(无任何输出),则重启 SSH 服务:
sudo systemctl restart sshd
验证:打开另一个新终端,尝试用 root 直接 SSH 登录:
ssh root@你的服务器IP
应该会提示 Permission denied,说明禁用成功。
第4步:安装并配置 Fail2ban
4.1 安装 EPEL 仓库和 Fail2ban
# 安装 EPEL 源(CentOS 7 需要) sudo yum install epel-release -y # -------------------------- # 如果是Debian/Ubuntu系统 # apt install fail2ban # -------------------------- # 安装 fail2ban sudo yum install fail2ban -y # 启动 (先不启动,后面配置规则后再启动) #systemctl start fail2ban # 设置开机自启 sudo systemctl enable fail2ban
4.2 配置 Fail2ban(按您的规则)
Fail2ban 的主配置文件不建议直接修改,推荐创建本地配置文件覆盖默认设置。
# 创建本地配置文件 sudo vi /etc/fail2ban/jail.local
写入以下内容:
[DEFAULT] # 封禁时间:3小时 = 10800秒 bantime = 10800 # 查找失败次数的时间窗口:10分钟 = 600秒 findtime = 600 # 失败次数阈值:3次 maxretry = 3 # 日志记录级别 loglevel = INFO logtarget = /var/log/fail2ban.log # 启用防火墙操作(CentOS 7 使用 firewall-cmd) banaction = firewallcmd-rich-rules action = %(action_mwl)s [sshd] # 启用 SSH 防护 enabled = true port = ssh filter = sshd logpath = /var/log/secure
配置参数说明:
| 参数 | 值 | 含义 |
|---|---|---|
bantime | 10800 | 封禁 3 小时(单位:秒) |
findtime | 600 | 统计失败次数的时间窗口为 10 分钟 |
maxretry | 3 | 在 findtime 内失败 3 次即触发封禁 |
banaction | firewallcmd-rich-rules | 使用 firewall-cmd 添加封禁规则 |
以下是ubuntu版本的规则,只是防火墙部分不用,可供参考:
[DEFAULT] # 封禁时间:3小时 = 10800秒 bantime = 10800 # 查找失败次数的时间窗口:10分钟 = 600秒 findtime = 600 # 失败次数阈值:3次 maxretry = 3 # 日志记录级别 loglevel = INFO logtarget = /var/log/fail2ban.log # ---------- 关键差异:防火墙配置 ---------- # Ubuntu 默认使用 ufw,但 fail2ban 对 ufw 支持有限 # 推荐使用 iptables-multiport(几乎所有 Ubuntu 版本都支持) banaction = iptables-multiport # 动作配置:发送邮件通知(可选,需要配置邮件服务) # 如果不需要邮件通知,可以简化为: action = %(action_mwl)s [sshd] # 启用 SSH 防护 enabled = true port = ssh filter = sshd logpath = /var/log/auth.log
4.3 启动 Fail2ban 并验证
# 启动 fail2ban sudo systemctl start fail2ban # 如果需要重启 fail2ban #sudo systemctl restart fail2ban # 查看运行状态 sudo systemctl status fail2ban # 查看 SSH 防护状态(能看到当前被封禁的 IP 列表) sudo fail2ban-client status sshd
4.4 验证封禁规则是否生效
可以用以下命令手动模拟测试(不要用您的正常登录 IP 测试,否则会把自己封掉):
# 查看当前封禁的 IP sudo fail2ban-client status sshd # 查看 fail2ban 日志 sudo tail -f /var/log/fail2ban.log # 查看 firewall 封禁规则(被封禁的 IP 会在这里显示) sudo firewall-cmd --list-rich-rules
测试您的配置是否生效
模拟攻击测试(从另一台机器执行):
# 用错误的密码连续尝试 SSH 登录 3 次以上 ssh bigboy@你的服务器IP # 连续输入错误密码 3 次
观察日志:
# 在服务器上实时查看 secure 日志 sudo tail -f /var/log/secure # 会看到 Failed password 的记录 # 查看 fail2ban 日志 sudo tail -f /var/log/fail2ban.log # 会看到类似 "Ban 192.168.x.x" 的记录
查看防火墙规则确认封禁:
sudo firewall-cmd --list-rich-rules # 应该能看到类似: # rule family="ipv4" source address="被封IP" reject
? 查看封禁日志记录
您的规则已经将日志记录到 /var/log/fail2ban.log,可用以下命令查看:
# 查看所有封禁记录 sudo grep "Ban" /var/log/fail2ban.log # 查看所有解封记录 sudo grep "Unban" /var/log/fail2ban.log # 查看某个 IP 的封禁历史 sudo grep "193.32.162.26" /var/log/fail2ban.log
? 常用 Fail2ban 管理命令
| 命令 | 作用 |
|---|---|
sudo fail2ban-client status | 查看所有启用的服务状态 |
sudo fail2ban-client status sshd | 查看 SSH 防护详细状态(含封禁 IP 列表) |
sudo fail2ban-client set sshd unbanip <IP> | 手动解封某个 IP |
sudo fail2ban-client reload | 重载配置文件(修改配置后使用) |
sudo systemctl restart fail2ban | 重启 Fail2ban 服务 |
完成。



