Как установить и настроить Advanced Policy Firewall (APF) на CentOS 5.3
Автор: Leszek Taczkowski
Кратко
APF — лёгкий интерфейс к iptables для быстрого развёртывания полноценного брандмауэра на Linux. В этом руководстве подробно показано, как установить APF на CentOS 5.3 (пример на сервере с cPanel), настроить основные параметры, протестировать правила и подготовить систему к боевой эксплуатации. Если вы разворачиваете удалённый сервер, сначала держите режим разработки включённым (DEVEL_MODE).
Введение
Advanced Policy Firewall (APF) — это оболочка для iptables (netfilter), спроектированная для типичных нужд современных серверов Linux. Конфигурация читаема и комментирована, управление выполняется через команду apf. APF подходит для большинства дистрибутивов с iptables; в примерах использован CentOS 5.3, так как cPanel официально рекомендует CentOS.
Цель руководства: показать последовательные шаги установки, настройки и проверки APF, а также дать операционные чеклисты, критерии приёмки и тестовые сценарии.
Важно: все команды следует выполнять с правами root или через sudo.
Предпосылки
- Дистрибутив с установленным iptables (в CentOS это стандарт). Если iptables встроен в ядро как модуль, убедитесь, что модуль доступен.
- Доступ к консоли сервера (SSH). Для удалённых серверов включите DEVEL_MODE во время конфигурации.
- Список портов и служб, которые должны быть доступны (особенно если используется cPanel).
Полезная ссылка о портах cPanel: http://docs.cpanel.net/twiki/bin/view/AllDocumentation/AllFAQ/LinuxFAQ#Which_ports_should_be_open_if_I
Установка
Сначала скачиваем архив с APF и распаковываем:
wget http://www.rfxn.com/downloads/apf-current.tar.gzРаспаковка и переход в каталог:
tar -zxvf apf-current.tar.gz
cd apf-9.7-1Запуск инсталлятора:
sh ./install.shПосле установки APF выведет расположение исполняемых файлов и конфигурационных файлов, а также порты, обнаруженные на системе. Проверьте эти значения — ошибочные номера портов могут привести к блокировке нужных сервисов.
Основные файлы и команды
- Конфигурация APF: /etc/apf/conf.apf
- Исполняемый файл: /usr/local/sbin/apf (место установки может отличаться — смотрите вывод инсталлятора)
- Полезные команды:
/usr/local/sbin/apf -s # start APF
/usr/local/sbin/apf -r # restart APF
/usr/local/sbin/apf -f # stop APF
/usr/local/sbin/apf -l # list statistics
/usr/local/sbin/apf -st # status of APF
/usr/local/sbin/apf -a host # allow connections from host
/usr/local/sbin/apf -d host # deny connections from hostКонфигурация
Откройте основной файл конфигурации и отредактируйте под вашу среду:
nano -w /etc/apf/conf.apfФайл хорошо комментирован; ниже — примечания по ключевым параметрам, приведённые с пояснениями и рекомендациями.
DEVEL_MODE=”1” — включите на время настройки. В этом режиме создаётся cron-задача, которая каждые 5 минут отключает APF, что позволяет восстановить доступ при ошибке конфигурации. После проверки переключите в 0.
SET_MONOKERN=”0” — укажите 1, если у вас монолитное ядро и iptables не собраны как модули. Если APF жалуется на невозможность загрузить модуль ip_tables, установите это значение в 1.
IFACE_IN и IFACE_OUT — сетевые интерфейсы, подключённые к внешней сети (обычно eth0 или другое имя интерфейса в новых ядрах). Пример:
IFACE_IN="eth0"
IFACE_OUT="eth0"- IG_TCP_CPORTS — список входных (inbound) TCP-портов, которые нужно открыть через брандмауэр. Пример для сервера с cPanel:
IG_TCP_CPORTS="20,21,22,25,26,37,43,53,80,110,113,143,443,465,873,993,995,2077,2078,2082,2083,2086,2087,2095,2096,3306,6666"- IG_UDP_CPORTS — входные UDP-порты, например:
IG_UDP_CPORTS="53,6277"- IG_ICMP_TYPES — типы ICMP, которые сервер будет принимать. По умолчанию в примере удалены 0 и 8 (ответы на ping) для снижения «видимости» в сети. Если ваша инфраструктура или мониторинг использует ping, оставьте стандартные типы.
IG_ICMP_TYPES="3,5,11,30"- EG_TCP_CPORTS и EG_UDP_CPORTS — исходящие порты. Контролируя исходящие соединения, вы уменьшаете риск компрометации системы, с которой атакующий попытается подключиться к внешним ресурсам.
EG_TCP_CPORTS="21,25,37,53,80,110,113,#123,443,43,873,953,2089,2703"
EG_UDP_CPORTS="20,21,53,873,953,6277"- TCP_STOP, UDP_STOP, ALL_STOP — реакция на нарушения правил: DROP, REJECT, RESET, PROHIBIT. Рекомендация для продакшена — DROP для большей скрытности, но REJECT может облегчить диагностику.
TCP_STOP="DROP"
UDP_STOP="DROP"
ALL_STOP="DROP"- BLK_PRVNET — блокировать ли приватные IPv4-адреса (RFC1918). Если сервер за NAT, установите 0, иначе 1 для дополнительной защиты.
BLK_PRVNET="1"Важно: перед применением правил дважды проверьте порты доступа (SSH, панель управления хостингом, система мониторинга).
Тестирование
При включённом DEVEL_MODE запускайте APF так:
/usr/local/sbin/apf -sПроверяйте статус и текущие правила:
/usr/local/sbin/apf -st
/usr/local/sbin/apf -lТестирование сетевых портов можно выполнять с помощью nmap или эквивалентных инструментов с удалённого хоста:
nmap -sS -p 1-65535 your.server.ipЕсли вы потеряли доступ, cron, созданный DEVEL_MODE, снимет правила через 5 минут, позволяя восстановить доступ и исправить конфигурацию.
Финальная подготовка
- После успешного тестирования в /etc/apf/conf.apf поменяйте DEVEL_MODE=”1” на DEVEL_MODE=”0”.
- Перезапустите APF:
/usr/local/sbin/apf -r- Включите автозапуск APF при загрузке системы. В CentOS используйте инструмент setup или chkconfig:
chkconfig --add apf
chkconfig apf onВ cPanel можно через System Services отметить APF.
Важно: сделайте резервную копию /etc/apf/conf.apf перед изменениями.
Когда APF не подходит и альтернативы
- APF полезен для простых и средних по сложности конфигураций. Для динамических правил на современных дистрибутивах рассматривайте firewalld (RHEL/CentOS 7+) или nftables.
- Если вам нужна интеграция с systemd, zone-based management или rich language GUI, firewalld удобнее.
- Для минималистичных систем и быстрых пробелов подойдёт ufw (Ubuntu) или прямое управление iptables для полного контроля.
Альтернативы:
- firewalld (RHEL/CentOS 7+, динамические зоны)
- nftables (новое поколение фильтрации пакетов)
- iptables напрямую (максимальная гибкость)
Методология развёртывания (мини-SOP)
- Подготовка: собрать список всех сервисов и портов; создать SSH-пользователя с несколькими способами доступа (ключ, резервный порт).
- Тестовая конфигурация: включить DEVELMODE, установить базовые IG и EG_ порты.
- Применение и проверка: запустить APF, протестировать доступность сервисов и мониторинг.
- Ревью: проверить логи, убедиться в отсутствии неожиданных блокировок.
- Заключительный шаг: выключить DEVEL_MODE, включить автозапуск, документировать конфигурацию.
Критерии приёмки
- APF запускается при загрузке и возвращает статус active.
- Доступ к SSH и панели управления подтверждён с всех согласованных адресов/сетей.
- Входящие и исходящие порты соответствуют списку требований.
- Логи не содержат повторяющихся ошибок загрузки модулей iptables.
Тестовые сценарии и критерии
- Тест доступности SSH: подключение по стандартному порту должно быть успешным с управляющего хоста.
- Тест веб-сервиса: запрос к порту 80/443 снаружи должен возвращать корректный ответ.
- Сканирование портов: nmap снаружи должен показывать только открытые и ожидаемые порты.
- Симуляция ошибки: временно удалить порт SSH из IG_TCP_CPORTS и убедиться, что cron DEVEL_MODE (если включён) снимает правила и доступ восстанавливается.
Рольовые чеклисты
Системный администратор:
- Подготовить список открытых портов и адресов управления
- Настроить DEVEL_MODE и убедиться в корректности cron
- Сделать резервную копию конфигурации
DevOps-инженер:
- Автоматизировать развёртывание конфигурации (скрипт/ansible)
- Добавить мониторинг доступности ключевых портов
Техподдержка:
- Иметь инструкции по откату (как остановить apf)
- Иметь список авторизованных IP для экстренного доступа
Плейбук инцидента и откат
- Потеря доступа по SSH:
- Подождать 5 минут (если DEVEL_MODE=1) или обратиться к консоли провайдера.
- Если доступ есть через панель хостинга, откатить /etc/apf/conf.apf из бэкапа и перезапустить apf.
- Ошибочные блокировки:
- Выполнить /usr/local/sbin/apf -f чтобы остановить APF временно.
- Восстановить конфигурацию и провести тесты в безопасной сети.
Ментальные модели и эвристики
- Принцип минимальных привилегий: открывайте только те порты, которые действительно нужны.
- Защита в глубину: комбинируйте блокировки портов с контролем исходящих соединений.
- Фазовый rollout: сначала тестовая среда → staging → production.
Диаграмма выбора (Mermaid)
graph TD
A[Нужна защита сервера?] -->|Да| B{Система современная?}
B -->|Да 'systemd, CentOS7+'| C[Рассмотреть firewalld]
B -->|Нет 'старый дистрибутив'| D[Рассмотреть APF или iptables]
C --> E[Использовать firewalld]
D --> F[Использовать APF]
D --> G[Использовать ручной iptables]
A -->|Нет| H[Не настраивать брандмауэр]Глоссарий (одно предложение на термин)
- APF: оболочка для iptables, упрощающая задачу настройки брандмауэра.
- iptables: подсистема ядра Linux для фильтрации сетевых пакетов.
- DEVEL_MODE: режим разработки APF, автоматически снимающий правила по cron.
Итог
APF остаётся полезным инструментом для администраторов, которые хотят получить управляемый и комментированный интерфейс к iptables без перехода на более новые системы. Следуйте методологии: включите DEVEL_MODE, протестируйте правила изолированно, зафиксируйте конфигурацию и только потом переводите в боевой режим.
Ссылки
- CentOS - http://www.centos.org
- Advanced Policy Firewall - http://www.rfxn.com/projects/advanced-policy-firewall
- cPanel - http://www.cpanel.net
Краткое резюме
APF — надёжный выбор для CentOS 5.3 и похожих систем, где требуется явная и статическая конфигурация правил iptables. Используйте DEVEL_MODE для безопасной настройки, тестируйте каждый порт и документируйте изменения.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента