运行 Kubuntu 21.10 的最新安装。
如果我在计算机上运行任何网络服务,我将无法从网络上的其他任何地方访问它。错误始终是“主机无法访问”。扫描tcpdump
显示 SYN 数据包确实到达了主机,但 ICMP“管理禁止”数据包立即发回。数据包甚至从未到达iptables
(通过添加与连接匹配的规则进行验证,并且其计数器永远不会增加)
nmap
也无法检测到端口是否打开,但其扫描确实显示在计数器中。nmap
将端口解释为已过滤,因为禁止的数据包是 ICMP;没有发送对 SYN 数据包的响应。
以下是tcpdump
在具有主动侦听端口 8000 的服务的主机上的输出,当另一台计算机尝试连接时会出现该输出:
04:43:09.154362 IP 192.168.1.3.56608 > 192.168.1.183.8000: Flags [S], seq 3664350430, win 64240, options [mss 1460,sackOK,TS val 2819866111 ecr 0,nop,wscale 7], length 0
04:43:09.154417 IP 192.168.1.183 > 192.168.1.3: ICMP host 192.168.1.183 unreachable - admin prohibited filter, length 68
nmap
扫描时会发生以下情况:
04:44:49.060156 ARP, Request who-has 192.168.1.183 tell 192.168.1.3, length 46
04:44:49.060177 ARP, Reply 192.168.1.183 is-at 74:e6:e2:da:19:0f, length 28
04:44:49.156156 IP 192.168.1.3.33094 > 192.168.1.183.8000: Flags [S], seq 4114316293, win 1024, options [mss 1460], length 0
04:44:49.156260 IP 192.168.1.183 > 192.168.1.3: ICMP host 192.168.1.183 unreachable - admin prohibited filter, length 52
iptables
是完全地明确,所有默认链上的政策,和上ACCEPT
没有任何规则。filter
nat
mangle
服务能localhost
可以使用机器本身的机器 IP进行本地访问。唯一的问题是尝试从网络访问。
我的机器上确实有 Docker,但为了尝试解决这个问题,我禁用了 Docker 并删除了它的所有iptables
规则和链。如果服务作为 Docker 容器启动,它们是能够从网络到达。但我正在尝试运行一项服务外部一个容器的。
该机器还安装了 VirtualBox(如果相关的话),但在测试时没有运行任何 VirtualBox 机器。
另外值得注意的是,主机上运行的 SSH 服务器能成功访问 - 这是唯一可以访问的服务,无论其他服务正在运行:
Starting Nmap 7.91 ( https://nmap.org ) at 2022-01-26 11:00 UTC
Nmap scan report for 192.168.1.183
Host is up (0.00035s latency).
Not shown: 65534 filtered ports
PORT STATE SERVICE
22/tcp open ssh
MAC Address: *redacted*
Too many fingerprints match this host to give specific OS details
Nmap done: 1 IP address (1 host up) scanned in 78.45 seconds
是否有某个地方的内核设置导致了这种情况的发生?
编辑:按照这里的要求是iptables-save
输出,但它完全是空的......
# Generated by iptables-save v1.8.7 on Wed Jan 26 06:17:24 2022
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Wed Jan 26 06:17:24 2022
# Generated by iptables-save v1.8.7 on Wed Jan 26 06:17:24 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Wed Jan 26 06:17:24 2022
答案1
原来是库班图与最近的 CentOS 版本有相同的“问题”因为它使用nftables
,所以iptables
可以完全清楚,但还有另一个防火墙在使用 IP 堆栈。
如果您想禁用这个额外的防火墙并仅使用 iptables,快速解决方案是执行:
sudo systemctl disable --now firewalld