Alex Argo Asked: 2009-05-13 15:40:11 +0800 CST2009-05-13 15:40:11 +0800 CST 2009-05-13 15:40:11 +0800 CST 如何检测来自我的 linux 机器的 TCP 请求被防火墙阻止? 772 我有一个应用程序被防火墙阻止,但没有将故障记录到任何类型的日志中。我已经在防火墙上打开了这个洞,但是有没有一种好方法可以查看实际请求是什么,以便我首先弄清楚为什么会发生这种情况? firewall linux iptables 5 个回答 Voted Zoredache 2009-05-13T16:11:59+08:002009-05-13T16:11:59+08:00 有什么好方法可以查看实际请求是什么? 运行网络嗅探器,如 tcpdump 或 wireshark。您可以捕获整个数据包并查看所有内容。您可以使用 tcpdump 构建要使用wireshark 分析的捕获,使用类似tcpdump -qni eth0 -s 0 -w filename.dmp的命令。 您可以做的一件事是让将来的故障排除更容易,只需运行两个 tcpdump 副本。设置一个使用内部接口,一个使用外部接口。如果需要,为特定主机添加过滤器。观察穿过计算机的流量 如果它从一侧进入而在另一侧没有流出,那么您几乎可以假设防火墙阻止了它。 sclarson 2009-05-13T16:39:39+08:002009-05-13T16:39:39+08:00 在您的服务器和远程服务器上使用wireshark(ethereal) 或tcpdump 可以让您全面了解流量。 在我看来,最简单的选择是启用任何适用于服务器的防火墙规则的日志记录,该服务器发出您认为可能会阻止它的请求,或者在防火墙本身上进行跟踪。 如果这一切都在非生产设备上,并且您只有对客户端的管理访问权限,您可以使用连接到防火墙远端的集线器来镜像所有流量并从那里获取 wireshark/tcpdump 跟踪。 Alex Argo 2009-05-13T15:42:39+08:002009-05-13T15:42:39+08:00 我使用了命令 网络统计-an | grep -i ack 确定有一半打开的 TCP 请求来自我的服务器,但我需要一种查看请求内容的好方法。目标服务器是一台将 Web 服务调用路由到相应机器的机器,因此我仍然需要更多信息来确定实际调用了哪些 Web 服务。 squillman 2009-05-13T16:05:18+08:002009-05-13T16:05:18+08:00 如果您在防火墙上打开了端口,则再次将其关闭并启用该过滤器/代理的日志记录。您应该能够看到防火墙丢弃数据包的原因。 MikeyB 2009-05-14T05:07:07+08:002009-05-14T05:07:07+08:00 由于您可以控制防火墙... 如果要记录被丢弃的数据包,请配置记录规则。就像是: -A INPUT -i eth0 -p tcp -m limit --limit 3/min -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j LOG --log-prefix "eth0-DROP-DEFLT " --log-tcp-options --log-ip-options -A INPUT -i eth0 -p icmp -m limit --limit 3/min -j LOG --log-prefix "eth0-DROP-DEFLT " --log-tcp-options --log-ip-options -A INPUT -i eth0 -p udp -m limit --limit 3/min -j LOG --log-prefix "eth0-DROP-DEFLT " --log-tcp-options --log-ip-options -A INPUT -i eth0 -m limit --limit 3/min -m state --state INVALID -j LOG --log-prefix "eth0-DROP-DEFLT-INV " --log-tcp-options --log-ip-options 可能会为你工作。酌情修改。 (写完后我意识到……你的防火墙可能不是 Linux。希望是!:))
运行网络嗅探器,如 tcpdump 或 wireshark。您可以捕获整个数据包并查看所有内容。您可以使用 tcpdump 构建要使用wireshark 分析的捕获,使用类似tcpdump -qni eth0 -s 0 -w filename.dmp的命令。
您可以做的一件事是让将来的故障排除更容易,只需运行两个 tcpdump 副本。设置一个使用内部接口,一个使用外部接口。如果需要,为特定主机添加过滤器。观察穿过计算机的流量 如果它从一侧进入而在另一侧没有流出,那么您几乎可以假设防火墙阻止了它。
在您的服务器和远程服务器上使用wireshark(ethereal) 或tcpdump 可以让您全面了解流量。
在我看来,最简单的选择是启用任何适用于服务器的防火墙规则的日志记录,该服务器发出您认为可能会阻止它的请求,或者在防火墙本身上进行跟踪。
如果这一切都在非生产设备上,并且您只有对客户端的管理访问权限,您可以使用连接到防火墙远端的集线器来镜像所有流量并从那里获取 wireshark/tcpdump 跟踪。
我使用了命令
确定有一半打开的 TCP 请求来自我的服务器,但我需要一种查看请求内容的好方法。目标服务器是一台将 Web 服务调用路由到相应机器的机器,因此我仍然需要更多信息来确定实际调用了哪些 Web 服务。
如果您在防火墙上打开了端口,则再次将其关闭并启用该过滤器/代理的日志记录。您应该能够看到防火墙丢弃数据包的原因。
由于您可以控制防火墙...
如果要记录被丢弃的数据包,请配置记录规则。就像是:
可能会为你工作。酌情修改。
(写完后我意识到……你的防火墙可能不是 Linux。希望是!:))