IPTables 丢弃数据包

IPTables 丢弃数据包

我们在连接远程 FTP 站点时遇到了一些问题(连接时随机出现超时),虽然我们倾向于认为问题出在远程 FTP 服务器上(一个线索是我们只在这个特定的服务器上遇到问题,其他服务器都运行正常),但我们试图确保问题不是来自我们这边。

我在我们的代理服务器(Debian 6.0)的 kern.log 中偶然发现了以下条目:

proxy kernel: [ 4421.346444] deny-forward IN=eth0 OUT=eth1 SRC=xxx.xxx.xxx.xxx DST=yyy.yyy.yyy.yyy LEN=40 TOS=0x00 PREC=0x00 TTL=62 ID=59026 PROTO=TCP SPT=32116 DPT=21 WINDOW=8192 RES=0x00 ACK PSH FIN URGP=0

iptables -L 给出链式转发的以下输出(为清楚起见已缩短):

Chain FORWARD (policy DROP)
target     prot opt source               destination         
TCPMSS     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU 
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:53 flags:0x17/0x02 
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:53 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:53 flags:0x17/0x02 
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:53 
ACCEPT     tcp  --  xxx.xxx.xxx.xxx          0.0.0.0/0           state NEW tcp dpt:21 flags:0x17/0x02 
LOG        all  --  0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `deny-forward ' 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable

这些丢包是否与所述问题有关这里? 这些可能是导致远程服务器连接有时失败的原因吗?

答案1

是的,丢包可能是连接有时失败的原因。由于问题只出在那台服务器上,我很确定问题不在你这边。你可以做一些简单的测试来查看是否有任何数据包丢失,例如 ping 几个小时,看看它是否报告数据包丢失,也可以 ping 另一台或两台服务器来比较结果(有更好的方法来测试数据包丢失,但我发现 ping 是一种快速简便的测试方法,如果发现问题,你可以从那里继续)。

至于导致数据包丢失的原因,谁也说不准。可能是路由器坏了、防火墙过热、以太网端口坏了、或者电缆坏了,等等……我遇到过防火墙使用过度,偶尔会过热、不稳定、连接中断、总体反应迟钝的情况。

您可能需要运行 tcpdump 来嗅探您这边和远程服务器之间的 ftp 流量。它应该能让您很好地了解正在发生的事情。特别是如果您让它更详细,即:

tcpdump -w example.dump -i any -nnvvXSs 65535 tcp port XXX

这将记录整个数据包。然后使用 tcpdump 或其他工具进行分析,并将其通过管道传输到 grep、less 等

tcpdump -nnvvXSs 65535 -r example.dump

您可以专门搜索诸如 tcp-rst 之类的内容,如下所示:

tcpdump -nnvvXSs 65535 -r example.dump 'tcp[tcpflags] & tcp-rst != 0 and tcp[tcpflags] & tcp-ack != 0' and tcp port XXX

相关内容