Дистрибутивов для построения роутеров и брандмауэров — великое множество. Однако большая их часть (не считая всяческих проприетарных и работающих на иных, нежели x86, платформах) основана на ядре Linux. Но ведь помимо Linux есть еще и другие ядра, и на их основе тоже можно делать специализированные дистрибутивы. Один из них, pfSense, и будет рассмотрен в данной статье.

Введение

pfSense основан на ядре FreeBSD, но не требует каких-либо знаний и умений, специфичных для данной ОС. Практически весь функционал доступен через веб-интерфейс. А надо сказать, функционал у pfSense обширный. Поддерживаются следующие возможности:

  • стандартная фильтрация на основе адресов и портов источника/назначения;
  • фильтрация на основе фингерпринтинга ОС, с которой устанавливается соединение (используется средство пассивного фингерпринтинга p0f);
  • прозрачный брандмауэр второго уровня;
  • нормализация пакетов — отбрасывание пакетов с неправильно сформированными полями, которые могут, в принципе, быть и специфическим путем атаки;
  • поддержка состояния соединений — возможности бэкенда pfSense, pf, в этом смысле выглядят, пожалуй, даже более гибкими, чем у iptables. Поддерживается в том числе и Syn-прокси для защиты некоторых служб от Syn-flood-атак;
  • гибкая поддержка NAT;
  • VPN — поддерживаются IPSec, PPTP и OpenVPN;
  • мониторинг и статистика. Рисование графиков с помощью RRD и в реальном времени;
  • множество DDNS-сервисов.

Этим возможности pfSense, конечно, не исчерпываются, но у нас здесь все же не краткий их список, поэтому перейду к описанию установки.

Другие дистрибутивы для создания роутеров на базе FreeBSD

Несмотря на то что сейчас подавляющее большинство дистрибутивов для роутеров основаны на Linux, помимо pfSense существуют еще три FreeBSD-based дистрибутива для подобных же целей:

m0n0wall — фактически прародитель pfSense. Главная особенность — крайне малый размер (32 Мб), что позволяет использовать его даже на доисторическом по современным меркам железе;
BSD Router Project — встраиваемый дистрибутив (для x86), фокусирующийся на протоколах динамической маршрутизации; в состав данного дистрибутива включено ПО Quagga и BIRD;
ZRouter — попытка сделать аналог OpenWRT на базе FreeBSD, к сожалению, проект, похоже, мертв — последняя активность датирована 2011 годом.

Как видим, выбор хоть и невелик, но все же есть. Не Linux’ом единым.

Установка и начальная настройка

На сайте pfSense доступны следующие версии образов (как для i386, так и для x64): LiveCD с установщиком, он же для установки на флешки и образ для встраиваемых систем (для записи на CompactFlash). Помимо этого, конечно, имеются и образы для обновления существующей системы, но, поскольку мы будем ставить pfSense на чистую систему с жестким диском, нам они не нужны, а нужен только самый первый из упомянутых образов.

После загрузки с CD первым делом будет предложено настроить VLAN. Если этому ничто не препятствует, можно без зазрения совести пропустить данную процедуру, что мы и сделаем. На следующем шаге нужно указать, какой интерфейс глядит в WAN, а какой в LAN. Затем запустятся все остальные службы и нужно будет выбрать, что именно мы хотим сделать. Выбираем «99» — установку на жесткий диск. Затем будет конфигурация консоли, в которой опять же оставляем все как есть, ибо консоль в данном дистрибутиве практически не используется. Следующим шагом будет выбор метода установки. Мы устанавливаем на «чистое» железо, так что в абсолютном большинстве случаев пойдет пункт «Quick/Easy Inatall», при выборе которого будет задан только вопрос о типе устанавливаемого ядра. И в целом, после успешной перезагрузки, на этом процедуру собственно установки можно считать завершенной, дальше уже нужно настраивать через веб-интерфейс.

Установка pfSense. Выбор ядра
Установка pfSense. Выбор ядра

Адрес по умолчанию для роутера 192.168.1.1, имя пользователя для веб-интерфейса admin, пароль pfsense. После первого входа будет предложено настроить роутер с помощью мастера. В принципе, в моем случае (тестовый стенд на VirtualBox) пошли почти все значения по умолчанию, за исключением пункта настройки WAN «Block RFC1918 Private Networks» — поскольку WAN у меня изначально был фиктивный, этот чекбокс пришлось снять.

 

Один из этапов начальной настройки pfSense
Один из этапов начальной настройки pfSense

По завершении настройки нас выбросит в Dashboard, где можно увидеть статус всяческих служб и самой системы. Сразу после входа, впрочем, полезной информации мало, но можно добавлять виджеты для большего информирования в Dashboard’е.

