Андрей Смирнов
Время чтения: ~27 мин.
Просмотров: 50

Настройка шлюза на базе Pfsense. Часть 1

Рассмотрим настройку pfSense.

Для начал, думаю, стоит объяснить что такое pfSense и Site-to-Site VPN и в чем преимущества. Затем перейдем к реализации.

pfSense — это дистрибутив межсетевого экрана основанный на операционной системе FreeBSD. Дистрибутив позволяет реализовать такие механизмы, как NAT, CARP, VPN (в т.ч. PPTP, IPsec, OpenVPN), Captive portal. Кроме этого выполняет функционал классического файрволла, динамического DNS, DHCP и прокси сервера. Прост в развертывании.

Почему Site-to-Site?

Site-to-Site позволяет сконфигурировать только шлюзы в удаленных подсетях, при этом отпадает необходимость конфигурирования самих узлов сети. Говоря простым языком, способ Site-to-Site соединяет два офиса в единую сеть, а Point-to-Site — удаленных сотрудников с офисом. В статье рассмотрим пример соединения двух уже существующих сетей — физической и виртуальной.

Процесс настройки условно разделим на два этапа:

1. Настройка pfSense и конфигурирование частных сетей;

2. Реализация Site-to-Site.

Приступаем.

Сперва настроим внутреннюю локальную сеть и интерфейс шлюза. Для этого, в браузере, переходим по IP-адресу сервера или доменному имени, если такое имеется. Вводим логин и пароль и попадаем на Главный экран (Dashboard). В меню программы переходим в раздел интерфейсов (Interfaces) -> Назначение (Assignments). В нашем примере только два интерфейса и уже распределены — оставляем как есть. Если у Вас несколько интерфейсов, следует выбрать необходимый интерфейс по mac-адресу и нажать кнопку добавить (Add).

1.png

Назначаем IP-адрес интерфейсу “смотрящему” в локальную сеть. В меню программы переходим в раздел интерфейсов (Interfaces) -> LAN. По окончании настройки нажимаем кнопку Сохранить (Save).

2.png

Для всех серверов в локальной сети, в качестве шлюза по умолчанию, устанавливаем IP-адрес, указанный в LAN.

Важно! Если вы используете облачные сервисы, то объединять узлы сети необходимо из панели администрирования облачного сервиса через “Виртуальные сети”.

Настраиваем Firewall для локальных соединений.

В меню программы выбираем Firewall -> Правила (Rules) -> LAN. Наживаем кнопку Добавить (Add).

На новой странице проверяем параметры:

настраиваемый интерфейс (Interface) — LAN;

Протокол (Protocol) — TCP, но можно и Any;

Источник (Source) — Any;

Назначение (Destination)- Any.

Настройки сохраняем кликнув по клавише Сохранить (Save).

3.png

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

Приступаем к настройке туннеля Site-to-Site.

В начале настраиваем OpenVPN. В главном меню выбираем VPN -> OpenVPN и кликаем по кнопке Добавить (Add).

На новой странице выбираем:

Режим работы сервера (Server mode) — Peer to Peer (Shared Key);

Протокол (Protocol) — UDP on IPv4 only;

Device mode — tun — Layer 3 Tunnel Mode;

Интерфейс (Interface) — WAN;

Порт (Local port) — 1194;

Shared key — Устанавливаем галку напротив Automatically generate a shared key;

Алгоритм шифрования (Encryption algorithm) — оставляем по умолчанию;

Аппаратное шифрование (Hardware Crypto) — No hardware crypto acceleration;

IPv4 Tunnel Network: 10.0.10.0/24 — указываем адреса используемые в туннеле;

IPv4 Remote networks: 10.0.1.0/24 — указываем адрес сети находящийся за удаленным шлюзом pfSense.

Сохраняем настройки и не забываем кликнуть по зеленой кнопке Применить изменения (Apply Changes).

4.png

Настроим Firewall для нового интерфейса.

В главном меню выбираем Firewall -> Правила (Rules). Выбираем пункт OpenVPN и кликаем по кнопке Добавить (Add).

На обновленной странице проверяем параметры:

Интерфейс (Interface) — OpenVPN;

Протокол — TCP, но лучше Any;

Источник (Source) и назначение (Destination) — Any.

По окончании кликаем по кнопке Сохранить (Save). Не забываем кликнуть по зеленой кнопке Применить изменения (Apply Changes)

5.png

Настроим Firewall для интерфейса WAN.

В главном меню выбираем Firewall -> Правила (Rules). Выбираем пункт OpenVPN и кликаем по кнопке Добавить (Add).

