Проблема: на моем Macbook Pro установлен локальный экземпляр Apache. Мне нужно, чтобы он слушал все сетевые интерфейсы, кроме en0 и en1 (в основном, слушал lo и vnicX от Parallels).
Я знаю про "Listen *: 80", но в данном случае это не решение. Единственное, что я мог представить, - это использовать брандмауэр OS X для блокировки входящих запросов к Apache на этих интерфейсах. Но я не мог найти ни одного рабочего примера и не мог сам составлять такие правила.
Может кто-нибудь помочь, пожалуйста?
Вместо этого я бы использовал настройки брандмауэра. Они находятся в Настройках -> Безопасность и конфиденциальность -> Брандмауэр.
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
Прочитав руководство по безопасности 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
Последнее правило является нужно!
Теперь вы можете попробовать подключиться из другой компьютер на свой и убедитесь, что соединение заблокировано. Обратите внимание, что вы всегда можете подключиться со своего компьютера к своему компьютеру. Попробуйте свой смартфон или компьютер друга.