pfSense Dashboard. Здесь можно видеть статус основных служб
pfSense Dashboard. Здесь можно видеть статус основных служб

pfSense поддерживает историю конфигурирования в Wiki-стиле — для доступа к ней перейди в Diagnostics -> Backup/Restore на вкладку Config History.

Обзор интерфейса

Как ты уже заметил, сверху в веб-интерфейсе имеется строка меню с выпадающими при наведении списками. Разберемся, что скрывается за названиями.

System — здесь у нас находятся такие вещи, как обновление (ручное и автоматическое), общие настройки системы (имя хоста, DNS, адрес NTP-сервера для синхронизации…), управление сертификатами и пользователями. Но наиболее важное (и интересное) находится в пункте Advanced. Подробнее мы разберем эти настройки позже, вкратце же отмечу, что можно конфигурировать в том числе и глобальные параметры брандмауэра, в частности упомянутую ранее нормализацию пакетов, и настройки sysctl. Также в меню System присутствует возможность установки дополнительных пакетов, о чем подробнее опять-таки будет сказано позднее.

В меню Interfaces, как это явствует из названия, можно управлять сетевыми интерфейсами — назначать им алиасы, управлять типом выделения адреса, MTU… в общем, на сей раз все банально, и здесь мы останавливаться не будем.

В меню брандмауэра (Firewall) находятся настройки NAT, алиасов для адресов и портов, шейпинга трафика, включения правил по расписанию… и, конечно же, сами правила. Правила выполняются до первого соответствия, то есть, например, если первым поставить правило «Запретить все», все остальные правила работать не будут. Что до них самих, то у pfSense действительно широчайший набор возможностей: помимо стандартной, в общем-то, фильтрации по адресам и портам/номерам ICMP-сообщений, поддерживается и создание правил на основе состояния соединений, и фильтрация на основе TCP-флагов, и даже поддержка «глубокого» заглядывания в прикладные протоколы (Layer 7 по модели OSI) для фильтрации игрового и P2P-трафика.

Меню Services предоставляет доступ к настройкам всяческих сервисов — в том числе DHCP, Dynamic DNS, NTP.

VPN — настройка всевозможных видов VPN. Здесь можно сконфигурировать IPSec, PPTP, L2TP и OpenVPN. В общем-то, ничего особо примечательного тут нет, все достаточно интуитивно (для тех, кто когда-либо настраивал какой-либо VPN).

В меню Status можно посмотреть состояние и статистику различных подсистем (к примеру, состояние шлюзов, к которым подключен данный шлюз, состояние IPSec и OpenVPN), графики RRD и логи.

В Diagnostics можно проводить не только диагностические действия, но и, например, останавливать/перезагружать систему, редактировать файлы. Здесь имеется даже возможность выполнять команды оболочки.

Gold предназначено для платных подписчиков, и его рассматривать смысла не имеет.

Наконец, Help содержит внешние ссылки на документацию, в том числе и на FreeBSD Handbook.

Итак, по меню мы кратко пробежались, можно переходить к более детальному описанию некоторых интересных и вкусных вещей.

Продвинутые настройки и примеры конфигурации

Опишем параметры, которые можно настроить в меню System -> Advanced. Здесь у нас шесть вкладок: Admin Access, Firewall/NAT, Networking, Miscellaneous, System tunables и Notifications. На первой вкладке находятся параметры, относящиеся к управлению доступом к роутеру в целом, не зависящие от конкретного пользователя (а то и вообще ориентированные на одного только админа). Большинство из них смысла рассматривать нет, но вот парочку стоит описать.

Disable webConfigurator anti-lockout rule — по умолчанию в pfSense существует «защита от дурака», неотключаемое правило, согласно которому из локальной сети в веб-интерфейс можно зайти всегда, вне зависимости от любых других правил. Его можно отключить только путем установки данного чекбокса. Опять же, если ты его отключаешь, рекомендую сделать аналогичное правило, пусть оно будет и строже.

Disable HTTP_REFERER enforcement check отключает проверку HTTP_REFERER, страницы, с которой пользователь перешел по ссылке. По правде говоря, в смысле безопасности данная проверка дает немногое, но если ты не используешь скриптов и у тебя обычная конфигурация сети, то она и не мешает.

