如何在网络接口上阻止对 Apache 的请求?

如何在网络接口上阻止对 Apache 的请求?

问题:我的 Macbook Pro 上有一个本地 Apache 实例。我需要它监听除 en0 和 en1 之外的所有网络接口(基本上,从 Parallels 监听 lo 和 vnicX)。

我知道“Listen *:80”,但这不是这种特殊情况下的解决方案。我能想到的唯一办法是使用 OS X 防火墙阻止这些接口上传入 Apache 的请求。但我找不到任何可行的示例,也无法自己制定这样的规则。

有人可以帮忙吗?

答案1

Apache 可以配置监听所有地址 ( Listen *:80) 或特定地址 ( Listen 192.168.23.42:80)。无法将其配置为不是监听特定地址(或接口)。如果你想要这样做,你必须使用防火墙阻止这些接口上的连接。类似下面的方法可能会奏效:

ipfw add deny any to dst-port 80 in via en0
ipfw add deny any to dst-port 80 in via en1

答案2

我建议使用防火墙设置。它们位于“设置”->“安全和隐私”->“防火墙”中。

答案3

在阅读 OS X 安全指南后,我使用了 ipfw。它在 Mountain Lion 中运行良好。以下是我所做的:

创建一个名为 /etc/ipfw.conf 的文件,内容如下:

 add 1000 deny tcp from any to any dst-port 80 via en0
 add 2000 deny tcp from any to any dst-port 80 via en1

如果您使用 USB 调制解调器,您可能需要采用略有不同的规则集(例如,阻止所有但允许“lo0”接口)。

创建一个名为 /Library/LaunchDaemons/ipfw.plist 的文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://
     www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
    <string>ipfw</string>
  <key>Program</key>
    <string>/sbin/ipfw</string>
  <key>ProgramArguments</key>
    <array>
      <string>/sbin/ipfw</string>
      <string>/etc/ipfw.conf</string>
    </array>
  <key>RunAtLoad</key>
    <true />
</dict>
</plist>

使用 launchd 注册:

 launchctl load -w /Library/LaunchDaemons/ipfw.plist

检查规则是否已注册:

ipfw print

你应该得到:

01000 deny tcp from any to any dst-port 80 via en0
02000 deny tcp from any to any dst-port 80 via en1
65535 allow ip from any to any

最后一条规则需要!

现在您可以尝试从另一台计算机连接到您自己的电脑并检查连接是否被阻止。请注意,您始终可以从自己的电脑连接到自己的电脑。尝试使用您的智能手机或朋友的电脑。

相关内容