Назад | Перейти на главную страницу

Как заблокировать запросы к Apache в сетевом интерфейсе?

Проблема: на моем 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

Последнее правило является нужно!

Теперь вы можете попробовать подключиться из другой компьютер на свой и убедитесь, что соединение заблокировано. Обратите внимание, что вы всегда можете подключиться со своего компьютера к своему компьютеру. Попробуйте свой смартфон или компьютер друга.