На вкладке Firewall/NAT у нас имеются общие настройки брандмауэра и NAT. Так, чекбокс «Insert a stronger id into IP header of packets passing through the filter» рандомизирует поле ID IP-пакета, чтобы помешать идентификации ОС машин за брандмауэром и избежать некоторых видов атак, а «Disables the PF scrubbing option which can sometimes interfere with NFS and PPTP traffic» отключает отбрасывание пакетов с неверно установленными флагами. Там же можно установить некоторые лимиты, такие как максимальное количество хранимых состояний соединений или максимальный размер таблиц, где хранятся IP-адреса. Кроме того, можно указать, какой тип оптимизации использовать (выпадающий список Firewall Optimization Options), то есть насколько долго брандмауэр будет хранить состояние «холостых» соединений и, соответственно, сколько памяти и процессорного времени он будет использовать. Существует четыре варианта оптимизации: none, high-latency — для каналов с большой задержкой (спутниковые), aggressive (памяти и CPU расходуется меньше, но есть риск досрочного завершения вполне нормальных соединений) и conservative — самый ресурсоемкий вариант, при котором уж точно все соединения будут доступны.

Вкладка Miscellaneous содержит настройки таких параметров, как прокси, балансировка нагрузки, аппаратное ускорение шифрования (выпадающий список Cryptographic hardware), параметры электропитания и датчиков температуры процессора и многое другое.

На вкладке System tunables размещены параметры, которые обыкновенно в BSD-системах настраиваются через sysctl. Возможно, некоторые из них дублируются на других вкладках — как минимум параметр net.inet.ip.random_id коррелирует с параметром, упомянутым выше. Сюда можно и добавлять параметры (разумеется, при условии, что они вообще есть в sysctl).

На последней вкладке содержатся настройки уведомлений. Поддерживаются уведомления Growl и SMTP. В принципе, сюда было бы логично поместить и параметры SNMP, но нет — они находятся совсем в другом месте.

В pfSense имеется также возможность установки дополнительного ПО, для чего существует репозиторий с пакетами. Чтобы просмотреть доступные пакеты, перейдем в System -> Packages и затем на вкладку Available Packages. Отмечу, что пакеты там все больше Alpha да Beta, stable-пакетов не так уж много. Перечислю некоторые:

  • haproxy — прокси-сервер и балансировщик нагрузки, используется, к слову, в таких highload-проектах, как Twitter и Stack Overflow;
  • ntop — показ трафика в реальном времени, аналогично утилите top;
  • pfBlocker — средство для блокировки диапазонов IP-адресов, в том числе по странам;
  • snort — всем известная IDS;
  • suricata — менее известная IDS/IPS. Считается более быстродействующей, нежели snort. Разрабатывается в организации OISF (Open Information Security Foundation), финансируемой несколькими источниками, включая министерство внутренней безопасности США, которым предоставляется некая не-GPL-лицензия;
  • Zabbix-2 Agent — агент средства мониторинга Zabbix (о Zabbix см. мою статью в ][ за декабрь 2013 года).

 

Создание MultiWAN-подключения

PfSense, помимо простых случаев, когда у тебя есть только один провайдер и одна локалка, поддерживает и более сложные варианты конфигурации. Посмотрим, как можно настроить роутер для подключения к нескольким провайдерам (MultiWAN). Прежде всего, вставляем сетевую карту (естественно, при отключенном питании роутера). Затем в меню Interfaces назначаем ей алиас (я использовал алиас WAN1) и прописываем соответствующие настройки. Следом идем в Dashboard — удостоверяемся, что карта получила IP-адрес. Потом в System -> Advanced на вкладке Miscellaneous ставим чекбокс Allow default gateway switching для автоматического переключения шлюза по умолчанию. Наконец, идем в System -> Routing. Здесь следует остановиться подробнее.

После перехода мы видим таблицу, где прежде всего стоит обратить внимание на столбцы Gateway и Monitor IP. Если назначение первого столбца объяснять не нужно, то столбец Monitor IP служит для проверки соединения, на него будут время от времени посылаться пинги. По умолчанию адрес для проверки совпадает с адресом шлюза. Для создания MultiWAN тебе нужно первым делом перейти на вкладку Groups и создать там группу шлюзов — для этого нажимаем на кнопку с плюсиком и заполняем поля. Стоит дать их описание:

  • Group Name — имя группы, может быть произвольным (но не пустым и без пробелов), в моем случае — MultiWAN;
  • Gateway Priority — приоритет шлюзов. Нас здесь интересует только столбец Tier, который, собственно, и отвечает за приоритет. Если поставить одинаковый приоритет, pfSense будет нагрузку балансировать;
  • Trigger Level — когда именно должно сработать переключение. Здесь четыре варианта: Member Down — падение линка, Packet Loss — потеря пакетов, High Latency — критичная задержка прохождения пакетов и Packet Loss or High Latency — комбинация двух предыдущих. Настройки параметров задержки находятся в конфигурации каждого шлюза (System -> Routing) отдельно и доступны после нажатия кнопки Advanced;
  • Description — необязательное поле описания.
