iptables v1.4.7搭配fail2ban时已封禁IP仍触发‘already banned’日志且未被拦截的问题排查
iptables v1.4.7搭配fail2ban时已封禁IP仍触发‘already banned’日志且未被拦截的问题排查
兄弟,我瞅了你的iptables规则和问题描述,立马发现几个核心问题,这就是为啥已经封禁的IP还能闯进来触发日志的根源!
问题1:iptables规则顺序完全搞反了,封禁链被绕过去了
你看INPUT链的规则排布:
f2b-ASTERISK只针对UDP协议的SIP端口流量做匹配,但后面紧跟着一堆DROP规则后,居然出现了ACCEPT all -- 0.0.0.0/0 0.0.0.0/0这条规则!这意味着任何没被前面规则拦截的流量,都会直接被允许通过——包括封禁IP的其他端口流量(比如TCP 5060、UDP 4569这些SIP相关端口,甚至其他无关端口)。- 更要命的是,后面还有单独的
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5060和ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:5060规则,这些规则在f2b-ASTERISK之后。也就是说,哪怕IP被封禁,只要它用TCP 5060发起请求,根本不会经过f2b-ASTERISK链,直接被ACCEPT放行,fail2ban自然会再次检测到这个IP的流量,输出“already banned”。
问题2:f2b-ASTERISK的匹配范围太窄
当前f2b-ASTERISK只绑定到UDP的SIP端口规则上,但fail2ban的asterisk jail应该要拦截所有来自封禁IP的流量(至少是所有SIP相关端口:TCP/UDP 5060、UDP 4569、媒体端口10000-20000)。你现在的配置只让UDP SIP流量走封禁链,其他端口的流量完全绕开了封禁检查。
快速修复方案
调整iptables规则顺序,让封禁链优先匹配所有流量
执行这条命令,把f2b-ASTERISK链放到INPUT链的最前端,确保所有进入的流量先经过封禁检查:iptables -I INPUT -j f2b-ASTERISK这样被封禁的IP不管发什么端口的流量,都会先被
f2b-ASTERISK链DROP掉,不会触发后面的ACCEPT规则。清理冗余的ACCEPT规则
删掉或者移到封禁链之后那些直接放行SIP端口的规则,避免绕开封禁检查。检查fail2ban的asterisk jail配置
打开/etc/fail2ban/jail.conf或者jail.d/asterisk-iptables.conf,确认banaction设置的是iptables-allports(拦截封禁IP的所有端口),如果用的是iptables-multiport,要确保port字段覆盖了所有SIP相关端口(比如port=5060,4569,10000:20000)。
备注:内容来源于stack exchange,提问作者Questionz
相关产品推荐
相关产品推荐