Интерфейс (Interface) — WAN;

Протокол (Protocol) — UDP;

Диапазон портов назначения (Destination port range) в обоих выпажающих списках (From и To) выбираем OpenVPN (1194).

Сохраняем настройки. Не забываем кликнуть по зеленой кнопке Применить изменения (Apply Changes).

6.png

Теперь копируем сгенерированный ключ, для передачи его на удаленный маршрутизатор. В главном меню выбираем VPN -> OpenVPN. Кликаем по значку “Карандаш” (редактировать). На обновленной странице из пункта Shared Key копируем всё содержимое поля в текстовый редактор, например, Блокнот.

7.png

Осталось настроить удаленный pfSense-шлюз в качестве клиента.

В главном меню выбираем VPN -> OpenVPN и кликаем по пункту Clients, затем по кнопке Добавить (Add).

На открывшейся странице проверяем параметры:

Режим работы сервера (Server mode) — Peer to Peer (Shared Key);

Протокол (Protocol) — UDP on IPv4 only;

Device mode — tun — Layer 3 Tunnel Mode;

Интерфейс (Interface) — WAN;

Адрес сервера (Server host address) — указывается именно WAN интерфейс сервера, который настраивали ранее;

Порт (Local port) — 1194;

Shared key — Снимаем галку напротив Automatically generate a shared key;

Алгоритм шифрования (Encryption algorithm) — оставляем по умолчанию;

Аппаратное шифрование (Hardware Crypto) — No hardware crypto acceleration;

IPv4 Tunnel Network: 10.0.10.0/24 — указываем адреса используемые в туннеле;

IPv4 Remote networks: указываем адрес сети находящийся за удаленным сервером — шлюзом pfSense.

Кликаем Сохранить (Save). Затем по зеленой кнопке Применить изменения (Apply Changes).

8.png

На этом настройка окончена.

Облачные VPS/VDS

Создайте сервер всего за 1 минуту!

от8 руб/месяцmikrotik-vpn-server-01.png

Создаем профиль для туннеля в PPP -> Profiles.

mikrotik-vpn-server-02.png

На остальных вкладках настройки дефолтные. Далее создаем пользователя в PPP -> Secrets.

mikrotik-vpn-server-03.png

Теперь запускаем l2tp сервер. Идем в PPP и жмем в кнопку L2TP Server.

mikrotik-vpn-server-04.png

Устанавливаем настройки для l2tp сервера. ipsec пока не включаем.

mikrotik-vpn-server-05.png

VPN сервер настроен. Теперь создадим для него постоянный интерфейс, чтобы на его основе создавать статические маршруты. Идем в Interfaces и создаем L2tp Server Binding.

mikrotik-vpn-server-06.png

Последний штрих. Создаем статический маршрут, с помощью которого абоненты локальной сети сервера смогут подключаться к абонентом локальной сети за удаленным роутером через vpn. Идем в IP -> Routes и добавляем маршрут.

Я не рассмотрел вопрос настройки firewall, так как не хочется раздувать и так объемную статью. Напрямую это не относится к указанной теме. Подробнее читайте о настройке фаервола отдельно по приведенной ссылке. Здесь же только укажу, что необходимо открыть на firewall для корректной настройки l2tp.

На сервере необходимо создать следующие правила для фаерволла, чтобы мы могли достучаться до нашего L2TP сервера. IP -> Firewall -> Filter Rules. Необходимо создать разрешающее правило в цепочке input для следующих портов и протоколов:

  • Протокол: UDP
  • Разрешаем порты: 1701,500,4500
  • В качестве In.Interface указываем тот, через который происходит l2tp подключение.

Отдельно добавляем еще одно правило, разрешающее протокол ipsec-esc.

На сервере все готово. Идем настраивать l2pt клиент на удаленном микротике.

L2tp клиент

Здесь все достаточно просто. Идем в PPP и добавляем L2TP Client. Указываем настройки, которые задавали ранее на сервере.

Добавляем статический маршрут, чтобы клиенты этого роутера знали, куда обращаться к абонентам удаленной локальной сети за vpn.

На этом все. Мы настроили l2tp на удаленном микротике и таким образом объединили 2 локальных сети с помощью vpn. В списке ip адресов при активном l2tp соединении на сервере и клиенте вы должны увидеть ip адреса из заданного на сервере диапазона для vpn сети — 10.10.5.1-10.10.5.100. Теперь можно пропинговать с обоих сетей противоположные.

