Продолжим знакомство c pfBlockerNG - многофункциональным IP/DNSBL фильтром файровола pfSense, позволяющего использовать скачанные из интернета списки блокировки, фильтровать DNS по категориям, а IP - по странам, ограничивать выдачу поисковых систем и youtube для показа только "семейных" результатов, и много другое.

В этой части мы разберёмся в гео-блокировке, узнаем на что влияет репутация, посмотрим отчёты-диаграммы и настроим синхронизацию настроек в HA кластере.

Первую часть можно прочитать тут.

GeoIP blocking

Использование базы MaxMind GeoIP DB позволяет с достаточно высокой точностью определить страну-источник IP адреса. Это будет полезно в первую очередь для фильтрации входящего трафика - так, можно блокировать VPN подключения удалённых сотрудников, если попытка подключения происходит из совсем неожиданного места. Подобным же образом можно фильтровать подключения к HAProxy балансировщику или к любым серверам, находящимся за файрволом. В ряде случаем может быть полезно фильтровать и исходящий трафик с серверов. При желании можно блокировать пользователям локальной сети подключение к серверам Антарктиды, к примеру.

Но для начала нам нужно получить ключ для скачивания базы. Заходим на https://www.maxmind.com/en/geolite2/signup, проходим регистрацию. Создав пароль, заходим в панель управления аккаунтом и переходим на вкладку Manage License Keys.

Нажимаем "Generate new license key" и в появившемся окне ставим No возле вопроса "Old versions of our GeoIP Update program use a different license key format. Will this key be used for GeoIP Update?". License key description может быть любым.

Получаем "License Key" который нам нужно будет ввести в поле MaxMind License Key на странице Firewall / pfBlockerNG / IP нашего pfSense

Настраиваем pfBlockerNG

Будем считать, что вы хорошо знакомы с настройками разобранными в первой части статьи, и пройдёмся только по тому, что нас конкретно касается. MaxMind Localized Language - на каком языке будет список стран на страницах настройки. Если вы лучше знаете, к примеру, французский или испанский, то можете поменять на своё усмотрение. MaxMind CSV Updates - лучше не отключать, иначе мы не увидим того самого списка стран и континентов на страницах конфигурации. Разве что можно чекнуть эту опцию если всё уже настроено и работает как часы, и хочется немного сэкономить трафика (т.е. pfSense с LTE модемом).

Перейдём непосредственно на Firewall / pfBlockerNG / IP / GeoIP.

Видим таблицу условных континентов или географических зон. Actions - что мы будем с ними делать. В большинстве случаев используется Alias Deny (для блокировки), Alias Match (для pass-правил или логирования), либо Permit/Deny In/Outbound, если не хотим видеть алиасы на страницах правил файрвола. Отдельно стоит отметить "континент" под названием Top Spammers - как понятно из названия, это самые отпетые спамеры со всего мира.

Нажмём на иконку карандаша и увидим более тонкую настройку. Возьмём к примеру Oceania:

Как видите, можно детально выбрать адреса каких стран и по каким IP протоколам (IPv4/IPv6) мы хотим фильтровать. В квадратных скобках указан так называемый Geoname ID, по которому можно посмотреть детали той или иной локации (иногда это не страна) через разные онлайн-сервисы, к примеру https://www.geonames.org/ (пример для Самоа - https://www.geonames.org/5880801). В круглых скобках - количество записей. Это могут быть как адреса отдельных хостов, так и сети с какой угодно маской. Ниже видим List Action и Enable Logging, как в общей таблице.

Ниже идёт Advanced Inbound/Outbound Firewall Rule Settings - используется только в том случае, если в качестве Action не было выбрано действие Alias Deny/Permit/Match/Native, т.е. когда создаются авто-правила, не видимые на странице правил файрвола (Firewall / Rules). По сути тут просто указываются параметры этих авто-правил - IP адрес назначения, порт, протокол и шлюз (если мы используем Match Outbound для маршрутизации трафика через нужный шлюз). По мне удобнее использовать Alias режим и уже создавать нужное правило в настройках файрвола, чтобы наглядно видеть все правила и их порядок.

Если выбрано слишком много стран, то при обновлении конфигурации можно увидеть такую ошибку:

