当前位置:首页>Linux>Linux 系统运维工程师必备工具箱(第16篇)之系统安全加固(fail2ban, rkhunter)

Linux 系统运维工程师必备工具箱(第16篇)之系统安全加固(fail2ban, rkhunter)

  • 2026-10-11 08:19:51
Linux 系统运维工程师必备工具箱(第16篇)之系统安全加固(fail2ban, rkhunter)

分享两个我在实际交付项目中反复使用的工具——fail2ban和rkhunter。它们不是用来对抗什么“威胁”的武器,而是帮助我们维护系统健康、保障服务连续性的得力助手。

一、fail2ban:让异常访问自动退散

先说说fail2ban。这个工具的核心价值在于:当系统日志中出现大量重复的认证失败记录时,它能自动触发iptables规则,临时阻断来源IP的访问。这就像给服务器装了一个智能门卫,发现有人反复输错密码,就请他暂时离开。

实际搭建场景

去年我负责一个电商平台的运维交付,客户要求对SSH登录进行保护。我选择了fail2ban,设置过程非常简单:

# 安装
yum install epel-release -y
yum install fail2ban -y

# 启动服务
systemctl enable fail2ban
systemctl start fail2ban

核心设置在/etc/fail2ban/jail.local中:

[DEFAULT]
# 忽略本地回环地址
ignoreip = 127.0.0.1/8 ::1
# 封禁时间:1小时
bantime = 3600
# 检测时间窗口:10分钟
findtime = 600
# 最大失败次数:5次
maxretry = 5

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
action = iptables[name=SSH, port=ssh, protocol=tcp]

排坑记:日志路径踩过的坑

第一次搭建时,我发现fail2ban始终不生效。排查后发现,CentOS 7的SSH日志路径是/var/log/secure,而Ubuntu系统是/var/log/auth.log。这个差异让我浪费了半天时间。

另外,如果SSH端口不是默认的22,需要在port字段指定实际端口:

[sshd]
port = 2222

监控与调优

搭建完成后,我习惯用fail2ban-client status sshd查看状态:

# 查看SSH jail的状态
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 12
|  `- File list: /var/log/secure
`- Actions
   |- Currently banned: 3
   |- Total banned: 15
   `- Banned IP list: 192.168.1.100 10.0.0.50 172.16.0.88

如果发现误封,可以用fail2ban-client set sshd unbanip 192.168.1.100解封。这个命令在调试阶段非常实用。

二、rkhunter:系统文件的健康体检师

rkhunter(Rootkit Hunter)是一个系统文件完整性检查工具。它能扫描系统文件、内核模块、网络端口等,发现异常修改。我把它比作“系统体检师”,定期检查系统文件的“健康状况”。

搭建与设置

安装同样简单:

# CentOS
yum install rkhunter -y

# Ubuntu
apt-get install rkhunter -y

首次使用前需要更新文件属性数据库:

rkhunter --propupd

这个命令会记录当前系统文件的哈希值、权限、所有者等信息,作为后续检查的基准。

实战设置

我习惯在/etc/rkhunter.conf中做几个关键调整:

# 启用系统命令完整性检查
ENABLE_TESTS="all"

# 设置邮件通知(可选)
MAIL-ON-WARNING=root@localhost

# 设置日志路径
LOG_FILE=/var/log/rkhunter.log

排坑记:误报处理的艺术

第一次运行rkhunter时,我被大量警告吓到了。仔细分析后发现,很多是“误报”:

  1. SSH设置检查:rkhunter会检查SSH是否允许root登录。如果业务需要,可以在设置中忽略:

    # 在rkhunter.conf中添加
    ALLOW_SSH_ROOT_USER=yes
  2. 隐藏文件检查:某些应用会在/dev目录创建文件,这会被rkhunter标记。需要将这些路径加入白名单:

    # 在rkhunter.conf中添加
    ALLOWHIDDENDIR=/dev/shm
  3. 内核模块检查:如果加载了非标准内核模块,rkhunter会报警。需要确认模块来源后,在设置中允许:

    # 在rkhunter.conf中添加
    ALLOW_KERNEL_MODULE=ip_tables

自动化检查脚本

我写了一个简单的cron任务,每周自动执行检查并发送报告:

#!/bin/bash
# /usr/local/bin/security_check.sh
LOG_FILE="/var/log/security_weekly.log"
rkhunter --check --skip-keypress --report-warnings-only > $LOG_FILE 2>&1

# 如果发现异常,发送邮件
if [ -s $LOG_FILE ]; then
    mail -s "Weekly Security Check Report" admin@example.com < $LOG_FILE
fi

在crontab中添加:

0 2 * * 0 /usr/local/bin/security_check.sh

三、两个工具的协同使用

在实际运维中,我通常这样组合使用:

  1. fail2ban:实时监控认证日志,自动阻断异常访问
  2. rkhunter:定期检查系统文件完整性,发现异常修改

每周一早上,我会查看rkhunter的检查报告,同时检查fail2ban的封禁列表。如果发现某个IP被反复封禁,会进一步分析其访问模式。

四、最佳实践总结


  1. 先测试再上线
    :在非生产环境充分测试fail2ban的封禁阈值,避免误封
  2. 日志轮转设置:确保fail2ban能正确读取轮转后的日志文件
  3. 定期更新:保持fail2ban和rkhunter版本更新,获取最新的检测规则
  4. 备份设置:每次修改设置前备份原文件,方便回滚

这两个工具就像系统的“健康卫士”,一个负责“门禁管理”,一个负责“定期体检”。它们不是万能的,但能帮我们解决90%的日常运维问题。希望我的经验能帮助大家少走弯路,让系统运行得更平稳。

👨‍💻 运维经验:根据实际生产环境,以上步骤建议先在测试环境验证,并做好备份。参数值需根据服务器设置调整,不要盲目照搬。

如果喜欢,点个「在看」分享给朋友吧。

最新文章

随机文章