fail2ban-client 命令 #
fail2ban-client
是 Fail2ban 系统的命令行客户端工具,用于与 Fail2ban 服务器通信并管理其配置。Fail2ban 是一个入侵防御框架,通过监控日志文件并根据预定义的规则临时封禁可疑 IP 地址,可以有效防止暴力破解和其他恶意活动。
语法 #
fail2ban-client [选项] <命令>
常用选项 #
选项 | 描述 |
---|---|
-c 配置目录 |
指定配置目录 |
-s 套接字路径 |
指定套接字路径 |
-d |
调试模式 |
-v |
详细输出 |
-q |
安静模式 |
-x |
强制执行,不询问确认 |
-i |
交互模式 |
-h, --help |
显示帮助信息 |
--version |
显示版本信息 |
--str2sec 时间字符串 |
将时间字符串转换为秒 |
--timeout 秒数 |
设置超时时间 |
常用命令 #
服务器管理 #
命令 | 描述 |
---|---|
start |
启动服务器 |
restart |
重启服务器 |
reload |
重新加载配置 |
stop |
停止服务器 |
status |
显示状态 |
ping |
测试服务器是否运行 |
监狱(Jail)管理 #
命令 | 描述 |
---|---|
add <监狱> |
创建监狱 |
delete <监狱> |
删除监狱 |
start <监狱> |
启动监狱 |
stop <监狱> |
停止监狱 |
status <监狱> |
显示监狱状态 |
reload <监狱> |
重新加载监狱配置 |
封禁管理 #
命令 | 描述 |
---|---|
set <监狱> banip <IP> |
封禁 IP 地址 |
set <监狱> unbanip <IP> |
解封 IP 地址 |
set <监狱> bantime <秒数> |
设置封禁时间 |
set <监狱> findtime <秒数> |
设置查找时间 |
set <监狱> maxretry <次数> |
设置最大重试次数 |
get <监狱> banned |
获取已封禁的 IP 列表 |
get <监狱> bantime |
获取封禁时间 |
get <监狱> findtime |
获取查找时间 |
get <监狱> maxretry |
获取最大重试次数 |
日志和过滤器管理 #
命令 | 描述 |
---|---|
get <监狱> logpath |
获取日志路径 |
set <监狱> logpath <路径> |
设置日志路径 |
get <监狱> logencoding |
获取日志编码 |
set <监狱> logencoding <编码> |
设置日志编码 |
get <监狱> failregex |
获取失败正则表达式 |
set <监狱> failregex <正则表达式> |
设置失败正则表达式 |
get <监狱> ignoreregex |
获取忽略正则表达式 |
set <监狱> ignoreregex <正则表达式> |
设置忽略正则表达式 |
动作管理 #
命令 | 描述 |
---|---|
get <监狱> actions |
获取监狱的动作列表 |
get <监狱> action <动作> |
获取动作的详细信息 |
set <监狱> addaction <动作> |
添加动作 |
set <监狱> delaction <动作> |
删除动作 |
常见用法 #
基本操作 #
1. 检查 Fail2ban 状态 #
fail2ban-client status
2. 检查特定监狱的状态 #
fail2ban-client status sshd
3. 重新加载配置 #
fail2ban-client reload
4. 重新加载特定监狱 #
fail2ban-client reload sshd
5. 停止 Fail2ban #
fail2ban-client stop
6. 启动 Fail2ban #
fail2ban-client start
监狱管理 #
1. 列出所有监狱 #
fail2ban-client status
2. 获取监狱详细信息 #
fail2ban-client status sshd
3. 启动特定监狱 #
fail2ban-client start sshd
4. 停止特定监狱 #
fail2ban-client stop sshd
封禁管理 #
1. 手动封禁 IP 地址 #
fail2ban-client set sshd banip 192.168.1.100
2. 解封 IP 地址 #
fail2ban-client set sshd unbanip 192.168.1.100
3. 查看已封禁的 IP 地址 #
fail2ban-client status sshd
4. 设置封禁时间 #
fail2ban-client set sshd bantime 3600
5. 设置查找时间 #
fail2ban-client set sshd findtime 600
6. 设置最大重试次数 #
fail2ban-client set sshd maxretry 5
日志和过滤器管理 #
1. 获取日志路径 #
fail2ban-client get sshd logpath
2. 设置日志路径 #
fail2ban-client set sshd logpath /var/log/auth.log
3. 获取失败正则表达式 #
fail2ban-client get sshd failregex
4. 测试过滤器 #
fail2ban-client -d
然后在交互模式中:
set sshd addlogpath /var/log/auth.log
get sshd failregex
get sshd logpath
status sshd
动作管理 #
1. 获取监狱的动作列表 #
fail2ban-client get sshd actions
2. 添加动作 #
fail2ban-client set sshd addaction custom-action
3. 删除动作 #
fail2ban-client set sshd delaction custom-action
高级用法 #
1. 创建自定义监狱 #
首先创建配置文件/etc/fail2ban/jail.d/custom.conf
:
[custom-jail]
enabled = true
filter = custom-filter
logpath = /var/log/custom.log
maxretry = 3
bantime = 3600
findtime = 600
action = iptables-multiport[name=custom, port="http,https"]
然后创建过滤器文件/etc/fail2ban/filter.d/custom-filter.conf
:
[Definition]
failregex = Authentication failure for .* from <HOST>
ignoreregex =
最后重新加载配置:
fail2ban-client reload
2. 使用自定义动作 #
创建动作文件/etc/fail2ban/action.d/custom-action.conf
:
[Definition]
actionstart = echo "Custom action started" >> /var/log/fail2ban-custom.log
actionstop = echo "Custom action stopped" >> /var/log/fail2ban-custom.log
actioncheck =
actionban = echo "Banned IP: <ip>" >> /var/log/fail2ban-custom.log
actionunban = echo "Unbanned IP: <ip>" >> /var/log/fail2ban-custom.log
[Init]
然后在监狱配置中使用此动作:
[sshd]
action = iptables-multiport
custom-action
3. 使用数据库后端 #
编辑/etc/fail2ban/jail.local
:
[DEFAULT]
dbfile = /var/lib/fail2ban/fail2ban.sqlite3
dbpurgeage = 1d
4. 配置邮件通知 #
编辑/etc/fail2ban/jail.local
:
[DEFAULT]
destemail = [email protected]
sender = [email protected]
mta = sendmail
action = %(action_mwl)s
5. 使用多个日志文件 #
[sshd]
logpath = /var/log/auth.log
/var/log/secure
6. 忽略特定 IP 地址 #
编辑/etc/fail2ban/jail.local
:
[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.0/24
配置文件 #
Fail2ban 的主要配置文件和目录:
/etc/fail2ban/fail2ban.conf
:主配置文件/etc/fail2ban/jail.conf
:默认监狱配置/etc/fail2ban/jail.local
:本地监狱配置(覆盖默认配置)/etc/fail2ban/jail.d/
:监狱配置目录/etc/fail2ban/filter.d/
:过滤器配置目录/etc/fail2ban/action.d/
:动作配置目录/var/log/fail2ban.log
:Fail2ban 日志文件
监控和日志 #
1. 查看 Fail2ban 日志 #
tail -f /var/log/fail2ban.log
2. 使用 journalctl 查看日志 #
journalctl -u fail2ban
3. 检查防火墙规则 #
iptables -L -n
常见问题排查 #
1. 服务未运行 #
systemctl status fail2ban
如果服务未运行,启动它:
systemctl start fail2ban
2. 配置错误 #
检查配置语法:
fail2ban-client -d
3. 监狱未启用 #
确保监狱配置中有enabled = true
。
4. 正则表达式问题 #
测试正则表达式:
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
5. 防火墙问题 #
确保防火墙已启用并且 Fail2ban 可以添加规则:
iptables -L -n | grep fail2ban
提示 #
- 在修改配置前备份原始配置文件
- 使用
jail.local
而不是直接修改jail.conf
- 定期检查 Fail2ban 日志以监控活动
- 为重要服务设置合理的封禁时间和重试次数
- 使用
ignoreip
参数避免封禁可信 IP 地址 - 结合其他安全措施(如强密码策略、SSH 密钥认证)使用 Fail2ban
- 考虑使用持久化动作,以便在 Fail2ban 重启后保持封禁
- 对于高流量服务器,调整
findtime
和maxretry
以避免误封 - 使用
fail2ban-regex
工具测试过滤器配置 - 定期更新 Fail2ban 以获取最新的安全修复和功能