There were error(s) loading the rules: /tmp/rules.debug:37: cannot define table pfB_Europe_v6: 
Cannot allocate memory - The line in question reads [37]: 
table <pfB_Europe_v6> persist file "/var/db/aliastables/pfB_Europe_v6.txt" @ 2016-09-24 18:01:48

Это означает, что превышен размер памяти выделенный файрволом для хранения записей IP таблиц. Лечится увеличением Firewall Maximum Table Entries (лучше сразу раза в 2-3) на странице System / Advanced / Firewall & NAT.

Reputation

Перейдём на вкладку Reputation - эти настройки используются для оптимизации размера IP таблиц и блокирования целых подсетей, если в тех оказалось нужное количество IP адресов. При настройке нужно соблюдать осторожность, а если настраиваете pfBlockerNG первый раз, то и вовсе пропустить. Данная вкладка активна только если скачана база Geo IP.

Пойдём по порядку - Individual List Reputation. Включаем данную фичу отметив Max и задаём в Max Setting максимальное количество допустимых адресов в одной /24 сетке. Рассмотрим на примере - предположим, что в одной /24 сети есть четыре IP адреса: 192.168.123.1, 192.168.123.2, 192.168.123.3, 192.168.123.4. Если в сети окажется ещё и пятый 192.168.123.5 адрес, то данные записи будут заменены на одну - 192.168.123.0/24. Это увеличивает вероятность ложных срабатываний, но уменьшает размер таблиц (а они могут занимать немало оперативной памяти), ну и в некоторых случаях лучше блокировать сразу подсеть.

Collective List Reputation - выполняется после Individual List Reputation и применяется ко всем блоклистам сразу. Работает по схожему принципу. pMax и dMax отличаются друг от друга тем, что в первом случае, все блоклисты просто сканируются на заданное количество IP адресов в любых диапазонах (т.е. не только /24). Во втором случае, дополнительно можно исключить из данной операции выбранные страны (дабы не заблокировать ненароком сетку с вашими удалёнщиками).

Посмотрим, как можно настроить параметры dMax - Country Code Settings (max/dMax). Выбираем в списке IPv4 Country Exclusion страны, для которых не будет срабатывать правило блокировки "есть N хостов -> блочим всю сеть". В ccwhite Action выбираем как именно - Ignore значит просто не преобразовывать блокировку N хостов в блокировку сети, в то время как Match создаёт файл /var/db/pfblockerng/match/matchdedup.txt, содержащий IP адреса хостов, попавших под правило "N хостов в одном диапазоне из выбранного списка стран". После можно создать Alias Match, группу использую в качестве адреса фида путь к файлу. Такой Match алиас можно применять в правилах файрвола как вам захочется - к примеру, логировать такой трафик, если полностью блочить не является допустимым (вдруг это VPN подключение тех же удалёнщиков), но нужно знать объём трафика с таких хостов. ccblack Action - Block/Match действие для IP адресов не из списка список выбранных стран. В большинстве случаев, ccwhite/ccblack опции трогать не надо.

Proofpoint ET IQRISK IPv4 Reputation - если у вас есть платная подписка на IORist фиды, то вам необходимо создать IP блоклист с адресом фида вида https://rules.emergingthreatspro.com/XXXXXXXXXXXXXXXX/reputation/iprepdata.txt.gz, где XXX - это полученный ETPRO код, а присвоенное вами значение Header/Label нужно будет ввести в поле Header/Label Name.

пример IP блоклиста
пример IP блоклиста

Далее выбираем категории для которых хотим создать Block алиас (Block Categories) и Match алиас (Match Categories).

Чтобы заработал Match алиас, нужно дополнительно создать Alias Match указав в качестве URL /var/db/pfblockerng/match/ETMatch.txt. Если нужно то можно создать дополнительные алиасы по категориям, достаточно посмотреть содержимое папки /var/db/pfblockerng/ET и увидеть соответствующие файлы.

Не забываем, что для применения всего этого дела, нужно запустить update/reload на странице Firewall / pfBlockerNG / Update.

Sync

