如何定位Ubuntu 22.04设备上当前的防火墙规则?
定位Ubuntu 22.04上22端口开放原因的排查方法
1. 检查nftables原生规则
Ubuntu 22.04默认采用nftables作为底层防火墙,iptables命令实际是nftables的兼容封装。直接查看完整nftables规则集:
nft list ruleset
重点看inet filter表内的入站链(如input),确认是否存在允许22端口的规则,或是链的默认策略为accept。
2. 确认sshd服务监听状态
22端口是SSH默认端口,先验证服务的监听范围:
ss -tulpn | grep :22
如果输出显示监听0.0.0.0:22或:::22,说明服务允许所有IP访问;若防火墙默认策略为放行所有入站流量,就会出现无显式规则但端口开放的情况。
3. 检查全表防火墙默认策略
查看iptables各表的完整规则(含默认策略):
# 过滤表 iptables -L -v -n # raw、mangle、nat表 iptables -t raw -L -v -n iptables -t mangle -L -v -n iptables -t nat -L -v -n
若链的默认策略为ACCEPT,即使无针对22端口的规则,流量也会被放行。
4. 排查其他防火墙服务
检查系统是否运行了firewalld等其他防火墙工具:
systemctl status firewalld
若服务运行,查看其规则:
firewall-cmd --list-all
5. 检查网络命名空间规则
如果系统使用了网络命名空间,端口可能在特定命名空间内开放:
# 列出所有命名空间 ip netns list # 进入目标命名空间查看规则(替换ns1为实际命名空间名) ip netns exec ns1 nft list ruleset ip netns exec ns1 iptables -L -v -n
6. 验证规则生效情况
添加拒绝22端口的规则后,用抓包工具测试规则是否实际生效:
tcpdump -i any port 22 -nn
同时从外部重新扫描22端口,结合抓包结果判断规则是否被正确应用。
内容的提问来源于stack exchange,提问作者Dagepyro
相关产品推荐
相关产品推荐

