为什么`net.inet.ip.forwarding`和`net.inet.ip.fw.enable`内核的sysctl设置保持启用状态,即使在运行Xserve 10.6.8的系统上禁用它们?

非常奇怪的情况。 我从前一个pipe理员那里inheritance了一些Xservers,我曾经负责在各个​​层次上进行清理。 我熟悉Ubuntu中的设置,对于命令行(包括从源代码编译)非常熟悉,也知道如何在OS X中操作命令行。 但是在运行10.6.8(Snow Leopard)的服务器上遇到了一些莫名其妙的问题。

首先,我想将软件防火墙彻底closures。 听起来很简单,进入服务器pipe理,只是告诉它停止正确的防火墙? 不! 所以,如果我closures防火墙,并且执行以下命令来加倍检查命令行:

sysctl -a | grep net.inet.ip.fw.enable 

结果如预期:

 net.inet.ip.fw.enable: 0 

但是如果我在5分钟左右再次检查它,它会再次变得神奇:

 net.inet.ip.fw.enable: 1 

与NAT转发同上。

 sysctl -a | grep net.inet.ip.forwarding 

在服务器pipe理中禁用它,结果如下:

 net.inet.ip.forwarding: 0 

几分钟后:

 net.inet.ip.forwarding: 1 

WTF?!? 我检查了crontabs,我是机器上唯一的用户。

我有另一台机器上的服务器pipe理应用程序设置为观看这台机器,但它并没有运行的所有时间。 而这个问题在那之前确实存在。 我不太熟悉sysctl所以需要一些指导。 FWIW,我在最近已经在/etc/sysctl.conf设置了一些以太网调整,但没有连接到上面的其他命令或设置。

为什么这些设置会在几分钟之后奇迹般地改变? 可以做些什么来阻止这一点。

在此先感谢帮助和指针。

编辑:根据下面的注释之一/etc/hostconfig内容:

 AFPSERVER=-NO- AUTHSERVER=-NO- TIMESYNC=-NO- QTSSWEBADMIN=-NO- QTSSRUNSERVER=-NO- MYSQLCOM=-YES- IPFORWARDING=-NO- 

只是一个想法,但你可以使用工具auditctl来看看哪些进程正在接触你的/etc/sysctl.conf

你可以在这个线程中阅读关于auditctl的更多信息:

具体这个答案:

要点是你运行这个命令:

 % sudo auditctl -pa -w /etc/sysctl.conf 

然后看日志文件,看看谁是有罪的过程:

 % tail -f /var/log/audit/audit.log 

好的,解决了这个问题 感谢所有的忠告人!

发生了什么事就是有一个Java应用程序通过这台机器上的Mac shell程序运行,它具有创build基于Jetty的Web界面的不同选项。 不知何故,这被设置为接pipe端口80-标准的HTTP端口,并通过将端口URL更改为其他内容(例如666666)来解决该问题。 net.inet.ip.fw.enablenet.inet.ip.forwarding停留设置为0 (又名:disabled),并且在HTTP端口被改为非标准端口时不会恢复原状。

也就是说,我仍然需要通过标准的80端口连接传送内容。 所以我打开了服务器上的Web服务,并设置了一个反向代理到端口666666.所有的行为都应该如此。

但是令我感到不安的是,应用程序如何能够接pipe一些sudo级别的function,比如设置sysctl选项,而不需要看pipe理员密码。 这是正常的Jetty应用程序或特殊的这个应用程序? 也许它需要一个pipe理员密码,当它被安装之前,我甚至去呢? 现在不知道或不在乎。 但是清除这个问题已经解决了这个盒子上的大量networking问题,现在这个应用程序不再劫持路由和防火墙function了。