У меня для теста к обоим микротикам подключены ноутбуки. Сейчас я измерю скорость соединения с помощью iperf3. За роутером m-remote на ноутбуке 10.30.1.254 запускаю сервер, а на 10.20.1.3 агента. Запускаем тест скорости vpn соединения:

Средняя скорость 194 мбит/сек. Откровенно говоря, я не понял, почему такая низкая скорость. Мой тестовый стенд собран на двух роутерах микротиках и гигабитного микротик свитча между ними. Ожидал увидеть что-то в районе 500 мбит/сек. Напомню, что туннель пока без шифрования. При этом загрузка процессоров на роутерах была в районе 90-95%. То есть фактически потолок этих железок.

Попробуем теперь включить шифрование ipsec и замерить скорость с ним.

Настраиваем ipsec

С настройкой ipsec для l2tp я залип на некоторое время. В сети много инструкций, но все они устарели. Как оказалось, в последних версиях прошивок, запустить ipsec в дефолтных настройках не просто, а очень просто. Для этого надо всего лишь в свойствах l2tp сервера указать Use IPsec — yes и задать пароль.

Все необходимые настройки ipsec будут созданы автоматически. На агенте сделать то же самое — включить ipsec шифрование и указать пароль.

После подключения l2tp клиента увидите в логе похожие строки:

19:17:00 l2tp,ppp,info l2tp-out1: initializing...  19:17:00 l2tp,ppp,info l2tp-out1: connecting...  19:17:03 ipsec,info initiate new phase 1 (Identity Protection): 192.168.13.197[500]<=>192.168.13.1[500]  19:17:04 ipsec,info ISAKMP-SA established 192.168.13.197[500]-192.168.13.1[500] spi:407844c0ceb5d2ab:46ce7ffb25495efd  19:17:07 l2tp,ppp,info l2tp-out1: authenticated  19:17:07 l2tp,ppp,info l2tp-out1: connected

Для того, чтобы убедиться, что шифрование ipsec работает, можно зайти в раздел IP -> Ipsec -> Installed SAs и посмотреть на счетчик зашифрованных пакетов. Если он растет, значит все в порядке, трафик шифруется.

Там же в разделе Remote Peers можно посмотреть список удаленных клиентов, для которых работает ipsec шифрование, посмотреть используемые алгоритмы. Все дефолтные настройки ipsec живут в этом разделе. Вы можете посмотреть их, изменить или добавить новые профили. По-умолчанию используется алгоритм авторизации sha1 и шифрование AES. Можете изменить эти параметры, если разбираетесь в теме. Я умничать не буду, тему шифрования не копал. Какие алгоритмы максимально быстры и защищены — не знаю.

Проведем тесты скорость vpn соединения l2tp + ipsec.

У меня получилось вот так — 26 мбит/сек в среднем. При этом загрузка процессора 100%. Не густо. Данные железки для шифрованных каналов пригодны очень слабо. В данных тестах они ничем, кроме непосредственно теста не нагружены. В реальных условиях скорость будет еще ниже.

С настройками vpn на базе l2tp + ipsec закончили. Продолжим настройку остальных vpn туннелей и сравним их скорость.

Настройка pptp сервера в mikrotik

Настройка pptp сервера не отличается принципиально от l2tp. Логика и последовательность действий та же самая. Сначала создаем pool адресов в IP -> Pool для vpn сети. Я буду использовать тот же пул, что мы создали ранее.

Далее создаем профиль для pptp туннеля в разделе PPP -> Profiles.

В этом профиле указаны дефолтные настройки шифрования, при которых оно отключено. Проверим сначала скорость vpn канала без них. Создаем нового пользователя для удаленного pptp подключения.

Включаем pptp сервер в разделе PPP.

Теперь создадим в Interface List PPTP Server Binding по аналогии с предыдущим разделом.

И в завершение добавляем статический маршрут до удаленной сети через pptp подключение.

Настройка pptp сервера закончена. На фаерволе нужно будет открыть для входящих подключений внешнего интерфейса следующие вещи:

  • TCP port 1723
  • GRE протокол

Отправляемся настраивать pptp клиент.

pptp клиент

Отправляемся на удаленный роутер и там настраивает подключение через pptp client. Идем, как обычно, в раздел PPP и добавляем PPTP Client. На вкладке General ничего не трогаем, а на Dial Out указываем адрес pptp сервера и имя пользователя для подключения.

Добавляем статический маршрут до удаленного офиса через vpn туннель.

Все готово. Активируем pptp подключение и пробуем пинговать адреса в локальной сети. Убедиться в том, что шифрование отключено можно в статуте pptp соединения на клиенте.

Проверим теперь скорость vpn соединения по pptp.

