$sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps
ALF: total number of apps = 2
1 : /Applications/some.app
( Allow incoming connections )
2 : /Applications/another.app
( Block incoming connections )
上述命令显示 another.app 是我防火墙信任的应用程序列表的一部分,但它被设置为阻止传入连接。我如何从命令行将其设置为允许传入连接,并使更改立即生效?
答案1
我遇到过同样的问题,通过在运行 Mac OS X 10.8 应用程序防火墙 (socketfilterfw) 的情况下卸载/加载 MacPorts httpd 来“解决”了该问题。不知道为什么这样做有效。一个线索是,我一运行加载,就会弹出一个提示,询问是否允许连接。尽管已经在文件墙选项 GUI 中输入了 MacPorts httpd 应用程序,但仍然如此。
- 系统偏好设置 > 安全和隐私 > 防火墙:如果防火墙已关闭,则将其打开
sudo port unload apache2
sudo port load apache2
修复前:
Aug 27 22:42:59 mac1 socketfilterfw : Deny _ connecting from mac2 to port _ proto=6
修复中:
Aug 27 22:44:05 mac1 socketfilterfw : httpd is listening from :::_ proto=6
修复后:
Aug 27 22:45:32 mac1 socketfilterfw : Allow _ connecting from mac2 to port _ proto=6
我搜索了“httpd is listening”,在过去的几天里,这是 appfilewall 日志中唯一出现的现象。
希望这对某些人有帮助。我不知道为什么它对我有用,但我已经用过两次了……今天和大约六周前。系统每周都会重启。
答案2
您可以通过使用 -h 运行来获取有关 socketfilterfw 的更多信息:
# /usr/libexec/ApplicationFirewall/socketfilterfw -h
usage: /usr/libexec/ApplicationFirewall/socketfilterfw [-c] [-w] [-d] [-l] [-T] [-U] [-B] [-L] [-a listen or accept] [-s file to sign] [-v file to verify] [-p pid to write] [--getglobalstate] [--setglobalstate on | off] [--getblockall] [--setblockall on | off] [--listapps] [--getappblocked <path>] [--blockapp <path>] [--unblockapp <path>] [--add <path>] [--remove <path>] [--getallowsigned] [--setallowsigned] [--getstealthmode] [--setstealthmode on | off] [--getloggingmode] [--setloggingmode on | off]
...
--unblockapp <path> unblock the application at <path>
因此,对于你的情况,你可以这样做:
# /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/another.app
如果你仍然无法点击它,请确保检查 ipfw:
# ipfw -a l
65535 0 0 allow ip from any to any
如果您有其他规则,您可以:
# ipfw flush
去掉它们。
如果这些都不起作用,请尝试禁用它们并查看是否仍然无法连接:
# sysctl -w net.inet.ip.fw.enable=0
# /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
Firewall already disabled
如果您仍然遇到问题,那么 apache 可能存在配置问题。