Введение / Зачем это нужно
Встроенный брандмауэр (Application Firewall) в macOS — это ваш первый барьер против несанкционированного входящего сетевого подключения. Он не позволяет посторонним программам или злоумышленникам из интернета устанавливать соединение с вашим Mac без вашего явного разрешения. Настройка брандмауэра — одна из ключевых базовых мер безопасности, которая не требует установки стороннего ПО и работает на уровне системы. После выполнения этого гайда вы сможете контролировать, какие приложения могут принимать входящие соединения, и получите понимание, как работает сетевая защита в macOS.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть учётная запись с правами администратора.
- Установлена актуальная версия macOS (гайд актуален для macOS Sonoma, Ventura и Monterey).
- Вы знакомы с базовым использованием Терминала (Terminal) для шагов, связанных с CLI.
Шаг 1: Включение и базовая настройка через System Settings
Самый простой способ управлять брандмауэром — через графический интерфейс.
- Откройте Системные настройки (System Settings).
- Перейдите в раздел Сеть (Network) → Брандмауэр (Firewall). В более старых версиях путь может быть
Безопасность и конфиденциальность (Security & Privacy)→ вкладкаБрандмауэр (Firewall). - Включите брандмауэр, нажав кнопку
Включить брандмауэр (Turn On Firewall)или переключив тумблер. Система может запросить пароль администратора. - Нажмите
Параметры (Options...)или `Дополнительно (Advanced)', чтобы открыть детальные настройки. - Здесь вы можете:
- Автоматически разрешать входящие подключения для подписанного ПО: Оставьте включённым для безопасности.
- Включить скрытый режим (Stealth Mode): Рекомендуется. Это не позволит вашему Mac отвечать на запросы диагностики (ICMP ping), делая его менее заметным в сети.
- Добавить приложения: Нажмите
+и выберите приложение из списка или через Finder. Для каждого добавленного приложения вы можете задать правило:Разрешать входящие подключения (Allow incoming connections)Блокировать входящие подключения (Block incoming connections)
- Удалить приложение из списка: выберите его и нажмите
-.
💡 Совет: Добавляйте в список только те приложения, которым действительно нужен сетевой доступ (веб-серверы, игры, файлообменники). Все остальные по умолчанию будут заблокированы.
Шаг 2: Управление правилами через Terminal (socketfilterfw)
Для автоматизации или удалённого управления используйте встроенную утилиту socketfilterfw. Она полностью дублирует функционал графического интерфейса.
# Проверить текущий статус брандмауэра (Application Firewall)
sudo socketfilterfw --getglobalstate
# Включить брандмауэр
sudo socketfilterfw --setglobalstate on
# Выключить брандмауэр (не рекомендуется)
sudo socketfilterfw --setglobalstate off
# Добавить приложение в список разрешённых (путь к .app)
sudo socketfilterfw --add /Applications/YourApp.app
# Разрешить входящие подключения для конкретного приложения
sudo socketfilterfw --unblockapp /Applications/YourApp.app
# Заблокировать приложение
sudo socketfilterfw --blockapp /Applications/YourApp.app
# Удалить приложение из списка правил
sudo socketfilterfw --remove /Applications/YourApp.app
# Показать список всех приложений с их статусом
sudo socketfilterfw --listapps
⚠️ Важно: Все команды
socketfilterfwтребуют прав суперпользователя (sudo). Указывайте полный путь к файлу приложения (.app).
Шаг 3: Проверка статуса и статистики
После настройки убедитесь, что брандмауэр работает.
- Через System Settings: Статус "Включён" должен быть активен.
- Через Terminal (статистика Application Firewall):
# Показать количество разблокированных и заблокированных соединений sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getblockedapps - Проверка активности в реальном времени (для pf):
Ищите строки# Мониторинг событий пакетного фильтра (требует включённого pf) sudo pfctl -s allStatus: EnabledиState: OPEN.
Шаг 4: Продвинутая настройка с помощью pf (Packet Filter)
Встроенный Application Firewall работает на уровне приложений. Для фильтрации по портам, IP-адресам или протоколам используется более мощный механизм — pf (Packet Filter). Это настоящий stateful firewall.
- Активация pf:
# Включить pf (обычно включён по умолчанию) sudo pfctl -e # Проверить статус sudo pfctl -s info - Создание и редактирование правил:
Основной конфигурационный файл —
/etc/pf.conf. Не редактируйте его напрямую, если не уверены в синтаксисе. Вместо этого создайте отдельный файл для своих правил, например/etc/pf.anchors/com.myname.rules, и подключите его в основном конфиге.
Пример правила для разрешения входящих соединений на порт 8080 (например, для локального веб-сервера):# Откройте терминал и создайте/отредактируйте файл правил sudo nano /etc/pf.anchors/com.myname.rules
Добавьте строку:pass in proto tcp from any to any port 8080
Сохраните (Ctrl+O,Enter) и выйдите (Ctrl+X). - Подключение правил в основном конфиге:
sudo nano /etc/pf.conf
Найдите секциюanchorи добавьте (или раскомментируйте) строку:anchor "com.myname.rules" from "/etc/pf.anchors/com.myname.rules"
Также убедитесь, что есть строкаload anchor(обычно она уже есть в шаблоне). - Перезагрузка правил без перезагрузки системы:
# Проверить синтаксис правил перед загрузкой (ОБЯЗАТЕЛЬНО!) sudo pfctl -nf /etc/pf.conf # Если синтаксис верный, загрузить новые правила sudo pfctl -f /etc/pf.conf # Включить/перезагрузить pf (если выключен) sudo pfctl -e - Сброс правил к состоянию по умолчанию (осторожно!):
sudo pfctl -F all -f /etc/pf.conf
⚠️ Критически важно: Всегда проверяйте синтаксис (
-nфлаг) перед загрузкой правил. Ошибка в конфиге может отключить весь сетевой трафик на вашем Mac, потребовав перезагрузки в безопасном режиме для исправления.
Проверка результата
- Для Application Firewall: Попробуйте запустить серверное приложение (например, Python HTTP-сервер:
python3 -m http.server 8000). С другого устройства в той же сети попробуйте подключиться кhttp://<ваш_ip_mac>:8000. Если брандмауэр блокирует, вы увидите ошибку соединения. Добавьте приложение в список разрешённых — и подключение должно пройти. - Для pf: После загрузки правила проверьте его presence:
Вы должны увидеть своё правилоsudo pfctl -s rules | grep 8080pass in proto tcp from any to any port 8080. Попробуйте подключиться к открытому порту с другого устройства.
Возможные проблемы
- Ошибка "Operation not permitted" при выполнении команд
pfctlилиsocketfilterfw: Вы не используетеsudoили ваша учётная запись не имеет прав администратора. - Не могу добавить приложение в список брандмауэра через GUI или CLI:
Убедитесь, что путь к приложению корректен и файл существует. Для приложений из App Store путь обычно
/Applications/AppName.app. Для приложений, запущенных впервые, система может сначала запросить разрешение на сетевой доступ в отдельном всплывающем окне. - После настройки pf правила не применяются, но синтаксис верный:
Проверьте, что в
/etc/pf.confесть строкаload anchorдля вашего файла правил и что сам файл правил (/etc/pf.anchors/com.myname.rules) существует и доступен для чтения. - После ошибки в pf.conf потерял сетевое соединение:
Это классическая проблема. Вам нужно загрузиться в безопасном режиме (Safe Mode), отключить
pf(правила не загружаются в Safe Mode), исправить конфигурационный файл и перезагрузиться. - Брандмауэр блокирует легитимное соединение, но приложение в списке разрешённых: Приложение может использовать вспомогательные процессы или дочерние приложения, которые не были добавлены в список. Добавьте в список основной исполняемый файл и все связанные утилиты. Также проверьте настройки самого приложения (некоторые имеют встроенный прокси или используют нестандартные порты).
- Правила pf не срабатывают для IPv6:
По умолчанию правила в
pf.confприменяются к IPv4. Для поддержки IPv6 явно укажите family в правиле или настройте отдельные правила:
Или используйтеpass in proto tcp from any to any port 8080 pass in inet6 proto tcp from any to any port 8080pass in proto tcp from any to any port 8080без указания family, что в современных версиях pf может работать для обеих версий, но лучше явно указывать.