Это руководство «Установка APF (Advanced Policy Firewall) в Unix/Linux» покажет как можно установить и настроить APF — интерфейс для IPTables(Netfilter) который позволяет легко настроить полнофункциональный межсетевой экран (firewall) для обеспечения серверов подключенных к сети. Я приведу пример установки на сервере с Cpanel, но можно устанавливать и на любой другой сервер.
Техническая сторона APF использует новейшие стабильные особенности из проекта Iptables (Netfilter), чтобы обеспечить очень надежный и мощный брандмауэр. Фильтрация пакетов в APF осуществляется:
- Статическая политика на основе правил (не путать с «static firewall»);
- Соединение основанные на состоянии политике (policies);
- Sanity основанная на состоянии политике (policies).
Статические политика на основе правил, является наиболее традиционным методом межсетевого экрана (фаервола). Это когда брандмауэр имеет неизменный набор инструкций (правил) о том, как трафик должен быть обработан в определенных условиях. Примером статической основе правил политики — когда вы разрешаете (allow)/блокируете (deny) IP адреса к серверу с целевой системой или открываете новый порт в конфигурационном файле conf.apf.
Соединение основанные на состоянии политике, является средством для распознавания «законных» пакетов для различных типов соединений. Только установленные пакеты с соответствием известного подключения будут разрешены в брандмауэре; другие будут отклонены.
Политика на «санитарной основе» (Sanity), является способностью брандмауэра, соответствовать различным схемам движения с известными способами атаки или тщательно отбора трафик, чтобы соответствовать стандартам Интернета. Примером этого может быть случай когда имеются попытки нападения, то APF может просто отбросить данный трафик.
Особенности APF.
- Детальный и хорошо прокомментированый конфигурационный файл;
- Гранулированная входящая и исходящая сетевая фильтрация;
- Идентификатор пользователя (user id) основан на входящей фильтрации сети;
- Приложение на основе фильтрации сети (network filtering);
- Имеется доверенные (trust) файлы с правилами с дополнительным расширенным синтаксисом;
- Глобальная trust система, где правила могут быть загружены с центрального сервера управления;
- Reactive address blocking (RAB), онлайн-система следующего поколения для предотвращения вторжений;
- Имеется режим отладки для тестирования новых возможностей и настроек конфигурации;
- Функция быстрой загрузки, что позволяет загрузить 1000+ правил менее 1 секунды;
- Входящие и исходящие сетевые интерфейсы могут быть настроены независимо друг от друга;
- Глобальный tcp/udp порт & icmp фильтрация с несколькими фильтрами (drop, reject, prohibit);
- Настраиваемые политики для каждого IP в системе с вспомогательными переменными в настройках импорта;
- Настройка ограничения на пакет, которое предотвращает злоупотребление на наиболее широко злоупотребляемый протокола, такой как ICMP;
- Настройка PREROUTING и POSTROUTING правил для оптимальной производительности сети;
- Поддержка dshield.org списка для блокировки сети, проявляющие подозрительной деятельности;
- Настройка любого количества дополнительных интерфейсов как доверенные или ненадежные;
- Имеются умные проверки маршрута, чтобы предотвратить ошибки конфигурации;
- Имеются расширенный пакет проверки целостности, чтобы убедиться что трафик приходит и уходит отвечая самым строгим стандартам;
- Имеется фильт от атак, таких как фрагментированные UDP, port zero floods (нулевого наводнения), stuffed routing, arp poisoning и многое другое;
- Предусмотрен настраиваемые опции чтобы задать приоритет для различных типов сетевого трафика;
- Имеется динамическая конфигурация ваших локальных DNS revolver-ов в брандмауэре;
- Предусмотрен дополнительный фильтр распространенных p2p приложений;
- Предусмотрен дополнительный фильтр для private и reserved адресного пространства;
- Имеется дополнительные неявные блоки для обслуживания ident сервисов;
- Настраиваемые параметры отслеживания соединения для масштабирования брандмауэра к размеру вашей сети;
- Настраиваемые kernel hooks чтобы укрепить систему от syn-flood атак & routing abuses (нарушения маршрутизации);
- Расширенный контроль сети ( уведомления о перегрузке и контроль переполнения);
- Имеются вспомогательные цепи для FTP данных и SSH соединений для предотвращения проблем на стороне клиента;
- Предусмотрен дополнительный фактор, который ограничивает скорость логгирование событий;
- Логирование подсистем что позволяет логирование информации
- Имеется комплексное протоколирование (логирование) каждого добавленного правила;
- Подробный запуск проверки ошибок;
- Если вы знакомы с Netfilter вы можете создать свои собственные правила в любом из файлов политики;
Установка APF (Advanced Policy Firewall) в Unix/Linux
Для начала, скачаем и распакуем скачанный архив с APF:
1 |
cd /usr/local/src && wget http://www.rfxn.com/downloads/apf-current.tar.gz && tar -zxvf apf-current.tar.gz |
Чтобы установить, выполните команду:
1 |
cd apf-* && sh ./install.sh |
Настройка APF (Advanced Policy Firewall) в Unix/Linux
Конфигурационный файл APF находится /etc/apf/conf.apf по этому, откроем его для редактирования:
1 |
nano /etc/apf/conf.apf |
Файл конфигурации довольно хорошо прокомментирован так что, не трудно понять, какие опции отвечают за определенные функции. И так настроим APF для своих нужд, особо важные параметры приведены ниже:
- DEVEL_MODE=»1″ — Это «Development mode». Данный параметр устанавливает в крон деактивацию всех правил APF каждые 5 минут. ВНИМАНИЕ! Не забудьте убрать данный параметр в «0» (я вспомню об этом немного позже).
- IFACE_IN=»eth0″ и IFACE_OUT=»eth0″ — ненадежные интерфейсы, подключенные к сети.
- 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″ — Открываем указанные TCP порты на входящее соединение.
- IG_UDP_CPORTS=»53,6277″ — Открываем указанные UDP на входящее соединение.
- IG_ICMP_TYPES=»3,5,11,30″ — входящие номера портов ICMP. В этой строке удалены опции «0» и «8» что даст возможность закрыть пинг на сервере. Не есть хорошо если вы используете мониторинг или утилиту пинг для проверки доступности сервера.
- EG_TCP_CPORTS=»21,25,37,53,80,110,113,443,43,873,953,2089,2703″ — Открываем указанные TCP на исходящее соединение. В этот момент, блокируя определенные услуги, такие как SSH, мы получаем возможность остановить хакеров, которые хотят подключиться к серверу.
- EG_UDP_CPORTS=»20,21,53,873,953,6277″ — Открываем указанные UDP на исходящее соединение
- TCP_STOP=»DROP» — Определяет реакцию в случае соединений TCP, которые нарушают правила (ничего не изменял, так и было).
- UDP_STOP=»DROP» — Определяет реакцию в случае UDP соединений, которые нарушают правила (ничего не изменял, так и было).
- ALL_STOP=»DROP» — Определяет реакцию на любых других соединений (ничего не изменял, так и было).
Мы можем послать TCP/IP сброс (RESET), drop пакет, не отвечая (DROP), отклонить его (REJECT) или отправить icmp-host-prohibited ответ (PROHIBIT) в случае UDP. - BLK_PRVNET=»1″ — Блокирует все частные IPv4 адреса. Если Ваша машина находится за NAT, то установите данный параметр в «0».
Остальное я оставил без изменений. Вы можете поднастроить под свои нужны. В этом конфиге довольно много различных опций.
Тестирование APF (Advanced Policy Firewall) в Unix/Linux
Keeping in mind the DEVEL_MODE option we start APF like that:
1 |
/usr/local/sbin/apf -s |
Опции для APF.
Чтобы запустить APF:
1 |
apf -s |
Чтобы перезапустить APF:
1 |
apf -r |
Чтобы остановить ( stop/flush) APF:
1 |
apf -f |
Команда, выведет список всех правил в брандмауэре:
1 |
apf -l |
Команда, выведет firewall status log:
1 |
apf -t |
или:
1 |
apf -st |
Чтобы обновить (refresh) и разрешить (resolve) DNS имена в доверенных (trust) правилах:
1 |
apf -e |
Показать все конфигурационные опции:
1 |
apf -o |
или:
1 |
cat /etc/apf/conf.apf | grep -Ev "^#|^$" |
Удалить host с [glob]*_hosts.rules и сразу же удалить правило из брандмауэра:
1 |
apf -u |
Добавить IP-адрес в White-list APF:
1 |
apf -a IP_of_host |
или:
1 |
nano /etc/apf/allow_hosts.rules |
IP_of_host — это IP который хотите добавить в разрешенный список.
Добавить IP-адрес в Deny-list APF:
1 |
apf -a IP_of_host |
или:
1 |
nano /etc/apf/deny_hosts.rules |
IP_of_host — это IP который хотите добавить в разрешенный список.
Теперь мы можем проверить наш брандмауэр со сканером портов Nmap или любой другой инструмент. Если вы запустите с каки то проблемами, то вы сможете исправить, т.к в крон установщике будет установлено задание сброса всех правил каждые 5 минут.
После всех тестов, вы можем изменить опцию DEVEL_MODE = «1» в файле конфигурации и поменять на «0» и перезагрузить APF.
Вы можете добавить APF в автозапуск ОС.
Например, для CentOS/Fedora/RedHat выглядит так:
1 2 3 |
chkconfig --add apf chkconfig --level 345 apf on |
PS: Тестировалось на CentOS 6/7 и Debian 8.
На этом, у меня все и тема «Установка APF (Advanced Policy Firewall) в Unix/Linux» завершена.