Содержание статьи
Для организации совместного доступа в Сеть и защиты внутренних ресурсов
администраторы со стажем предпочитают использовать специализированные
мини-дистрибутивы, построенные на базе урезанных версий Linux или BSD. C их
помощью можно легко превратить маломощный комп в надежный маршрутизатор. К
подобным решениям как раз и относится pfSense.
О проекте
В сентябре 2004 года стартовал проект
pfSense, основное
назначение которого – превращение обычного компа в роутер с продвинутыми
функциями межсетевого экрана. Родительским дистрибутивом был m0n0wall
(представляет собой мини-версию FreeBSD для создания маршрутизаторов и файрволов
на базе бездисковых систем, с загрузкой с CD-ROM или Flash-карты). Ограничения
«родителя» (скромные возможности, жесткие лимиты по размеру, строгое
ориентирование на встроенные устройства) были не по душе Крису Бойхлеру, и он
взялся за создание нового дистрибутива.
За несколько лет разработки функциональность была увеличена на порядок (по
сравнению с «папашей»), кроме того, значительно возросло количество доступных
приложений. Сегодня пользователи получили бесплатное решение, по своим
возможностям не уступающее некоторым коммерческим. Платой за функциональность
послужил чуть больший размер дистрибутива и более высокие требования,
предъявляемые к аппаратной части, в частности, к объему ОЗУ (хотя по современным
меркам они не высоки).
В pfSense был выполнен технический редизайн. Так, если m0n0wall во время
работы практически не обращается к жесткому диску и держит настройки в основном
в ОЗУ (что, в общем-то, оправдано), то pfSense работает как обычный дистрибутив.
И хотя доступна Embedded-версия для встроенных устройств, это направление не
является приоритетным.
Текущая версия pfSense 1.2, вышедшая в феврале 2008 года, базируется на
FreeBSD 6.2. С ней мы и познакомимся.
Возможности pfSense
В качестве средства фильтрации в pfSense используется «опеночный» Packet
Filter с интегрированным ALTQ и поддержкой нормализации пакетов. Само собой,
есть и NAT, статические маршруты, VLAN. Роутер можно перевести в режим
прозрачного моста. В отличие от m0n0wall, поддерживается работа с несколькими
WAN-интерфейсами – с балансировкой, как исходящих, так и входящих соединений.
Это обеспечит равномерное распределение нагрузки по нескольким серверам.
Поддержка протокола CARP (Common Address Redundancy Protocol) позволяет
организовать отказоустойчивый кластер шлюзов.
Но тип канала для WAN имеет ограничения. С протоколами PPPoE, PPTP или
BigPond (австралийский интернет-провайдер) может быть настроен только один
внешний канал. Остальные сетевые интерфейсы должны получать статический или
динамический IP адрес.
Кроме того, в состав pfSense входят: сервер и клиент PPPoE, сервер и агент
ретрансляции DHCP, сервер DNS, FTP прокси, Captive Portal с возможностью
аутентификации через RADIUS. Имеются средства для подключения к виртуальным
частным сетям и организации такого сервиса по протоколам IPsec, PPTP, OpenVPN.
Поддерживается SNMP, а RRD-графики позволяют в наглядном виде получить
информацию о загрузке систем, каналов и пр.
Все настройки производятся при помощи понятного веб-интерфейса, который, хоть
и не локализован (работы ведутся), но при базовом английском и знании сетей
осваивается за несколько часов.
Есть возможность установки с сайта pfSense дополнительных пакетов,
расширяющих и без того немалые функции. Также можно попробовать добавить нужный
пакет с ближайшего зеркала FreeBSD при помощи утилиты pkg_add.
Единственный на сегодняшний день недостаток проекта – нет нормальной
документации. Все, что касалось предыдущего релиза, устарело и уже удалено с
doc.pfSense.org. Под новую версию HOWTO'шки только начинают появляться. Поэтому
единственным полноценным документом можно считать
m0n0wall Handbook,
который касается pfSense лишь частично, а также несколько flash-руководств и
видеоуроков.
Запускаем в работу
На зеркалах, список которых доступен на странице загрузки продукта, выложены
две версии pfSense: для встроенных устройств и LiveCD-Installer. Второй вариант
более универсальный, поскольку может работать и как LiveCD, и устанавливаться на
жесткий диск. Размер дистрибутива небольшой – всего 60 Мб.
Минимальные требования, предъявляемые к железу, следующие: компьютер с
частотой процессора 100 МГц, 128 Мб оперативной памяти и диск объемом 1 Гб для
установки системы. Для Embedded данные аналогичны, только для установки
достаточно иметь 128 Мб флешку. Такой компьютер будет без проблем обслуживать
10-мегабитную сетку с необходимыми функциями, но при увеличении скорости или
функций (например, подсчете трафика) требуется более мощное оборудование. При
установке есть возможность выбрать ядро с поддержкой многопроцессорных систем,
поэтому под роутер можно смело задействовать самый современный компьютер. Более
конкретные требования для разных вариантов использования pfSense описаны на
сайте проекта в документе «Hardware Sizing Guidance». Информацию о совместимом
оборудовании можно найти в «FreeBSD 6.2 Hardware Compatibility List» на сайте
FreeBSD.
Итак, записываем образ и загружаемся. Скрипты загрузки проанализируют
имеющееся оборудование. После инициализации будет выведен список сетевых карт с
предложением настроить VLAN-, LAN- и WAN- сетевые интерфейсы. Сначала идет VLAN:
Do you want to set up VLANs now [y|n]?
В принципе, если настройки сети известны, то VLAN можно задействовать прямо
сейчас, нажав «y» и введя parent-интерфейс (список сетевух будет выведен
повторно). Однако большинству пользователей будет удобнее при помощи консоли
настроить лишь внутренний LAN-интерфейс. Остальные же сконфигурировать при
помощи графического меню. Если выход в Сеть производится через PPPoE или PPTP,
то из-за специфики веб-интерфейса придется в любом случае поднимать VLAN (в
разделе «Настройка через веб» я покажу, как это сделать). На следующем шаге
скрипт предложит ввести название LAN-интерфейса.
Enter a LAN interface name or `a` for autodetection: fxp0
Аналогично настраивается WAN и дополнительные (Optional) интерфейсы.
Впоследствии вместо Optional им можно дать любое другое название (например, DMZ).
Когда настройки закончены, нажимаем <Enter>. Скрипт выведет текущие настройки.
LAN -> fxp0
WAN -> fxp1
Подтверждаем установки нажатием «y» и ждем, пока загрузится система.
Do you want to processed [y|n]?y
Угадать имена при наличии двух одинаковых сетевых карточек без знания их
МАС-адресов часто бывает тяжеловато. Поэтому, если что-то не работает, просто
поменяй местами интерфейсы в настройках или переподключи провода. Если будет
обнаружено только одно сетевое устройство, появится предупреждение о
невозможности работы в режиме роутера.
Как и в m0n0wall, LAN-интерфейс автоматически получает адрес 192.168.1.1, а
WAN – при помощи DHCP. После инициализации системы появится системное меню
настройки pfSense, вверху которого отражены текущие установки Сети:
*LAN -> fxp0 -> 192.168.1.1
*WAN -> fxp1 -> 192.168.175.128(DCHP)
Когда IP-адрес интерфейса WAN назначается статически, то при определенных
настройках Сети, после появления «Configuring WAN Interface», система как бы
зависает, пытаясь получить нужный адрес. К сожалению, пропустить настройку WAN
никак нельзя, придется подождать. Встречается такой «эффект» не всегда, но
лучшим выходом, если что, будет отключение внешнего кабеля, тогда скрипт быстрее
перейдет к следующему этапу.
После инициализации появляется меню, состоящее из 15 пунктов. Отсюда можно
перезагрузить, остановить и обновить систему, сбросить настройки и пароль
администратора веб-интерфейса, проверить доступность узла при помощи команды
ping, просмотреть вывод pftop и журналы сервера, выйти в shell. Переназначить
сетевые интерфейсы, можно выбрав пункт 1 – Assign Interfaces. После чего
повторяем все шаги, описанные выше. Чтобы установить другой IP-адрес для LAN,
нажимаем цифру 2 (Set LAN IP address). Затем последовательно вводим новый
IP-адрес и сетевую маску. Последним вопросом будет:
Do you want to enable the DCHP server on LAN [y|n]?
Отвечаем, в зависимости от того, нужно сейчас запустить DHCP-сервер для
раздачи адресов во внутренней сети или нет. По окончании настройки скрипт
выводит IP-адрес, который нужно набирать в строке веб-браузера, чтобы получить
доступ к веб-интерфейсу.
Под цифрой 99 находится пункт, позволяющий установить pfSense на жесткий
диск. После установки он из меню исчезает. Кстати, дистрибутив необязательно
устанавливать: если вставить дискету, при выключении все настройки будут
сохранены на нее.
Установка pfSense на хард
Несмотря на то, что pfSense – это урезанная версия FreeBSD, его установка
очень проста и не требует каких-либо специфических знаний системы. Мастер
установки, появляющиийся после ввода 99 (Install pfSense to hard drive …),
поможет произвести все необходимые действия. Но помни, все разделы на выбранном
жестком диске будут уничтожены. При наличии некоторого опыта можно попробовать
пристроить pfSense в качестве второй системы, но лучше для экспериментов
использовать виртуальные машины, под которыми этот дистрибутив отлично работает
(или другой винч). Сама установка занимает пять минут. Для записи настроек и
перехода к следующему шагу выбираем «Accept these settings». Перейти к
следующему пункту можно при помощи стрелок или табуляции.
В первом окне доступны настройки шрифта и раскладки клавиатуры. Отмечаем «Install pfSense». Сначала выбираем жесткий диск, на который будем устанавливать систему,
и форматируем его (Format this disk). Скрипт проверяет геометрию диска и выводит
результат – обычно нет необходимости что-либо здесь менять. Отмечаем «Use this
geometry» и записываем таблицу разделов (Format ad0). Тут добрый мастер
предложит произвести разметку. В Edit partition можно создать несколько слайсов.
Варианта, предложенного мастером, вполне достаточно, поэтому выбираем «Accept
and Create». Теперь надо выбрать слайс, на который будем устанавливать pfSense.
Он у нас один – отмечаем и в следующем окне подтверждаем нажатием «ОК». После
создания слайса программа предложит создать два раздела: корневой и swap (1024
Мб). При желании можно изменить разметку, после чего начнется копирование
необходимых файлов на диск. В состав pfSense входит четыре ядра: для
однопроцессорных и многопроцессорных систем, встроенных устройств (без драйверов
VGA, клавиатуры и т.д.) и developer (с GDB). Выбираем нужное. Последний шаг –
установка загрузчика. Затем последует перезагрузка.
Дальнейшие настройки производятся уже через веб-интерфейс.
Настройка через веб
Подключаться к pfSense можно пока только с LAN-интерфейса. Набираем его адрес
в строке браузера. Для регистрации используем логин admin и пароль pfSense.
После успешного входа тебя встретит Setup Wizard, задача которого – упростить
первоначальную настройку. В первом окне указываем имя и домен, к которому
принадлежит компьютер, адреса DNS-серверов, настройки времени, часовой пояс и
синхронизацию с сервером NTP. Что ж, приступаем к настройке WAN-подключения.
Выбираем тип соединения: DHCP, статический, PPPoE или PPTP. Установка флажков «Block
private networks» и «Block bogon networks» создаст правила, блокирующие
подключение к WAN с адресов указанных сетей. Дальше, если хочешь, смени
настройки LAN-интерфейса. На последнем шаге мастера меняем пароль админа. От
услуг мастера можно отказаться и настроить все самостоятельно, – поступай, как
тебе удобнее. Повторно мастер вызывается в System – Setup Wizard.
По окончании настройки все соединения из внутренних сетей будут разрешены.
Правила NAT создаются автоматически (новички это оценят). Когда такие правила
планируется создавать вручную, – нужно снять флажок «Disable NAT Reflection»,
который находится внизу страницы System – Advanced.
Интерфейс pfSense разбит на 7 основных вкладок: System, Interfaces, Firewall,
Services, VPN, Status и Diagnostics. При выборе каждой откроются дополнительные
подпункты. Для примера разберем некоторые настройки.
Если IP-адрес WAN-интерфейсу задается статически или динамически, то проблем
с настройкой WAN не предвидится. Путаница возникает, когда к провайдеру нужно
подключиться, используя PPPoE или PPTP. Как ты помнишь, pfSense поддерживает
одно такое соединение, и настроить его можно только в Interfaces – WAN. Но где
же тогда указывать настройки сетевого адаптера? В этом случае следует создать
VLAN-интерфейс. Заходим в меню Interfaces – assign, переходим во вкладку VLANs и
нажимаем <+>, чтобы создать новый интерфейс. Потом укажи настройки сетевой карты
во VLAN, а в WAN – информацию о PPPoE.
Обязательно зайди в System – General setup! Здесь указываются: имя узла,
адреса серверов DNS (если они не получаются через DHCP), имя пользователя и
пароль администратора, а также – использование защищенного HTTPS при подключении
через webGUI, порт для соединения, тема оформления, часовой пояс и сервер NTP.
По умолчанию сервер SSH отключен. Если вдруг планируется удаленное управление
по этому протоколу, то переходим во вкладку System – Advanced и устанавливаем
флажок Enable Secure Shell. Для повышения безопасности в поле SSH port можно
указать отличный от 22-ого порт и активировать аутентификацию по ключу.
Последний следует скопировать в поле Authorizedkeys. Во вкладке Advanced можно
включить первый последовательный порт (это отключит видеокарту и клавиатуру),
функцию Filtering Bridge; указать сертификаты для webGUI; включить балансировку
соединений, traffic shaper и другие параметры.
Для настройки статической маршрутизации следует перейти в Static Routes и
нажать <+>. В появившемся меню выбрать интерфейс и ввести адрес сети, шлюз и
краткое описание.
Настройка правил межсетевого экрана и NAT производится в Firewall – Rules.
Количество вкладок здесь равно числу используемых интерфейсов. По умолчанию весь
локальный трафик разрешен: в LAN стоит правило «Default LAN -> any», а из WAN
блокируется доступ только с адресов частных сетей (другими словами, входящие
сетевые подключения с адресов из диапазонов 10/8, 172.16/12, 192.168/16 на
внешний сетевой интерфейс запрещены). Правило NAT формируется автоматически (Automatic
outbound NAT rule generation), поэтому сразу после установки pfSense исполняет
роль маршрутизатора с фильтрацией пакетов.
Новое правило создается очень просто. Для этого не нужно обладать знаниями PF,
достаточно представлять конечный результат. Выбирается значение параметра,
предложенного конфигуратором (адрес/интерфейс источника и назначения, протокол,
порт или диапазон, расписание и прочее), ошибиться здесь тяжело. Созданные
правила можно расставлять по порядку. Обрати внимание на небольшой треугольник
слева от правила. Если он зеленый – правило активно, если серый – нет.
Сначала создаем разрешающее правило, позволяющее соединяться удаленно через
webGUI. Выбираем Add new rule и указываем в Action – Pass, Interface – LAN,
Protocol – TCP. Поля Source и Destination в том случае, когда используется 80-ый
порт, можно установить в Any, чтобы пользователи могли получить доступ к
веб-ресурсам интернет. В Destination port устанавливаем HTTP. Аналогично
настраивается доступ к остальным удаленным сервисам. По окончании настроек в
поле Action правила «Default LAN -> any» меняем значение с Pass на Block или
Reject. Не забудь, что правила работают до первого совпадения, поэтому
запрещающий рулесет следует разместить последним, используя кнопки Move selected
rule. По окончании всех настроек нажимаем кнопку Apply changes.
Во вкладке Firewall также можно задать псевдонимы (aliases), которые позволят
упростить создание правил. При выборе пункта Traffic Shaper запустится мастер
настройки. На первом шаге следует выбрать внешний и внутренний интерфейсы и
указать скорость Download/Upload, а затем установить приоритет для
VoIP-сервисов. В Penalty Box указываются адреса, трафик с которых будет идти с
наименьшим приоритетом. Далее идут настройки ограничений для P2P-сетей, сетевых
игр и остальных протоколов.
По ходу конфигурирования система выводит предупреждения вверху страницы.
Обращай на них внимание: иногда требуется нажать кнопку/гиперссылку или
перезагрузить компьютер, иначе настройки не вступят в силу.
Все не зря
Опыт показывает, что pfSense не зря пользуется популярностью и получает
лестные отзывы IT-специалистов. Он прост в настройке и надежен в работе. Такой
маршрутизатор вполне способен решить все задачи по представлению доступа и
защите домашней/офисной сети.
|