Mac OS X Server忽略远程HTTP连接,但接受本地连接


5

我无法让Mac OS X Server的Web服务器接受来自同一LAN上其他计算机的连接。这是在OS X 10.8.2上,运行在最初与Lion Server一起提供的Mac mini上。

可以从服务器本身连接到它,例如转到Safari http://localhosthttp://hostname.example.com在Safari中。

请注意,通过框的域名连接起作用。这是因为:

$ netstat -na | grep 80.*LISTEN
tcp46      0      0  *.80                   *.*                    LISTEN 

也就是说,Apache正在监听所有接口,而不仅仅是lo

如果我telnet server 80在客户机上同时进行数据包捕获,我只会看到重复的TCP SYN数据包。(服务器角度客户角度

在“安全和隐私设置”窗格中禁用防火墙不会更改症状。

防火墙配置对我来说无害。(通过倾倒pfctl -sa。)

我确定问题不在客户端。我试过从以下位置访问它:

  • 一个月大的iMac超过GigE
  • 一台2岁的MacBook Pro,通过WiFi
  • 一款5年历史的上网本,通过GigE WiFi 运行Ubuntu 12.04

这台服务器是无头的,我通过SSH和VNC从局域网上的客户端机器上完成所有工作。这意味着当我无法在TCP端口80上连接到此服务器时,我在TCP端口22和5900上成功使用它。这种行为导致我开始查看防火墙配置。

这是网络的样子:

家庭办公网络

有两个网络交换机,因为这个网络分布在两个房间,每个房间有一个交换机,在它们之间有一根电缆。我排除了托管交换机作为WiFi测试的问题来源。我通过从服务器到管理型交换机临时运行一根长电缆来免除哑巴开关。

电缆调制解调器和WiFi路由器(AirPort Extreme)都内置了4端口交换机,但每个端口只使用一个端口,因此没有流量通过它们并不是绝对必须的。两台路由器上的DHCP和缓存DNS服务器都已关闭,因为这些职责正在由相关服务器完成(成功!)。AirPort处于仅桥接模式。

是的,我重新启动了服务器。和客户。和路由器。和开关。:)

我最好的猜测是问题源于从Lion Server升级此框。如果是这样,完全重新安装将解决这个问题,但这违反了我所有的Unix服务器管理培训。如果可以的话,我想修复这台服务器。

Answers:


4

OS X实际上有(至少)3个防火墙。由于你已经关闭了应用程序防火墙(在系统偏好设置 - >安全和隐私 - >防火墙中)并检查了Berkeley数据包过滤器(pfctl -sa),我猜它是正在进行阻塞的旧ipfw。您可以查看sudo ipfw show- 这将列出活动规则,以及每个应用的数据包和字节数:

$ sudo ipfw show
01000 19228642 23229993542 allow ip from any to any via lo0
01010        0           0 deny ip from any to 127.0.0.0/8
[etc...]
65534    23505     3467352 deny ip from any to any
65535        0           0 allow ip from any to any

如果你的列表只显示规则#65535(最后的允许规则),我的猜测是错误的,你必须寻找其他地方。如果它确实显示其他规则,您可能在某处安装了第三方防火墙配置程序(我不认为Apple提供的ipfw配置软件仍然存在于10.8); 在/ Library / StartupItems和/ Library / LaunchDaemons中查看可能相关的内容。


你的猜测是正确的。修复是sudo ipfw add 20000 allow tcp from any to any dst-port 80。我很想接受你的答案,但这感觉就像是黑客而不是真正的解决方案。有什么我可以要求系统重建以将旧防火墙与新防火墙同步,或导致它停止使用旧防火墙?
Warren Young

@WarrenYoung你必须追踪激活它的内容。ipfilter本身不保留设置; 它必须在每次重启后进行配置和激活,因此您需要跟踪激活它的内容。检查/ Library / StartupItems和/ Library / LaunchDaemons以查找可能打开它的任何内容。此外,查看是否存在/ etc / ipfilter文件夹 - 这是Apple在其服务器软件使用时用于存储配置的位置,并且某些标准系统组件可能会根据该文件夹的存在来激活它。
Gordon Davisson 2014年

另一个正确的猜测:/etc/ipfilter/ipfw.conf存在,并且没有端口80规则,但最后确实有一个默认的拒绝规则。ipfwmigrator在我升级操作系统时创建它时,显然没有做正确的事情。
Warren Young

@WarrenYoung在这种情况下,我会尝试连续三个:如果删除该文件夹并重新启动,ipfw会关闭吗?
Gordon Davisson 2014年

本垒打。ipfw show65535 0 0 allow ip from any to any,而nmap server只显示了预期的开放端口和488个端口过滤,表明该服务器确实还是有一个正在运行的防火墙。
Warren Young

1

打开Console.app并检查/var/log/appfirewall.log。您将查看连接请求是否甚至到达应用防火墙。如果它到达那里并且允许接下来检查/ var / log / apache2 / access_log和/ var / log / apache2 / error_log以查看请求是否到达Apache。如果请求到达Apache,则问题可能出在Apache配置文件中。如果以上日志都没有显示任何内容,请检查system.log以获取其他线索。


Re:logs:当我从客户端尝试时,我在日志中什么也得不到telnet server 80。但是,当从SSH会话连接到端口80到该服务器时,我也什么也得不到。这是关闭打开系统首选项防火墙。因此,我不清楚应用程序防火墙是否完全控制对Apache的访问。
Warren Young

Re:Apache配置文件:我还没碰过它们。大多数时间戳都是Aug 26 16:09,除了一些甚至更旧的文件。那是在10.8.2出现之前大约三周,这就是这台机器运行的原因,所以可能是负责为OS X打包Apache的Apple员工在操作系统更新中发布最终包的日期。此外,糟糕的Apache配置无法解释为什么服务器的网络堆栈不发送SYN-ACK数据包。
Warren Young

这是我的10.8.2系统的appfirewall.log出现在我的家庭局域网上另一台机器上从端口80连接到它时的情况。Feb 6 19:37:38 honeysmacks socketfilterfw[133] <Info>: Allow httpd connecting from 192.168.1.128:51744 to port 80 proto=6我的Apache access_log显示192.168.1.128 - - [06/Feb/2013:19:37:46 -0800] "GET / HTTP/1.1" 200 44
HairOfTheDog 2013年

感谢那。要回答这个问题,您需要解释为什么数据包进入服务器的距离足以让tshark他们看到它们,但目前还没有应用防火墙看到它们,以及如何解决这个问题。由于缺乏这种解释,这个信息只是在标有“Nuke and pave,dude”的平衡秤上放了几克。
Warren Young
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.