Fedora系统中fail2ban规则未在iptables -L中显示的问题求助
我在Fedora上折腾fail2ban时也碰到过类似的iptables规则不显示的问题,还有配置文件调整时的坑,给你梳理下排查和解决的步骤:
一、为什么iptables -L看不到fail2ban-ssh规则?
最常见的原因是Fedora默认用nftables而非iptables作为防火墙后端,其次是配置没生效或者服务没正常跑起来,一步步来:
先确认防火墙后端类型
Fedora 31及以后版本默认切换到nftables,iptables命令只是兼容层,fail2ban如果适配nftables的话,规则不会出现在iptables -L的输出里。你可以用这条命令查看当前后端:firewall-cmd --get-backend如果输出是
nftables,那得用nft list ruleset才能看到fail2ban的规则,别再死磕iptables -L了。检查fail2ban服务状态
先确保服务没躺平:systemctl status fail2ban如果显示未启动,先启动并设置开机自启:
systemctl start fail2ban systemctl enable fail2ban确认ssh jail是否真的启用
注意:别直接修改jail.conf,系统更新时这个文件会被覆盖,正确做法是复制一份为jail.local,然后在jail.local里修改配置。打开文件后,找到[sshd]段,确保enabled = true:[sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s如果
%(sshd_log)s变量指向的路径不对(比如Fedora的sshd日志默认是/var/log/secure),可以直接写死logpath = /var/log/secure。查看fail2ban日志找错误
要是服务跑起来但规则没加载,看日志找线索:journalctl -u fail2ban日志里如果有
Failed to start jail 'sshd'这类报错,大概率是日志路径不对、后端配置错误,或者日志文件权限问题(fail2ban要有读取日志的权限)。切换fail2ban的防火墙后端到iptables
如果你非要用iptables看规则,可以修改jail.local里的banaction配置:banaction = iptables-multiport然后重启fail2ban:
systemctl restart fail2ban再跑
iptables -L应该就能看到fail2ban-ssh链了。
二、修改为sshd.conf时的常见错误及解决
你提到改sshd.conf时出错,虽然没贴具体错误,但我碰到过几个典型坑:
配置文件放错地方
fail2ban的自定义jail配置要放在/etc/fail2ban/jail.d/目录下,文件名可以是sshd.conf,里面只需要写[sshd]段的配置,比如:[sshd] enabled = true port = 22 logpath = /var/log/secure maxretry = 3 bantime = 3600要是放在其他路径,fail2ban根本读不到。
语法错误
比如把enabled写成enable,或者键值对没对齐、少了括号,都会导致加载失败。仔细检查配置项的拼写和格式,比如不要出现maxretry=3(虽然也能识别,但规范是加空格)。权限问题
确保sshd.conf的属主是root:root,权限是644,否则fail2ban读不了:chown root:root /etc/fail2ban/jail.d/sshd.conf chmod 644 /etc/fail2ban/jail.d/sshd.conf改完权限记得重启服务。
与默认配置冲突
比如你在sshd.conf里设置了一个不存在的backend值,或者logpath指向的文件不存在,都会触发错误。可以把sshd.conf里的配置简化,只保留必要项,逐步排查。
最后提醒一句:任何配置修改后都要重启fail2ban服务才能生效!
内容的提问来源于stack exchange,提问作者We are Borg