Те же самые 194 мбит/сек, что на нешифрованном l2tp при 100% загрузке процессора. Вообще, было немного странно увидеть абсолютно такие же цифры. Проводил тесты несколько раз, но везде был стабильно один и тот же результат. Без шифрования нет разницы по скорости между l2tp и pptp соединением.

Теперь включим шифрование в pptp на сервере и посмотрим на скорость. Для этого указываем в pptp профиле явно, чтобы использовалось шифрование. Идем в PPP -> Profiles и редактируем наш профиль.

Убедимся в статусе клиента, что шифрование работает.

Тестирую скорость vpn соединения по pptp с включенным шифрованием.

Получилось в среднем 71 мбит/сек. Неплохой результат в сравнении с шифрованием ipsec в l2tp. Как я и говорил ранее, pptp сервер хорошо подходит там, где шифрование либо совсем не нужно, либо допускается возможность, что зашифрованный трафик будет расшифрован. Но при этом он все равно закрыт шифрованием и каждый проходящий не сможет ничего увидеть. Нужно как минимум снять дампт трафика и каким-то образом подбирать ключ по словарю или перебором. Не знаю точно, как это реализуется на практике. Не изучал вопрос.

Перейдем теперь к openvpn серверу в микротик. Очень любопытно посмотреть на тесты скорости этого типа vpn соединений.

Настройка openvpn server в микротик

В настройке openvpn сервера на mikrotik нет ничего сложного, кроме нюанса с сертификатами. Тому, кто с ними никогда не работал, может показаться все слишком замороченным. К тому же в самом микротике нет никаких средств для создания сертификатов сервера и клиента. Необходимо использовать сторонние утилиты. Если у вас есть linux машина, можете воспользоваться моей инструкцией по созданию сертификатов для openvpn на linux.

Если у вас нет linux машины, но вы все же настроены поднять vpn туннель с помощью openvpn в микротике, то давайте разбираться с настройкой дальше. Прежде всего нам понадобится дистрибутив openvpn для windows. Скачать его можно по ссылке — https://openvpn.net/community-downloads/. Нас будет интересовать Windows Installer.

Выполняем установку от имени администратора и указываем в процессе компонент под названием EasyRSA 2 Certificate Management Scripts.

Идем в директорию C:Program FilesOpenVPN. Переносим оттуда папку easy-rsa куда-нибудь в другое место, чтобы не приходилось постоянно спотыкаться об UAC, который не даст спокойно работать в Program files. Я перенес в D:tmpeasy-rsa. Переименовываем файл vars.bat.sample в vars.bat. Открываем его на редактирование и приводим примерно к следующему виду.

Для тех, кто не понял, это просто переменные, которые я указал под свои нужды. Там писать можно все, что угодно, не принципиально для нашей задачи. Можно вообще ничего не менять, а оставить как есть. Создаем в директории папку keys. Далее запускаем командную строку от администратора и перемещаемся в указанную директорию D:tmpeasy-rsa.

Далее в командной строке пишем vars и жмем enter. Этим мы загрузим переменные из файла vars.bat, потом вводим clean-all. Дальше генерируем Root CA командой — build-ca.

Отвечаем на задаваемые вопросы и завершаем создание корневого сертификата. Он появится в папке D:tmpeasy-rsakeys. Дальше создаем сертификат openvpn сервера командой — build-key-server имя_сервера.

Теперь сгенерируем сертификат для клиента. У меня только один клиент в виде удаленного микротика. Вы создаете ровно столько, сколько вам нужно. Используем команду build-key имя_сертификата.

С созданием сертификатов закончили. Они у нас все лежат в директории keys. На микротик, который будет выступать в качестве openvpn сервера, нужно передать файлы:

  • ca.crt
  • ovpnserver.crt
  • ovpnserver.key

Импортируем сертификаты из добавленных файлов. Идем в System -> Certificates и импортируем сначала ca.crt, потом ovpnserver.crt и ovpnserver.key.

Должно получиться примерно так. Теперь приступаем к настройке openvpn сервера в mikrotik. Создадим для него отдельный профиль в PPP -> Profiles.

Все настройки дефолтные. В качестве локального и удаленного адреса использую Ip Pool, который создал в самом начале настройки l2tp. Добавим удаленного пользователя для openvpn в PPP ->Secrets.

Идем в раздел PPP и жмем OVPN Server. Указываем настройки и загруженный ca сертификат.

Далее добавляем по аналогии с остальными vpn серверами OVPN Server Binding и статические маршруты.

