Debian

一些數據包在到達防火牆之前被阻止

  • July 25, 2019

我有一個監聽 20514 埠的應用程序:

$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 192.168.100.213:20514   0.0.0.0:*                           3629/python3

我可以看到使用 tcpdump 進入我的電腦的數據包

$ sudo tcpdump -i enp0s25 -n -N udp port 20514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp0s25, link-type EN10MB (Ethernet), capture size 262144 bytes
15:54:56.832307 IP 172.18.248.3.514 > 192.168.100.213.20514: SYSLOG user.critical, length: 111

iptables (此時)允許一切。請注意,儘管我們在上面看到了一個,但它不會報告任何與來自 172.18.248.0/28 的規則匹配的數據包。在任何強制轉換中,-P INPUT 都是接受

$ sudo iptables -L -v
Chain INPUT (policy ACCEPT 134 packets, 79373 bytes)
pkts bytes target     prot opt in     out     source               destination
   0     0 ACCEPT     tcp  --  any    any     192.168.100.0/24     anywhere             tcp dpt:ssh
4745  282K ACCEPT     tcp  --  any    any     10.8.0.0/24          anywhere             tcp dpt:ssh
   0     0 ACCEPT     all  --  any    any     172.18.248.0/28      anywhere

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 533 packets, 89933 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain DOCKER (0 references)
pkts bytes target     prot opt in     out     source               destination

Chain DOCKER-ISOLATION-STAGE-1 (0 references)
pkts bytes target     prot opt in     out     source               destination

Chain DOCKER-ISOLATION-STAGE-2 (0 references)
pkts bytes target     prot opt in     out     source               destination

Chain DOCKER-USER (0 references)
pkts bytes target     prot opt in     out     source               destination

Chain LOGACCEPT (0 references)
pkts bytes target     prot opt in     out     source               destination
   0     0 LOG        all  --  any    any     anywhere             anywhere             LOG level info prefix "INPUT:ACCEPT:"
   0     0 ACCEPT     all  --  any    any     anywhere             anywhere

因此,似乎數據包在進入介面後但在到達防火牆之前被停止。

我還能在哪裡查看為什麼進入我的機器的數據包沒有到達應用程序?

事實證明,Docker 正在與與數據包的源地址重疊的網路建立介面。

即使我已經清除了 docker 在 IPtables 中製定的​​所有規則,我最終還是不得不更改 /etc/docker/daemon.json 以在不同的 IP 範圍內啟動網路。然後我刪除了所有容器並刪除了 Docker 創建的所有網路。可能有一種破壞性較小的方法來完成刪除 docker 網路介面,但我沒有附加任何東西。

之後數據包通過。因此,干擾似乎是網路介面本身。

引用自:https://serverfault.com/questions/976707