огляд PFSense

  1. Вступ
  2. Установка і початкова настройка

Дистрибутивів для побудови роутерів і брандмауерів - безліч. Однак більша їх частина (не рахуючи усіляких пропрієтарних і працюють на інших, ніж 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. вибір ядра

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

В принципі, в моєму випадку (тестовий стенд на VirtualBox) пішли майже всі значення за замовчуванням, за винятком пункту настройки WAN «Block RFC1918 Private Networks» - оскільки WAN у мене спочатку був фіктивний, цей чекбокс довелося зняти

Один з етапів початкової настройки pfSense

Після встановлення нас викине в Dashboard, де можна побачити статус усіляких служб і самої системи. Відразу після входу, втім, корисної інформації мало, але можна додавати віджети для більшого інформування в 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 року).

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

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

Потім перевіряємо. Відключаємо якийсь кабель і з клієнтської машини даємо traceroute. Якщо все нормально, пакети будуть йти через резервний шлюз. У веб-інтерфейсі же стан як шлюзів, так і їх груп можна подивитися в Status -> Gateways на вкладках Gateways і Gateway Groups відповідно.

Оскільки під капотом роутера у нас трохи допіленная 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 зберігаються в одному файлі 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 виглядає не гіршим варіантом.

Оскільки під капотом роутера у нас трохи допіленная FreeBSD, може виникнути питання: чи можна поставити на нього сторонні пакети, відсутні в репозиторії самого pfSense?

Дополнительная информация

rss
Карта