На этом настройка openvpn server в микротик завершена. По дефолту будет использоваться протокол шифрования BF-128-CBC. Его можно поменять в свойствах клиента, а список всех поддерживаемых шифров в свойствах vpn сервера.

Для работы указанной настройки openvpn сервера необходимо открыть входящий tcp порт 1194 на фаерволе. Теперь настроим openvpn клиент и протестируем скорость соединения через vpn на основе openvpn.

openvpn client

Для настройки openvpn client на mikrotik, туда нужна передать сертификаты, сгенерированные на предыдущем шаге. Конкретно вот эти файлы:

  • m-remote.crt
  • m-remote.key

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

Теперь настраивает openvpn клиента. Идем в PPP и добавляем OVPN Client.

Добавляем статический маршрут для доступа к ресурсам удаленной сети за openvpn сервером.

Все готово. Можно подключаться и тестировать скорость vpn соединения через openvpn.

Получилось в среднем 24 мбит/сек при 100% загрузке процессора. Результат сопоставим с l2tp + ipsec. Немного удивил результат. Я думал, будет хуже, чем l2tp, а на деле то же самое. Мне лично вариант с openvpn в целом нравится больше, хотя из-за ограниченности настроек openvpn в микротике преимущества openvpn трудно реализовать. Напомню, что тестировал с шифрованием BF-128-CBC, то есть blowfish.

Вот результат с AES-128-CBC — 23 мбит/сек, примерно то же самое.

С клиент-серверными реализациями vpn сервера в mikrotik разобрались. Теперь просмотрим на скорость l2-vpn в виде eoip tunnel.

Настройка EOIP Tunnel + Ipsec

Настроим vpn сеть на базе EOIP в Mikrotik. Тут нужно понимать одно важное отличие от всех предыдущих настроек, которые мы делали ранее. EOIP туннель работает на уровне l2, то есть оба сегмента сети будут считать, что находятся в одной физической сети. Адресное пространство для обоих будет одно и то же. В моем примере это 10.20.1.0/24. DHCP сервер должен остаться только один для обоих сетей. В моем случае он останется на m-server.

Создаем EOIP туннель на m-server. Идем в Interface list -> EoIP Tunnel и добавляем новый.

Из настроек достаточно указать только удаленный адрес второго микротика. Новый EoIP интерфейс необходимо добавить в локальный бридж вместе с физическими интерфейсами.

Идем на удаленный микротик и там делаем все то же самое, только Remote Address указываем другой.

Этого достаточно, чтобы EoIP туннель сразу же заработал. Его состояние будет RS.

На втором микротике EoIP интерфейс так же нужно добавить в локальный бридж с остальными интерфейсами.

Проще всего проверить, что все в порядке, это запросить по dhcp на m-slave ip адрес для интерфейса bridge. Он должен получить ip адрес от dhcp сервера на m-server, при условии, что в сети больше нет других dhcp серверов. То же самое будет и с локальными машинами в сети за m-slave. Они будут получать ip адреса от dhcp сервера на m-server.

Проверим теперь быстродействие такого vpn туннеля на основе EoIP.

Показываю максимальный результат, который у меня получился — 836 мбит/сек. По какой-то причине в разных тестах скорость плавала в интервале между 600-850 мбит/сек. Для того, чтобы скорость изменилась, необходимо было отключить и заново включить EoIP интерфейс. Скорость впечатляет. При этом, процессор не загружен на 100%. То есть узкое место не он. Похоже я уперся в производительность сети. Напомню, что тут нет никакого шифрования и маршрутизации трафика. Прямой l2 канал между двумя микротиками через EoIP vpn.

Добавим в EoIP туннель шифрование Ipsec и посмотрим на скорость. Для этого меняем настройки каналов на обоих микротиках. Добавляем пароль Ipsec и локальные адреса, отключаем Fast Path.

Измеряем скорость соединения.

У меня получилась скорость vpn при использовании EoIP + Ipsec в среднем 27 мбит/сек. Скорость сопоставима с шифрованными туннелями L2tp и Openvpn. В этом плане никаких приятных сюрпризов не получилось. Шифрование очень тяжело дается этой железке. Можно сказать она для него не предназначена практически совсем.

GRE туннель + Ipsec в mikrotik, создание и настройка

Для настройки GRE туннеля в Mikrotik идем в раздел Interfaces -> GRE Tunnel и добавляем новый со следующими настройками:

Назначаем GRE туннелю ip адрес в IP -> Adresses.

Сразу же создаем статический маршрут для доступа к ресурсам удаленной сети.

Для организации vpn соединения через GRE tunnel то же самое проделываем на удаленном микротике, только меняем соответствующие адреса.

