您如何在客户站点调试应用程序的防火墙问题?目前我们有一个问题,Apache 和 Tomcat(应用程序的一部分)抛出错误,听起来好像防火墙阻止了我们尝试接受或绑定到机器上的端口。
对我们来说,问题是我们看不到防火墙在做什么,因为它是在公司级别进行管理的。有没有办法确定我们是否被阻止或者它是否是特定于应用程序的问题。这是一个java应用程序。
您如何在客户站点调试应用程序的防火墙问题?目前我们有一个问题,Apache 和 Tomcat(应用程序的一部分)抛出错误,听起来好像防火墙阻止了我们尝试接受或绑定到机器上的端口。
对我们来说,问题是我们看不到防火墙在做什么,因为它是在公司级别进行管理的。有没有办法确定我们是否被阻止或者它是否是特定于应用程序的问题。这是一个java应用程序。
您可能会因为在此处提出属于 Superuser 或 Serverfault 的问题而感到悲伤。
简单的答案:登录到任何试图与另一台通信的服务器,并使用 telnet 模拟请求:
telnet OtherServer PortNumber
如果您收到“连接被拒绝”,则其他服务不存在或防火墙使其不可见。如果没有任何反应,您可能会撞到防火墙。如果你建立了联系(不管在那之后是否有任何有趣的事情发生),你就成功了。
编辑:是的,我知道这很简单。一个聪明的虐待狂或非常无能的防火墙设置有可能让请求进入您的服务器,但使其无法响应该请求。但是我从来没有遇到过这样的场景。更常见的是简单的通过/不通过的情况。
如果您想要更多合格的建议,也许您可以从您的服务器复制一些错误消息和/或堆栈跟踪。
如果您无法从运行在该服务器上的 Apache 或 Tomcat 绑定到 Apache/Tomcat 服务器上的端口,那么这很可能是其他两个问题之一:
lsof -i :port
和netstat -ant | grep port
.
端口号低于 1025 且运行 Apache/Tomcat 的进程不是 root。
traceroute(Windows 的 tracert)对于查看事情的进展情况来说是一件好事。
UPnP 工具也很适合在途中看到防火墙。
如果防火墙在“公司级别”进行管理,它听起来不像是基于主机的防火墙(基于主机的防火墙是“在您运行的计算机上”)。如果它不是基于主机的防火墙,它就无法阻止您的绑定尝试,您可以查看其他地方。
如果它是基于主机的......那么那是一个积极的基于主机的防火墙。您更有可能没有管理员或 root 权限来绑定到端口。
如果可以绑定端口,但无法通信,则需要开始进行标准防火墙测试——“我可以从 Internet 访问静态 html 页面吗?来自 Intranet?来自 localhost?”
这只是我的经验,但是 HTTP(S) 上的防火墙问题的迹象是请求挂起一段时间,然后超时并出现连接超时异常。根据防火墙的不同,连接也可能立即被拒绝。所以这就是我们不得不求助于调试防火墙问题的方法。解决办法总是去找网络管理员(我们与那个团队建立了良好的关系)并要求他们让特定的 IP 地址进入。