![如何检测来自我的 Linux 机器的 TCP 请求是否被防火墙阻止?](https://linux22.com/image/482263/%E5%A6%82%E4%BD%95%E6%A3%80%E6%B5%8B%E6%9D%A5%E8%87%AA%E6%88%91%E7%9A%84%20Linux%20%E6%9C%BA%E5%99%A8%E7%9A%84%20TCP%20%E8%AF%B7%E6%B1%82%E6%98%AF%E5%90%A6%E8%A2%AB%E9%98%B2%E7%81%AB%E5%A2%99%E9%98%BB%E6%AD%A2%EF%BC%9F.png)
我有一个应用程序被防火墙阻止,但没有将失败记录到任何类型的日志中。我已经打开了防火墙的漏洞,但有没有一种好的方法可以查看实际的请求是什么,以便我能够弄清楚为什么会发生这种情况?
答案1
有没有好的方法可以查看实际请求是什么?
运行网络嗅探器,如 tcpdump 或 wireshark。您可以捕获整个数据包并查看所有内容。您可以使用 tcpdump 构建捕获,然后使用 wireshark 进行分析,命令如下tcpdump -qni eth0 -s 0 -w 文件名.dmp。
为使将来的故障排除更加容易,您可以做的一件事就是运行两个 tcpdump 副本。将一个设置为使用内部接口,另一个设置为使用外部接口。如果需要,为特定主机添加过滤器。观察流量穿过计算机时的情况,如果它从一侧进入,而没有从另一侧出去,那么您可以假设防火墙阻止了它。
答案2
在您的服务器和远程服务器上使用 wireshark(ethereal)或 tcpdump 将为您提供流量的完整信息。
在我看来,最简单的选择是启用对发出您认为可能阻止该请求的服务器的任何防火墙规则的日志记录,或者对防火墙本身进行跟踪。
如果这一切都在非生产设备上进行,并且您只有对客户端的管理访问权限,则可以使用连接到防火墙远端的集线器来镜像所有流量并从那里进行 wireshark/tcpdump 跟踪。
答案3
我使用了命令
netstat -an | grep -i ack
确定是否有半开放的 TCP 请求来自我的服务器,但我需要一个好方法来查看请求的内容。目标服务器是一台将 Web 服务调用路由到相应机器的机器,因此我仍需要更多信息来确定实际调用了哪个 Web 服务。
答案4
因为您可以控制防火墙...
如果要记录丢弃的数据包,请配置日志记录规则。例如:
-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。希望是!:))