Создаем GRE Tunnel.

Назначаем ip адрес.

Добавляем маршрут в удаленную локальную сеть.

После этого маршрутизация трафика между локальными сетями должна заработать. Не забудьте на firewall разрешить gre протокол.

Проверим теперь скорость соединения по GRE туннелю.

У меня получилось 247 мбит/сек. Напомню, что это нешифрованный маршрутизируемый vpn туннель. Отличие от l2 туннеля EoIP примерно в 3 раза по скорости в меньшую сторону. Выводы делайте сами какие туннели использовать. Если не нужна маршрутизация, то однозначно EoIP.

Теперь проверим то же самое, только настроив в GRE шифрование Ipsec. Добавляем соответствующие настройки в GRE туннели на обоих микротиках.

Измеряю скорость GRE + Ipsec, алгоритм шифрования aes-128 cbc.

Получилось в среднем 29,7 мбит/сек, что примерно соответствует всем результатам с ipsec. Не удивительно, ведь алгоритм шифрования во всех случаях один и тот же. Но тем не менее, в GRE Tunnel скорость немного выше всех остальных участников. Из этого можно сделать вывод, что исключительно для l3 site-to-site подключений GRE Tunnel подходит в плане быстродействия лучше всего.

Сравнение скорости L2tp, Pptp, EoIP, GRE и OpenVPN туннелей

Сведу все данные измерений в единую таблицу для наглядного и удобного анализа и сравнения скоростей всех упомянутых vpn соединений в Mikrotik.

Сравнение скорости vpn каналов в mikrotik
VPN Туннель Шифрование Скорость (Мбит/c)
l2tp нет 194
l2tp IPsec AES-128 CBC 26
pptp нет 194
pptp MPPE128 71
openvpn BF-128-CBC 24
eoip нет 836
eoip IPsec AES-128 CBC 27
gre нет 247
gre IPsec AES-128 CBC 29,7

Приведенная таблица наглядно показывает разницу в различных методах шифрования. С помощью нее можно быстро оценить, к каким потерям производительности может привести шифрование. Сейчас все по-умолчанию все шифруют, но если разобраться, очень часто это не требуется. Можно пойти на некий компромис и использовать pptp сервер, который хоть и не обеспечивает 100% безопасное шифрование, но тем не менее скрывает трафик от просто любопытных глаз и имеет неплохое быстродействие. В любом случае трафик просто так не прочитать, надо целенаправленно приложить усилия для дешифровки. В некоторых случаях такой защиты будет достаточно.

Заключение

Изначально не планировал писать такую большую и подробную статью. Аппетит приходит во время еды. По мере того, как стал углубляться в тему, становилось все интереснее и интереснее попробовать разные варианты и сравнить их. В итоге я перебрал все известные vpn подключения в mikrotik. Не дошли руки только до SSTP, но я точно знаю, что он будет очень медленно работать на RB951G-2hnD и в целом на микротиках медленнее всех остальных решений. Не думаю, что его использование будет оправданно.

Статью писал несколько дней, мог что-то напутать, опечататься или ошибиться. Все замечания принимаю в комментариях. Надеюсь, мой материал исследование на тему настройки vpn соединений в микротиках был вам интересен и полезен. Единственное, о чем жалею, что не затронул тему настройки pptp, l2tp и openvpn подключений на клиентских устройствах сотрудников. Без них материал на тему настройки vpn получился не полноценным, ведь это важная часть работы vpn тоннелей. Их используют не только для объединения офисов, но и для подключения удаленных сотрудников.

Напоминаю, что данная статья является частью единого цикла статьей про Mikrotik.

Онлайн курсы по Mikrotik

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Помимо официальной программы, в курсах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте . Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курсов:

  • Знания, ориентированные на практику;
  • Реальные ситуации и задачи;
  • Лучшее из международных программ.

Помогла статья? Есть возможность отблагодарить автора

Давайте начнём установку, скачав установочный файл с официального сайта www.pfsense.org Минимальные заявленные требования для версии 2.4.4: CPU 600 MHz или быстрее RAM 512 MB или больше 4 GB на HDD

Установка сложностей не вызывает, pfsense автоматически определит WAN и LAN интерфейсы. Если это не так, можно воспользоваться пунктом 1 из меню – assign interfaces, или назначить нужные IP адреса используя пункт 2.Screenshot_3.jpg Следующим этапом переходим в веб интерфейс. В моём примере это адрес WAN интерфейса, полученный по DHCP – https://192.168.1.202/. Что бы зайти через WAN интерфейс временно отключим через консоль firewall командой pfctl -d. Через LAN доступ есть по умолчанию. Используем дефолтные учетные данные – Логин admin пароль pfsense.