Настройке High Availability на pfSense можно посвятить отдельную статью, тут же мы посмотрим на немножко необычное применение синхронизации настроек между узлами. На странице Firewall / pfBlockerNG / Sync помимо синхронизации на backup узел кластера ( Enable Sync = Sync to configured system backup server ), можно указать любое количество других файрволов в списке XMLRPC Replication Targets. Для чего это может быть полезно? Предположим у вас целое стадо pfSense, а некоторые и вовсе не имеют выхода в интернет, но фильтруют трафик внутри сети. Прописав их в списке Target'ов и указав в качестве Enable Sync Sync to host(s) defined below, можно синхронизировать все настройки pfBlockerNG на перечисленные файрволы. Так как интерфейсы и направление фильтрации могут быть разными на разных узлах, вам, скорее всего, нужно будет использовать Alias Deny/Match для обработки IP трафика.

Reports

А теперь перейдём к самому красивому - логам/отчётам/диаграммам. Firewall / pfBlockerNG / Alerts.

В последних версиях pfBlockerNG перешёл на отображение Unified лога, это означает, что на данной странице будут отображаться как заблокированные домены (DNSBL), так и IP адреса, попавшие под правила Block/Permit/Match вперемешку. Для просмотра логов по типу событий используется вкладка Alerts.

Посмотрим на лог DNSBL с конца - столбец Feed/Group показывает с помощью какой группы и фида был заблокирован домен, либо IP адрес. Domain/Block mode показывает, какой домен и каким образом был заблокирован. DNSBL-python говорит нам о Unbound python mode DNSBL-1x1, что была переадресация на встроенный веб-сервер pfBlockerNG с пустым пиклесем, HSTS_A после вертикальной черты - о HSTS блокировке (без исп. встроенного веб-сервера). В квадратных скобках видим что именно спровоцировало блокировку - A или AAAA DNS запись, либо CNAME (если проверка по CNAME включена). Для лучшего понимания можно обращаться к первой части статьи. Source, IF, Date - не нуждаются в комментариях. Таблица с заблокированными IP адресами довольно информативна сама по себе, разве что стоит отметить GeoIP/ASN столбец - без скачанной базы мы не увидим двухбуквенные коды стран.

Threat Services для просмотра информации о домене
Threat Services для просмотра информации о домене

Посмотрим, для чего нужны иконки. Нажатие на лупу у номера порта открывает страницу с ссылками на Threat Services - различные онлайн базы данных о портах, где можно посмотреть, какие сервисы обычно находятся на том или ином порту. Аналогичным образом работает иконка "i" возле IP адресов или заблокированных доменах - можно посмотреть, что знают о домене/IP общедоступные базы угроз:

Иконка замка позволяет разблокировать IP/домен - используется как временное решение, т.к. после очередного обновления фидов может быть заблокирован снова. Поэтому для перманентного добавления в белый список нужно нажать на иконку плюса. Если добавляется домен, то появится всплывающее окно, предлагающее добавить в том числе и все поддомены (wildcard запись), либо только сам домен в белый список:

Если же добавляется IP адрес, то его можно добавить как в глобальный Suppress список, применяющийся ко всем фидам, либо добавить в существующий/создать новый белый список. Второй вариант удобен тем, что созданный белый список будет в форме алиаса, который уже можно как угодно применить в правилах фильтрации, например, разрешить ходить на IP адреса из белого списка только определённым хостам.

И напоследок самое красивое - долгожданные диаграммы с остальных вкладок. Следует отметить что на вкладках DNS Reply и DNS Reply Stats будет какая-либо информация только если DNSBL Mode установлен в Unbound mode.

Немного DNSBL статистики:

Топ заблокированных доменов
Топ заблокированных доменов
Топ блоклистов по количеству срабатываний
Топ блоклистов по количеству срабатываний
Топ фидов по количеству срабатываний
Топ фидов по количеству срабатываний

Статистика по IP адресам:

Наиболее часто блокированные IP адреса
Наиболее часто блокированные IP адреса
Топ портов на заблокированных адресах
Топ портов на заблокированных адресах
Топ стран по количеству заблокированных IP адресов
Топ стран по количеству заблокированных IP адресов

Заключение

Пожалуй, мы рассмотрели на настройку pfBlockerNG на достаточном уровне, чтобы настроить с нуля под любые возможные нужды. Если какие-то термины кажутся непонятными - не забываем подсматривать в первой части. Быстрая настройка для домашней сети - в одной из предыдущих публикаций. А любые вопросы - в комментариях!

Комментарии (0)