Продолжим знакомство 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.
Далее выбираем категории для которых хотим создать 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 - различные онлайн базы данных о портах, где можно посмотреть, какие сервисы обычно находятся на том или ином порту. Аналогичным образом работает иконка "i" возле IP адресов или заблокированных доменах - можно посмотреть, что знают о домене/IP общедоступные базы угроз:
Иконка замка позволяет разблокировать IP/домен - используется как временное решение, т.к. после очередного обновления фидов может быть заблокирован снова. Поэтому для перманентного добавления в белый список нужно нажать на иконку плюса. Если добавляется домен, то появится всплывающее окно, предлагающее добавить в том числе и все поддомены (wildcard запись), либо только сам домен в белый список:
Если же добавляется IP адрес, то его можно добавить как в глобальный Suppress список, применяющийся ко всем фидам, либо добавить в существующий/создать новый белый список. Второй вариант удобен тем, что созданный белый список будет в форме алиаса, который уже можно как угодно применить в правилах фильтрации, например, разрешить ходить на IP адреса из белого списка только определённым хостам.
И напоследок самое красивое - долгожданные диаграммы с остальных вкладок. Следует отметить что на вкладках DNS Reply и DNS Reply Stats будет какая-либо информация только если DNSBL Mode установлен в Unbound mode.
Немного DNSBL статистики:
Статистика по IP адресам:
Заключение
Пожалуй, мы рассмотрели на настройку pfBlockerNG на достаточном уровне, чтобы настроить с нуля под любые возможные нужды. Если какие-то термины кажутся непонятными - не забываем подсматривать в первой части. Быстрая настройка для домашней сети - в одной из предыдущих публикаций. А любые вопросы - в комментариях!