Создание группы шлюзов для MultiWAN
Создание группы шлюзов для MultiWAN

Следом нужно создать (или отредактировать уже существующее разрешающее все) правило брандмауэра: заходим в Firewall -> Rules, жмем кнопку создания/редактирования правила, прокручиваем вниз и в Advanced Features -> Gateway в выпадающем списке, появляющемся после нажатия кнопки Advanced, выбираем MultiWAN. После каждого изменения параметров не забываем жать кнопки Save и Apply Changes — это относится не только к брандмауэру, но и ко всем остальным настройкам.

Затем проверяем. Отключаем какой-либо кабель и с клиентской машины даем traceroute. Если все нормально, пакеты будут идти через резервный шлюз. В веб-интерфейсе же состояние как шлюзов, так и их групп можно посмотреть в Status -> Gateways на вкладках Gateways и Gateway Groups соответственно.

 

Установка пакетов FreeBSD

Поскольку под капотом роутера у нас чуть допиленная FreeBSD, может возникнуть вопрос: можно ли поставить на него сторонние пакеты, отсутствующие в репозитории самого pfSense? И ответ на этот него — да, можно. Опустим, зачем это нужно, и попробуем поставить на наш роутер старый добрый Midnight Commander, точнее, его лайт-версию, ибо полноразмерная требует слишком много зависимостей. Первым делом нужно разрешить доступ к SSH (если еще не). Для этого в System -> Advanced -> Admin Access ставим соответствующий чекбокс Enable Secure Shell и сохраняем параметры. Следом заходим на роутер через ssh и после ввода пароля выбираем пункт 8 — оболочка. В оболочке же набираем следующую команду:

: pkg_add -r ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ports/amd64/packages-8.3-release/Latest/mc-light.tbz

И после установки запускаем:

: /usr/local/bin/mc

Видим привычный двухпанельный интерфейс, хоть и в непривычной цветовой гамме.

pfsense-web-gui-main pfsense-mc-light

Сохранение и восстановление конфигурации

Все настройки pfSense хранятся в одном XML-файле — остальные конфиги генерируются на его основе. И существует несколько вариантов сохранения и восстановления данного файла. Рассмотрим их.

  • Самый простой вариант — через веб-интерфейс. Для создания резервной копии конфигурации перейди в Diagnostics -> Backup/restore, выбери, в случае необходимости, ту часть конфигурации, которую нужно забэкапить, поставь (опять же в случае надобности) чекбокс Encrypt this configuration file и жми кнопку Download configuration. Там же можно восстановить конфиг — действия для этого аналогичные и в подробном описании не нуждаются.
  • Второй вариант — сохранить/восстановить файл напрямую с помощью редактирования конфига /cf/conf/config.xml через Diagnostics -> Edit File. Тем не менее путь этот я бы крайне не рекомендовал, ибо функция сохранения на локальный компьютер у Edit File отсутствует, а при копипастинге содержимое может неправильно сохраниться. Если ты все же решишься им воспользоваться для восстановления, не забудь после этого перезагрузить роутер.
  • Третий вариант относится к восстановлению. Если по каким-то причинам ты ставишь pfSense заново и у тебя есть полная (и незашифрованная) копия конфига, можно установить pfSense прямо с ним. Для этого нужно скопировать заранее сохраненный файл в conf/config.xml на USB-флешку, отформатированную в FAT16, вставить ее в роутер, загрузиться с LiveCD и продолжить установку в обычном режиме. После установки ты получишь полностью рабочий роутер.

Как и положено всякому уважающему себя *nix-дистрибутиву, pfSense поддерживает более чем один способ бэкапа.

 

Заключение

pfSense в абсолютном большинстве случаев вполне способен служить заменой коммерческим решениям от той же Cisco. Если при этом добавить возможность добавления пакетов из репозитория самого pfSense, то он даже в чем-то их и превосходит. Но, даже не учитывая, что большинство версий упомянутых приложений честно помечены Beta (а то и вовсе Alpha), нужно четко осознавать: pfSense заточен под типичные конфигурации. Да, кирпичиков этих самых типичных конфигураций в нем много, однако стоит от них отступить, и окажется, что сделать нечто нестандартное в pfSense не представляется возможным.

Таким образом, если конфигурация твоей сети крайне неординарна, лучше использовать коммерческие решения или пилить роутер самостоятельно на основе той же Free/OpenBSD/Linux. В противном же случае (а таких, повторюсь, большинство), pfSense выглядит не худшим вариантом.

Теги:

Оставить мнение

Check Also

WTF is APT? Продвинутые атаки, хитрости и методы защиты

Наверняка ты уже читал о масштабных сетевых атаках, от которых пострадали банки, крупные п…