Нам предложат небольшой мастер настроек для первоначального конфигурирования – вводим предпочительные значения.

В принципе, мы уже получили рабочую систему с двумя интерфейсами. У нас в примере есть еще третий сетевой интерфейс – по умолчанию он выключен. Если вы хотите задействовать и его например в качестве третьей подсети – переходите на вкладку interfaces, Assignments. Тут мы можем добавить и сконфигурировать настройки для нового интерфейса, нажав сначала кнопку add, а затем кликнув по названию интерфейса и поставив галочку “Enable interface”.

pfsense_install_4-1024x348.jpg

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

pfsense_install_10.jpg

Теперь в меню services нам доступна наша IDS.

Screenshot_11.jpg

В меню interfaces нажимаем add, и добавляет WAN интерфейс, настройки можем оставить по умолчанию.

Screenshot_12-1024x685.jpg

Важная вкладка Global Settings. Здесь мы выбираем какие правила скачивать. Правила – это предопределенные паттерны событий, списки IP адресов которые представляют угрозу. Они будут всё время обновляться. Есть платная и бесплатная версия этих обновлений. Для бесплатной нужно зарегестрироваться по ссылке, которая будет там же на странице – Sign Up for a free Registered User Rules Account. Поставить галочки, после регистрации получить Snort Oinkmaster Code и вставить его в соответсвующее поле.

Screenshot_13-1024x809.jpg

Чуть ниже на странице выставляем интервал обновления правил, а еще ниже время удаления заблокированных IP адресов из списка.

pfsense_install_14-1024x655.jpg

Проверяем – переходим на вкладку update, и пробуем обновить наши правила.

pfsense_install_15-1024x577.jpg

Если правила у нас удачно загрузились, переходим на вкладку wan categories. Данная секция позволяет выбрать уровень срабатывания правил – IPS Policy Selection и действие при срабатывании правила – только предупреждение или заданное в правиле действие (например drop connection)

Screenshot_16-1024x196.jpg

На вкладке interfaces – wan settings есть поле Alert and Block Settings, если поставить галочку Block Offenders хосты на которых сработали правила будут блокироваться.

Screenshot_17-1024x431.jpg

Если suricata ошибочно заблокировал хост или сайт, переходим на вкладку blocks, и удаляем IP из таблицы.

Screenshot_18-1024x526.jpg

Если же правило срабатывает постоянно, заходим на вкладку alerts, находим правило, и нажимаем красный крестик. Этим мы отключим данное правило.

Screenshot_19-1024x197.jpg

Теперь представим, что мы хотим исключить какой-нибудь IP из проверки. Для этого идём в меню firewall – aliases, и создаём новый список с типом hosts.

Screenshot_20-1024x344.jpg

Далее идём в suricata – passlists и добавляем созданный список алиасов. Теперь все адреса добавленные в этот список никогда не заблокируются. Не забываем после добавления перезапустить сервис.

Screenshot_21-1024x745.jpg

Отлично, мы создали и защитили наш шлюз в интернет. Настало время подумать об удаленном доступе внутрь сети для пользователей. В этом нам поможет сервер OpenVPN.

pfsense_install_22-1024x584.jpg

Далее идём в System – Certificate Manager и создаём центр сертификации.

pfsense_install_23.jpg

Теперь можно выбрать его в настройках

Раздел Advanced Client Settings. Опция DNS Default Domain отдаёт суффикс домена для односложных имён. DNS Server 1 – указываем внутренний DNS. Force DNS cache update – обновляем кеш DNS в клиенте.

pfsense_install_46-1024x757.jpg

В Advanced Configuration есть возможность прописать маршрут. Например мы хотим, что бы при запросе какого-то адреса мы заворачивали трафик на него в туннель. Это можно сделать с помощью команды push route, как на скриншоте.

pfsense_install_27-1024x648.jpg

Теперь сохраняем наш сервер, и устанавливаем через менеджер пакетов openvpn-client-export

pfsense_install_28-1024x108.jpg

Идём в user manage и создаём нового пользователя. Не забываем поставить галочку Click to create a user certificate. Следующий шаг перейти в OpenVPN – client export. Здесь мы увидим выбор установочных файлов для пользователя. Если выбрать windows vista and later, мы получим установочный файл для windows, который содержит сам клиент и сертификат. Можно так же скачать конфигурационный файл под android или под mac. После установки, клиент нужно запускать от имени администратора, что бы сработала очистка кеша и добавились маршруты. Не забываем, что в качестве шлюза у машин в локальной сети должен быть указан pfsense.

