pfsense что это такое
Настройка шлюза на базе Pfsense. Часть 1
Что всегда заметит каждый пользователь? Правильно, отсутствие интернета. Но как? «Вконтакте» не грузится — значит, интернета нет. Но ведь бывает, что директор или бравые богатыри из отдела ИБ хотят что-то запретить, что-то собрать, где-то проконтролировать. И тут администратор начинает танцевать вокруг шлюза в интернет. Если в компании много денег, то танцы могут быть длительными и с галантными кавалерами (мар Checkpoint, мистер PaloAlto, господин SonicWall). А вот что делать, если денег только на железо, функционала хотят много, а делать надо быстро? Бежать. На помощь приходит Mr Proper Pfsense, активно поддерживаемый сообществом бесплатный, гибкий и несложный в настройке межсетевой экран на базе FreeBSD.
В первой части рассмотрим классику жанра — межсетевой экран с прокси (аутентификация по учетным данным Active Directory) и фильтрацией контента, а также какой-никакой антивирусной проверкой трафика налету. Отдельно рассмотрим вопрос настройки удаленного доступа пользователей к сети предприятия.
Если будет интерес, могу написать вторую часть инструкции по развертыванию, где рассмотрю вопросы балансировки между несколькими провайдерами, создания и одновременной работы двух шлюзов, а также добавления фич безопасности типа IPS/IDS, фильтр спама, более кошерной фильтрации средствами Dansguardian, сниффинга IM и HTTPS контента и много чего еще интересного.
Для уменьшения возможного холивара: «Да, это можно сделать на %yourdistrname%» и «Да, все можно настроить из командной строки». Так, все формальности соблюдены — можно начинать.
Установку сделаем с флешки. Для этого используем образ pfSense-memstick-2.2.2-RELEASE-i386.img.gz, скачанный с одного из зеркал, указанных на официальном сайте. Очень удобно, что сначала мы выбираем архитектуру, функционал, а потом уже нам предлагают список зеркал. Процесс установки детально расписывать не буду, там все элементарно, никаких дополнительных настроек не нужно. По окончанию установки вам предложат назначить VLAN и определить интерфейсы, а также их назначение. Выглядит это примерно так:
После настройки интерфейсов мы попадаем в меню с ограниченным числом пунктов, однако есть возможность выйти в шелл. На мой взгляд, самым полезным пуктом меню является возможность сброса пароля на веб-морду. Разработчики pfsense настоятельно рекомендуют проводить всю настройку только через графический интерфейс. А выглядит он достаточно симпатично, набор виджетов широк, можно кастомизировать их набор под себя.
Первым делом создаем свой внутренний CA на pfsense или используем уже имеющийся. Для этого в меню System выбираем Cert Manager и в разделе CA проводим необходимые настройки: нужно указать длину ключа, алгоритм хэширования, время жизни и полное имя CA. Настроенный CA будет нам нужен для создания OpenVPN-сервера и для работы по LDAPS.
Теперь интегрируем наш шлюз с Active Directory. В разделе Servers блока User Manager из меню System были проведены настройки на использование контроллера домена. Все до безобразия просто — указал адрес, транспорт, область поиска, контейнеры с учетками, креды для создания привязки и шаблон для заполнения Microsoft AD — можно выпускать кракена пользователей в интернет.
Перейдем к настройке правил фильтрации трафика. Во-первых, если требуется любая группировка адресов, портов, URL, тогда добро пожаловать на вкладку Aliases. Во-вторых, вы можете настроить временные промежутки, которые можно использовать для работы правил. По умолчанию создано правило «всем везде все можно», а также правило, которое не дает заблочить доступ к веб-морде. Создание правил выглядит довольно буднично:
Однако есть ряд дополнительных возможностей, например, разрешенные ОС, какие могут быть выставлены TCP-флаги, график работы правила, а также инспектор протоколов прикладного уровня.
Настройка удаленного доступа OpenVPN с аутентификацией по паролю в локальной базе и сертификату можно посмотреть тут — www.youtube.com/watch?v=VdAHVSTl1ys. Выбор протоколов удаленного доступа невелик — IPSec, L2TP, PPTP и OpenVPN. При выборе PPTP сам pfsense напишет Вам, что протокол небезопасен и лучше выбрать другой.
Аутентификация в локальной базе была выбрана с целью сохранения возможности удаленного подключения в случае каких-либо неполадок с серверами каталогов.
Для экспорта настроек OpenVPN для устройств на разных платформах нужно установить пакет OpenVPN Client Export Utility, который есть в списке доступных для установки пакетов. Теперь возвращаемся к истокам – во вкладку Cert Manager, там создаем сертификат для сервера VPN и каждого клиента. Разница только в типе сертификата.
Переходим к настройке сервера OpenVPN. Выбираем режим работы сервера – в моем случае «Remote Access (SSL/TLS + User Auth)», сервер аутентификации, протокол, порт, нужный сертификат сервера VPN и выставляем нужные параметры шифрования. То, что предлагается по умолчанию — не лучший выбор.
Дальше настраиваем VPN-сеть и выставляем настройки для клиентов. Тут мы можем определить, стоит ли выдавать клиенту DNS-сервера, весь ли трафик клиента гнать в туннель и т.д. После этого сохраняемся и отправляемся на вкладку client export. Отсюда мы экспортируем нужные для подключения настройки и сертификат пользователя.
Кстати, при настройке сервера можно было воспользоваться Wizardом, который провел бы Вас через все “печали и невзгоды” настройки OpenVPN. Некий аналог кнопки “Сделать хорошо”.
Конечно, если у вас многим пользователям нужен удаленный доступ, то работа по выдаче и отзову сертификатов, экспорту настроек, заведению пользователей в локальную базу превратиться в очень скучное, но ответственное задание. Считаю, что при подобных требованиях к масштабированию необходимо наличие отдельного CA с CRL и единой базы аутентификации, типа Active Directory. Но если пользователей мало, то предложенный выше вариант вполне работоспособен.
Нам осталось настроить прокси, фильтрацию контента и антивирусную проверку. Устанавливаем HAVP-пакет – это прокси с ClamAV сканером. Для настройки указываем режим работы ClamAV и прокси, порт, интерфейс, настройки проверки проходящего трафика. Поскольку планируется использование squid, то наш режим работы — «Parent for Squid». Отдельно настраиваем параметры обновления антивирусной базы и ее зеркала.
Переходим к настройке Squid. После установки пакета выбираем режим работы прокси и порт, затем на вкладке «Auth Settings» указываем используемый метод аутентификации. Поскольку у нас стоит задача использования Active Directory в качестве базы пользователей, то используем протокол LDAP. Настройки для интеграции с контроллером домена представлены ниже.
При необходимости настраиваем параметры вышестоящего прокси, управления кэшем и трафиком, а также ACL. Я, например, в whitelist вносил *microsoft.com/* для нормальной работы обновлений и активации ОС, и то не сканало. Но об этом чуть ниже.
Теперь фильтрация – настраиваем squidGuardian. По подходам к фильтрации в принципе есть хорошая статья – «To-do: Фильтруем вся и всё». После установки squidGuardian через пункт «Proxy filter» меню «Services» переходим к его настройке. На вкладке «Blacklist» указываем откуда качать сами блэклисты в формате tar или tar.gz, а также на вкладке «General settings» ставим галочку для включения использования блэклистов. Я использовал бесплатные блэклисты отсюда. В случае необходимости работы контентного фильтра по времени, промежутки можно задать на вкладке Times. Дальше уже настраиваете общие или групповые ACL, главное не забыть поставить галочку напротив запрета использования IP-адресов в URL. Для настройки правил фильтрации нужно нажать «Target Rules List» и выбрать действия для нужных категорий, а также действие по умолчанию.
Если у вас есть необходимость в создании собственных категорий, то можно воспользоваться страничкой «Target Categories». После сохранения ваша категория появится в общем перечне правил. Я создавал свою категорию для разрешения доступа к ресурсам по IP-адресам, у которых нет DNS-имени.
А теперь ложка дегтя. Вполне допускаю, что проблемы вызваны собственной кривизной рук, но все же. Если кто-то из сообщества сможет подсказать какие-то решения, то я буду крайне признателен.
1. Разработчики давно обещают, но пока так и не сделали поддержку L2TP over IPSec.
2. Проблемы при попытке срастить pfsense для использования сертификатов AD CS. Я читал обсуждение отсюда, но так и не смог победить мелкомягкого дракона.
3. Проблемы работы клиент-банков в случае, если у вас есть балансировка между провайдерами.
4. Если у вас указана аутентификация пользователей через AD, а контроллер домена недоступен, то ваш встроенный(. ) админ pfsense также откажется работать. Есть обсуждение на форуме, люди пишут скрипты на php для решения вопроса, но это не является рекомендуемым решением.
5. Видимо тут мои личные проблемы с кириллицей. Во-первых, не работает аутентификация в случае использования пароля в кириллической раскладке. Во-вторых, проблемы в отображении имен контейнеров AD на кириллице.
6. Несмотря на все усилия, время от времени возникают проблемы с сервисами от Microsoft. Чаще всего не работает активация ОС. Думаю, тут все же необходимо будет поправить конфиг squid вручную.
В заключении хотел бы отметить, что данный дистрибутив импонирует мне широким функционалом и гибкостью, очень легко клонировать настройки на несколько шлюзов, есть возможность сделать embedded решения. Конечно, полная настройка через веб ИМХО не есть хорошо, но может именно таким образом разработчики огораживают начинающих админов от болезненных ударов граблей разной высоты.
Обзор PFSense
Дистрибутивов для построения роутеров и брандмауэров — великое множество. Однако большая их часть (не считая всяческих проприетарных и работающих на иных, нежели x86, платформах) основана на ядре Linux. Но ведь помимо Linux есть еще и другие ядра, и на их основе тоже можно делать специализированные дистрибутивы. Один из них, pfSense, и будет рассмотрен в данной статье.
Введение
pfSense основан на ядре FreeBSD, но не требует каких-либо знаний и умений, специфичных для данной ОС. Практически весь функционал доступен через веб-интерфейс. А надо сказать, функционал у pfSense обширный. Поддерживаются следующие возможности:
Этим возможности 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. Выбор ядра
Хакер #190. Что скрывает Tor?
Адрес по умолчанию для роутера 192.168.1.1, имя пользователя для веб-интерфейса admin, пароль pfsense. После первого входа будет предложено настроить роутер с помощью мастера. В принципе, в моем случае (тестовый стенд на VirtualBox) пошли почти все значения по умолчанию, за исключением пункта настройки WAN «Block RFC1918 Private Networks» — поскольку WAN у меня изначально был фиктивный, этот чекбокс пришлось снять.
Один из этапов начальной настройки pfSense
По завершении настройки нас выбросит в Dashboard, где можно увидеть статус всяческих служб и самой системы. Сразу после входа, впрочем, полезной информации мало, но можно добавлять виджеты для большего информирования в Dashboard’е.
pfSense Dashboard. Здесь можно видеть статус основных служб
Обзор интерфейса
Как ты уже заметил, сверху в веб-интерфейсе имеется строка меню с выпадающими при наведении списками. Разберемся, что скрывается за названиями.
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.
Итак, по меню мы кратко пробежались, можно переходить к более детальному описанию некоторых интересных и вкусных вещей.
Продвинутые настройки и примеры конфигурации
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, но нет — они находятся совсем в другом месте.
Создание MultiWAN-подключения
После перехода мы видим таблицу, где прежде всего стоит обратить внимание на столбцы Gateway и Monitor IP. Если назначение первого столбца объяснять не нужно, то столбец Monitor IP служит для проверки соединения, на него будут время от времени посылаться пинги. По умолчанию адрес для проверки совпадает с адресом шлюза. Для создания MultiWAN тебе нужно первым делом перейти на вкладку Groups и создать там группу шлюзов — для этого нажимаем на кнопку с плюсиком и заполняем поля. Стоит дать их описание:
Установка пакетов FreeBSD
И после установки запускаем:
Видим привычный двухпанельный интерфейс, хоть и в непривычной цветовой гамме.
Сохранение и восстановление конфигурации
Все настройки pfSense хранятся в одном XML-файле — остальные конфиги генерируются на его основе. И существует несколько вариантов сохранения и восстановления данного файла. Рассмотрим их.
Как и положено всякому уважающему себя *nix-дистрибутиву, pfSense поддерживает более чем один способ бэкапа.
Заключение
pfSense в абсолютном большинстве случаев вполне способен служить заменой коммерческим решениям от той же Cisco. Если при этом добавить возможность добавления пакетов из репозитория самого pfSense, то он даже в чем-то их и превосходит. Но, даже не учитывая, что большинство версий упомянутых приложений честно помечены Beta (а то и вовсе Alpha), нужно четко осознавать: pfSense заточен под типичные конфигурации. Да, кирпичиков этих самых типичных конфигураций в нем много, однако стоит от них отступить, и окажется, что сделать нечто нестандартное в pfSense не представляется возможным.
Таким образом, если конфигурация твоей сети крайне неординарна, лучше использовать коммерческие решения или пилить роутер самостоятельно на основе той же Free/OpenBSD/Linux. В противном же случае (а таких, повторюсь, большинство), pfSense выглядит не худшим вариантом.
Pfsense – шлюз за пять минут
В этой статье я хочу рассказать вам о замечательном, с моей точки зрения, продукте – программном маршрутизаторе pfsense.
Основанный на платформе FreeBSD, славящийся своей надежностью, и хорошо отлаженном, интуитивно понятном веб интерфейсе, позволяющем в буквальном смысле настроить маршрутизатор за пять минут.
Кроме того, у нас есть возможность с помощью встроенного менеджера пакетов расширять функционал маршрутизатора, установив например squid в качестве прокси, или suricata в качестве IDS/IPS защиты. Кроме этого мы можем легко сделать удалённый доступ настроив OpenVPN сервер.
Давайте начнём установку, скачав установочный файл с официального сайта www.pfsense.org
Минимальные заявленные требования для версии 2.4.4:
CPU 600 MHz или быстрее
RAM 512 MB или больше
4 GB на HDD
Нам предложат небольшой мастер настроек для первоначального конфигурирования – вводим предпочительные значения.
В принципе, мы уже получили рабочую систему с двумя интерфейсами. У нас в примере есть еще третий сетевой интерфейс – по умолчанию он выключен. Если вы хотите задействовать и его например в качестве третьей подсети – переходите на вкладку interfaces, Assignments. Тут мы можем добавить и сконфигурировать настройки для нового интерфейса, нажав сначала кнопку add, а затем кликнув по названию интерфейса и поставив галочку “Enable interface”.
Теперь давайте добавим правила для интерфейсов. Я хочу получать доступ к нашему маршрутизатору через WAN (в работающий среде такого делать не стоит, по умолчанию извне запрещены все подключения)
Добавим правило разрешающее подключение извне с любого IP и порта на 443 порт нашего маршрутизатора.
Block private network и block bogon networks означает, что по умолчанию блокируются диапазоны приватных частных сетей, и адреса из диапазонов еще не распределенных или зарезервированных.
Не забывайте, что правила обрабатываются по очереди, и если первое правило у вас разрешающее, а идущее за ним такое же правило запрещающее (или просто попадающее под такие же условия) то сработает первое правило и обработка остановится.
Теперь представим, что во внутренней сети у нас есть сервис, к которому нужно предоставить доступ извне. Представим что это почтовый сервер, и он должен принимать почту на 25-м порту. Нам нужно сделать проброс порта во внутреннюю сеть. Здесь нам поможет пункт firewall – NAT, port forward.
Выбираем интерфейс на который будет приходить запрос, выбираем протокол – в нашем случае это TCP, Destinantion port range – порт, или диапазон портов, при обращении на который произойдёт переадресация на Redirect target port, в нашем случае это SMTP, он же 25-й порт. Filter rule association выбираем add aassociation rule – в firewall автоматически добавится разрешающее правило привязанное к правилу проброса порта. Нажимаем save и apply – и теперь при обращению извне к 25-му порту произойдёт переадресация во внутреннюю сеть на 25-ё порт.
И так, теперь мы имеем: WAN интерфейс, смотрящий в интернет, и LAN интерфейс, смотрящий в локальную сеть. Достаточно указать всем компьютерам локальной сети в качестве шлюза LAN интерфейс – и у пользователей появится доступ в интернет, а снаружи периметр надежно защищен брандмауэром нашего маршрутизатора – работает он на основе packet filter, встроенного в FreeBSD.
Представим теперь, что у нас довольно много различных сервисов, проброшенных внутрь сети, надо их тоже как то обезопасить. Фаервол спасет нас только на уровне IP и TCP, то есть 4-го и 3-его уровня модели OSI. А нам нужно защищать пользователей внутри сети и наши внешние сервисы. В этом нам поможет suricata – анализатор сетевых пакетов. Установить его можно через package manager.
Теперь в меню services нам доступна наша IDS.
В меню interfaces нажимаем add, и добавляет WAN интерфейс, настройки можем оставить по умолчанию.
Важная вкладка Global Settings. Здесь мы выбираем какие правила скачивать. Правила – это предопределенные паттерны событий, списки IP адресов которые представляют угрозу. Они будут всё время обновляться. Есть платная и бесплатная версия этих обновлений. Для бесплатной нужно зарегестрироваться по ссылке, которая будет там же на странице – Sign Up for a free Registered User Rules Account. Поставить галочки, после регистрации получить Snort Oinkmaster Code и вставить его в соответсвующее поле.
Чуть ниже на странице выставляем интервал обновления правил, а еще ниже время удаления заблокированных IP адресов из списка.
Проверяем – переходим на вкладку update, и пробуем обновить наши правила.
Если правила у нас удачно загрузились, переходим на вкладку wan categories. Данная секция позволяет выбрать уровень срабатывания правил – IPS Policy Selection и действие при срабатывании правила – только предупреждение или заданное в правиле действие (например drop connection)
На вкладке interfaces – wan settings есть поле Alert and Block Settings, если поставить галочку Block Offenders хосты на которых сработали правила будут блокироваться.
Если suricata ошибочно заблокировал хост или сайт, переходим на вкладку blocks, и удаляем IP из таблицы.
Если же правило срабатывает постоянно, заходим на вкладку alerts, находим правило, и нажимаем красный крестик. Этим мы отключим данное правило.
Теперь представим, что мы хотим исключить какой-нибудь IP из проверки. Для этого идём в меню firewall – aliases, и создаём новый список с типом hosts.
Далее идём в suricata – passlists и добавляем созданный список алиасов. Теперь все адреса добавленные в этот список никогда не заблокируются. Не забываем после добавления перезапустить сервис.
Отлично, мы создали и защитили наш шлюз в интернет. Настало время подумать об удаленном доступе внутрь сети для пользователей. В этом нам поможет сервер OpenVPN.
На вкладке VPN OpenVPN создаём новый сервер. Server mode выбираем Remote access (SSL/TLS+User Auth) то есть удаленный доступ с аутентификацией по сертификату и паролю.
Протокол UDP v4, режим работы туннельный интерфейс WAN и порт – по умолчанию 1194.
Далее идём в System – Certificate Manager и создаём центр сертификации.
Теперь можно выбрать его в настройках
Далее раздел tunnel network. Сначала указываем подсеть для клиентов OpenVPN – IPv4 Tunnel Network. Теперь указываем к какой сети разрешаем доступ – IPv4 Local network(s).
Inter-client communication – разрешить взаимодействие между клиентами, Duplicate Connection – разрешить одновременные подключения с одного аккаунта.
Раздел Advanced Client Settings. Опция DNS Default Domain отдаёт суффикс домена для односложных имён. DNS Server 1 – указываем внутренний DNS. Force DNS cache update – обновляем кеш DNS в клиенте.
В Advanced Configuration есть возможность прописать маршрут. Например мы хотим, что бы при запросе какого-то адреса мы заворачивали трафик на него в туннель. Это можно сделать с помощью команды push route, как на скриншоте.
Теперь сохраняем наш сервер, и устанавливаем через менеджер пакетов openvpn-client-export
Идём в user manage и создаём нового пользователя. Не забываем поставить галочку Click to create a user certificate. Следующий шаг перейти в OpenVPN – client export. Здесь мы увидим выбор установочных файлов для пользователя. Если выбрать windows vista and later, мы получим установочный файл для windows, который содержит сам клиент и сертификат. Можно так же скачать конфигурационный файл под android или под mac. После установки, клиент нужно запускать от имени администратора, что бы сработала очистка кеша и добавились маршруты. Не забываем, что в качестве шлюза у машин в локальной сети должен быть указан pfsense.
Отлично. Теперь у нас есть маршрутизатор, выход в интернет, опубликованы сервисы, настроена безопасность, и есть удалённый доступ. Уже неплохо.
Давайте теперь настроим прокси сервер squid с антивирусом. Так мы сможем контролировать трафик пользователей и проверять его на шлюзе антивирусом.
Для начала установим пакет squid.
Перейдём в раздел настроек general. Что бы squid заработал, нужно поставить галочку Enable Squid Proxy. Выбираем интерфейс, на котором будем перехватывать запросы – Proxy Interface(s). Выбираем порт – по умолчанию 3128. Если мы не включим transparent mode, то есть прозрачный режим, то для доступа к интернету нам понадобится прописать адрес прокси сервера и порт в браузерах пользователей. Важный пункт Allow Users on Interface. Он означает, что пользователям на этом интерфейсе автоматически предоставляется доступ к прокси серверу, в противном случае будет запрошена аутентификация.
Далее идёт раздел Transparent Proxy Settings. Если мы хотим что бы для пользователей было всё прозрачно, и нигде ничего прописывать им было не нужно – включаем этот режим. Запросы будут перехватываться и автоматически проходить через прокси. Пункт Bypass Proxy for Private Address Destination говорит о том, что адреса назначения из внутренних сетей проксироваться не будут.
Bypass Proxy for These Source IPs и Bypass Proxy for These Source IPs указывают соответственно адреса источников и назначения, а также подсети или хосты которые не проксируются.
Следующий пункт SSL Man In the Middle Filtering является важным. Зашифрованный SSL трафик не может быть расшифрован шлюзом, поэтому блокировки сайтов а также проверка антивирусом работать не будет. Включаем enable ssl filtering, выбираем режим Splice Whitelist, Bump Otherwise. Это означает, что все сессии, которые не находятся в бело листе будут перехватываться. Для этого режима должен быть указан центр сертификации шлюза – CA, мы создали его раньше. Как это работает. Клиент посылает запрос на соединение с сайтом SSL через шлюз. Далее шлюз устанавливает от СВОЕГО имени соединение с сайтом SSL обратный трафик расшифровывается на шлюзе, шифруется сертификатом ШЛЮЗА и отправляется клиенту. Что бы это работало, на ВСЕХ компьютерах локальной сети сертификат сервера доложен быть установлен в Доверенные корневые сертификаты.
Наконец последний раздел – Headers Handling, Language and Other Customizations. Здесь важным пунктом будет Visible Hostname. Именно это это будет отображаться в сообщениях об ошибках.
Теперь включим антивирус на вкладке ClamAV Anti-Virus Integration Using C-ICAP, укажем периодичность обновления баз ClamAV Database Update, включим проверку Google Safe Browsing и исключим из проверки видео и аудио – Exclude Audio/Video Streams.
На вкладке ACLs мы можем задавать разрешения для IP адресов и подсетей, а на вкладке Traffic Mgmt устанавливать ограничения на полосу пропускания. Вкладка Authentication отвечает за выбор способов аутентификации пользователей.
Также есть функционал reverse proxy, который находится в разделе services reverse proxy. Суть его в том, что бы перехватывать запросы извне, и принимать только те из них, которые соответствуют определенным паттернам. Уже настроенный функционал есть для серверов exchange.
Для exchange сервера настройки будут следующие.
Reverse HTTPS Port 443, через него работает OWA, active sync и outlook anywhere. Reverse HTTPS Default Site тут нужно указать имя внешнего сайта, DNS котрого указывает на ваш шлюз. Reverse SSL Certificate – сертификат, в котором должны быть указаны ваши внешние имена.
На 443 порт вам нужно создать правило разрешающее доступ, проброс портов настраивать на 443 порт не нужно.Сервер, на который будут перенаправляться запросы будет указан ниже. А также сервисы, которые вы хотите что бы работали через reverse proxy.
В качестве примера, рассмотрим еще reverse proxy для сервере обновлений NOD32. Работает он на порту 2221.
На вкладке web servers укажем порт и IP внутри сети сервера обновлений.
А на вкладке mappings укажем созданного пира, и самое главное регулярные выражения, с которым будет работать reverse proxy. Например ^http://site.ru:2221/nod.*$ Означает что начало строки может быть только такое: http://site.ru:2221/nod а дальше любой символ и конец строки. Например nod6C47.nup, то есть файл обновления.
Можно посмотреть и конфиг для exchange. Для этого нужно зайти в Diagnostocts – Edit file – Browse. Перейти в папку usr/local/etc/squid/squid.conf.
Здесь мы увидим паттерны:
Вот сколько всего можно сделать при помощи pfsense, причём довольно быстро и эффективно. Охвачена лишь небольшая часть функционала, и очень неглубоко.
Если у Вас есть вопросы, задавайте их на форуме, или ниже в комментариях.