Отлично. Теперь у нас есть маршрутизатор, выход в интернет, опубликованы сервисы, настроена безопасность, и есть удалённый доступ. Уже неплохо.

Давайте теперь настроим прокси сервер squid с антивирусом. Так мы сможем контролировать трафик пользователей и проверять его на шлюзе антивирусом. Для начала установим пакет squid.pfsense_install_30-1024x111.jpg

Перейдём в раздел настроек general. Что бы squid заработал, нужно поставить галочку Enable Squid Proxy. Выбираем интерфейс, на котором будем перехватывать запросы – Proxy Interface(s). Выбираем порт – по умолчанию 3128. Если мы не включим transparent mode, то есть прозрачный режим, то для доступа к интернету нам понадобится прописать адрес прокси сервера и порт в браузерах пользователей. Важный пункт Allow Users on Interface. Он означает, что пользователям на этом интерфейсе автоматически предоставляется доступ к прокси серверу, в противном случае будет запрошена аутентификация.

Следующий пункт SSL Man In the Middle Filtering является важным. Зашифрованный SSL трафик не может быть расшифрован шлюзом, поэтому блокировки сайтов а также проверка антивирусом работать не будет. Включаем enable ssl filtering, выбираем режим Splice Whitelist, Bump Otherwise. Это означает, что все сессии, которые не находятся в бело листе будут перехватываться. Для этого режима должен быть указан центр сертификации шлюза – CA, мы создали его раньше. Как это работает. Клиент посылает запрос на соединение с сайтом SSL через шлюз. Далее шлюз устанавливает от СВОЕГО имени соединение с сайтом SSL обратный трафик расшифровывается на шлюзе, шифруется сертификатом ШЛЮЗА и отправляется клиенту. Что бы это работало, на ВСЕХ компьютерах локальной сети сертификат сервера доложен быть установлен в Доверенные корневые сертификаты.

pfsense_install_33-1024x807.jpg

Наконец последний раздел – Headers Handling, Language and Other Customizations. Здесь важным пунктом будет Visible Hostname. Именно это это будет отображаться в сообщениях об ошибках.

pfsense_install_34-1024x527.jpg

Теперь включим антивирус на вкладке ClamAV Anti-Virus Integration Using C-ICAP, укажем периодичность обновления баз ClamAV Database Update, включим проверку Google Safe Browsing и исключим из проверки видео и аудио – Exclude Audio/Video Streams.

pfsense_install_35-1024x800.jpg

На вкладке ACLs мы можем задавать разрешения для IP адресов и подсетей, а на вкладке Traffic Mgmt устанавливать ограничения на полосу пропускания. Вкладка Authentication отвечает за выбор способов аутентификации пользователей.

pfsense_install_37-1024x716.jpg

На 443 порт вам нужно создать правило разрешающее доступ, проброс портов настраивать на 443 порт не нужно.Сервер, на который будут перенаправляться запросы будет указан ниже. А также сервисы, которые вы хотите что бы работали через reverse proxy.

pfsense_install_38-1024x636.jpg

В качестве примера, рассмотрим еще reverse proxy для сервере обновлений NOD32. Работает он на порту 2221.

pfsense_install_40.jpg

На вкладке web servers укажем порт и IP внутри сети сервера обновлений.

pfsense_install_41.jpg

А на вкладке mappings укажем созданного пира, и самое главное регулярные выражения, с которым будет работать reverse proxy. Например ^http://site.ru:2221/nod.*$ Означает что начало строки может быть только такое: http://site.ru:2221/nod а дальше любой символ и конец строки. Например nod6C47.nup, то есть файл обновления.

pfsense_install_42.jpg

Можно посмотреть и конфиг для exchange. Для этого нужно зайти в Diagnostocts – Edit file – Browse. Перейти в папку usr/local/etc/squid/squid.conf.

Здесь мы увидим паттерны:

Вот сколько всего можно сделать при помощи pfsense, причём довольно быстро и эффективно. Охвачена лишь небольшая часть функционала, и очень неглубоко.

Если у Вас есть вопросы, задавайте их на форуме, или ниже в комментариях.

Используемые источники:

  • https://serverspace.by/support/help/pfsence-site-to-site-vpn/
  • https://serveradmin.ru/nastrojka-vpn-openvpn-l2tp-ipsec-server-v-mikrotik/
  • https://hobbycomp.ru/soft/pfsense-shlyuz-za-pyat-minut/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации