Linux для vpn ipsec

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

  • Главная
  • Настраиваем L2TP VPN-сервер на платформе Linux (Debian / Ubuntu)

Настраиваем L2TP VPN-сервер на платформе Linux (Debian / Ubuntu)

L2TP — один из наиболее популярных VPN-протоколов, обладающий, благодаря IPsec, отличной безопасностью, достаточной простотой и широкой поддержкой со стороны всех современных ОС. Для работы с ним не требуется установка дополнительного ПО и какие-либо сложные настройки. Мы уже рассматривали настройку L2TP VPN-сервера на платформах Windows и Mikrotik, а теперь расскажем, как настроить аналогичный сервер в Linux, дистрибутивах основанных на Debian или Ubuntu.

Перед тем, как приступать к работе над данной статьей мы внимательно изучили русскоязычный сегмент сети на предмет освещения данной темы и были весьма сильно удивлены. Большинство находящихся на первых страницах поиска ресурсов перепечатывает одну и ту же устаревшую инструкцию, даже в достаточно свежих публикациях. Но наш сайт с самого своего основания принципиально не занимается перепечатками (кроме переводов) и мы всегда проверяем на практике то, что рекомендуем нашим читателям. В этот раз нам пришлось потратить некоторое лишнее время на чтение документации, зато теперь мы можем предложить вам актуальный материал по настройке L2TP в Linux.

В качестве систем на тестовом стенде мы использовали Debian 10 и Ubuntu 20.04, но с некоторыми изменениями данная инструкция применима к любым версиям Linux со strongSwan версии 5.0 и выше.

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

Именно с устаревшими настройками IPsec вам придется столкнуться в большинстве опубликованных инструкций. Нет, все даже будет работать, но вот безопасность такого решения окажется довольно низкой, не соответствующей современным требованиям. Поэтому, если у вас уже имеется настроенный экземпляр L2TP-сервера мы настоятельно советуем обновить его настройки.

Для работы с IPsec мы будем использовать пакет strongSwan, установим его:

Затем откроем файл настроек /etc/ipsec.conf и добавим в его конец следующие две секции:

Первая секция задает общие параметры: включает фрагментацию IKE и настраивает протокол обнаружения мертвых узлов (Dead Peer Detection, DPD), отвечающий за обнаружение неактивных клиентов. Вторая относится уже к L2TP-соединениям, указывая использовать транспортный режим IPsec, аутентификацию по общему ключу и задает используемые шифры. Приведенные значения являются рекомендуемыми и взяты из официальной документации strongSwan.

Общий ключ следует указать в файле /etc/ipsec.secrets, добавив в него следующую строку:

Где mySharedKey — общий ключ, так как от него зависит безопасность вашей VPN-сети мы рекомендуем использовать в качестве ключа случайно сгенерированную строку из букв, цифр и спецсимволов. Для этого можно воспользоваться командой:

Результатом ее выполнения станет случайная строка длинной в 18 символов.

После внесения указанных настроек перезапустим службу:

В Ubuntu имя службы несколько иное — strongswan-starter, поэтому команда будет иметь вид:

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

Для реализации функций L2TP-сервера предназначен пакет xl2tpd, для его установки выполните:

Затем откройте файл настроек /etc/xl2tpd/xl2tpd.conf, раскомментируйте и приведите к следующему виду опции:

Большая часть опций относится к настройке протокола L2TP и требует понимания его работы, поэтому мы на них останавливаться не будем. Разберем те опции, которые имеют существенное значение. Параметр auth file указывает на файл с данными для аутентификации, а pppoptfile — набор опций для PPP-соединения, которое используется внутри L2TP-туннеля, name — имя сервера, которое будет использоваться для поиска аутентификационных данных в файле chap-secrets.

Опции local ip и ip range отвечают за локальный адрес сервера в VPN-сети и диапазон адресов для выдачи удаленным клиентам. Здесь можно использовать два подхода: выдавать клиентам адреса из диапазона локальной сети офиса и включить ProxyARP, в этом случае настраивать маршрутизацию на клиентах не требуется, они будут как-бы включены в общую сеть офиса на канальном уровне (L2), либо выдавать адреса из непересекающегося диапазона и использовать маршрутизацию. Автоматизировать создание маршрутов для Windows-клиентов можно с использованием PowerShell.

Читайте также:  Обновление предлагающее windows 10 как удалить

Для настройки PPP перейдем в /etc/ppp и скопируем стандартный файл настроек:

Затем открываем файл /etc/ppp/options.xl2tpd на редактирование и приводим к следующему виду. Опции перечислены в порядке их следования, нужно раскомментировать их и указать нужное значение, если опция отсутствует, то ее следует добавить в конце файла.

Если вы будете использовать ProxyARP то дополнительно раскомментируйте опцию:

Также для Windows-клиентов можно передать настройку DNS-серверов, для этого добавьте опции:

Это позволит настроить первичный и альтернативный DNS-сервера в системе.

Сохраним все внесенные изменения и перезапустим службу L2TP-сервера:

Строку со следующим сообщением можно проигнорировать, на работу VPN-сервера она не влияет:

Заключительным этапом настройки будет создание учетных записей для удаленных клиентов, для этого откроем файл /etc/ppp/chap-secrets и внесем следующую строку:

Первым указываем логин, затем имя службы, оно должно совпадать с тем, которое мы указали в опции name в xl2tpd.conf, после него идет пароль и IP-адрес клиента, символ * обозначает что можно присвоить любой адрес из выбранного диапазона. Если же требуется выдать клиенту постоянный адрес, то его следует указать явно, и он не должен входить в динамический диапазон указанный в ip range, например:

Для доступа к L2TP-серверу следует разрешить в брандмауэре входящие подключения к портам 500 UDP и 4500 UDP, подключение к 1701 UDP, вопреки распространенному заблуждению, разрешать не следует.

Дополнительные материалы:

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Или подпишись на наш Телеграм-канал:

Источник

Администрирование IPSec VPN под Linux, часть первая

В этой статье будут обсуждены некоторые дополнительные возможности FreeS/WAN, которые вы можете использовать для создания гибких и надежных IPSec VPN. Исходным источником информации по FreeS/WAN является официальный сайт (http://www.freeswan.org/). На этом сайте вы сможете найти ссылки на практически любые инструменты и информацию, которые потребуются вам для реализации IPSec под Linux.

Администрирование IPSec VPN под Linux

В первой статье автора Introducing FreeS/WAN and IPSec в ноябре 2000 г. были обсуждены основы установки IPSec (IP Security – Безопасность IP) для Linux с использованием пакета FreeS/WAN. В этой статье будут обсуждены некоторые дополнительные возможности FreeS/WAN, которые вы можете использовать для создания гибких и надежных IPSec VPN (Virtual Private Network – Виртуальная Частная Сеть). Исходным источником информации по FreeS/WAN является официальный сайт (http://www.freeswan.org/). На этом сайте вы сможете найти ссылки на практически любые инструменты и информацию, которые потребуются вам для реализации IPSec под Linux.

Обзор IPSec

IPSec – это расширение протокола Интернет (IP), которое предоставляет не только шифрование, но и аутентификацию в транспортном слое (layer 3 of the OSI Reference Model). Следующее поколение IP, версия 6 (IPv6), поддерживает IPSec изначально, так как IPSec является требованием спецификации IETF для IPv6.

IPSec – это набор протоколов. Три протокола используются для инкапсуляции, шифрования, и аутентификации – AH (Authentication Header – Заголовок Аутентификации), ESP (Encapsulating Security Payload – Инкапсулированные Защищенные Данные) и IKE (Internet Key Exchange – Обмен Ключами через Интернет). IPSec обычно прозрачен для пользователей. Не нужно переделывать приложения и не нужно переобучать пользователей для использования сетей на основе IPSec. Пользователям даже не обязательно знать, что они используют IPSec для туннелирования данных через незащищенную сеть.

Читайте также:  Touch screen and linux

AH и ESP отвечают за шифрование и аутентификацию. AH добавляется после заголовка IP, но перед данными (payload) – см. рис. 1. AH несет аутентификационную информацию, обычно это ключи в MD5 (Message Digest Algorithm – Алгоритм Дайджеста Сообщения) или SHA (Secure Hash Algorithm – Алгоритм Безопасного Хэша). AH используется только для аутентификации и проверяет, что отправители действительно те, за кого себя выдают. AH не производит шифрования.

Рис. 1. Преобразование AH, показывающее (a) оригинальную Ipv4 диаграмму, (b) транспортную аутентификацию с контрольной суммой, (c) замену исходного заголовка IP при туннелировании.

ESP может использоваться как для шифрования, так и для аутентификации. Он может использоваться как с AH, так и без него. Хотя возможно создавать туннели с использованием только аутентификации или шифрования, эти методы оставляют связь открытой для различных форм атак. Обычно шифрование происходит с использованием блочного шифра (симметричный или раздельно-ключевой шифр, состоящий из текстовых блоков фиксированного размера) и 3DES. На рисунке 2 показан процесс инкапсуляции. Также опубликованы и применяются RFC для использования других методов шифрования (например IDEA, Blowfish, RC4). Ключи шифрования распределяются с использованием IKE.

Рис. 2. Преобразование ESP, показывающее (a) оригинальную IPv4 диаграмму, (b) транспортную инкапсуляцию с контрольной суммой, (c) инкапсуляция исходной дейтаграммы при туннелировании.

IKE устанавливает параметры соединения, включая инициализацию, обработку и обновление ключей шифрования. Аутентификация производится с использованием общих секретов (например секретных фраз) или криптографических RSA ключей, которые гарантируют идентичность обеих частей. IKE основан на методе Diffie-Hellman’а обмена идентификационными метками (tokens). Для шифрования данных используются алгоритмы группового шифрования, такие как тройной DES (Data Encryption Standard – Стандарт Шифрования Данных). Хэш-алгоритмы, такие как MD5 и SHA обеспечивают аутентификацию каждого пакета. Для дополнительной безопасности соединения через малые промежутки времени происходит обновление аутентификационных ключей.

IPSec вставляет заголовок и зашифрованные полезные данные в обычный IP (зачастую не IPSec) пакет. Это позволяет данным IPSec проходить через любые IP сети. Главной причиной для широкого использование IPSec (в противовес IPv6) является то, что все IP сети (включая IP версии 4) могут передавать IPSec трафик в основную сеть без изменений. IPSec реализован как в программном, так и в аппаратном виде. Все ведущие производители сетевого оборудования и программного обеспечения поддерживают сети IPSec. Фактически все сетевые ОС сейчас поддерживают IPSec. IPSec также получил значительную поддержку в Open Source community (сообщество Открытого Кода). Хотя практически все реализации IPSec соответствуют существующим RFC, они совсем не обязательно смогут взаимодействовать. Необходимо тестировать реализации IPSec от различных производителей, чтобы убедиться, что они полностью совместимы.

FreeS/WAN – Open Source реализация IPSec для Linux

FreeS/WAN состоит из двух отдельных компонент. Первая – KLIPS (KerneL IP Security), является набором изменений стандартного ядра Linux. Информацию по внедрению KLIPS в стандартное ядро Linux читайте в Introducing FreeS/WAN and IPSec. Вторая компонента – независимый демон Pluto, который также устанавливается и конфигурируется при установке FreeS/WAN. Pluto обрабатывает запросы аутентификации протокола IKE и взаимодействует с компонентой KLIPS в ядре, которая отвечает за инкапсуляцию и шифрование.

FreeS/WAN конфигурируется через файл ipsec.conf. После установки FreeS/WAN, практически все конфигурационные изменения заключаются в редактировании конфигурационного файла ipsec.conf. Другой файл, ipsec.secrets, содержит аутентификаторы (т.е. наборы криптографических ключей, общие секреты).

Программа ipsec (не путать с протоколом IPSec) – набор инструментов, которые управляют и осуществляют работу IPSec. Программа ipsec, помимо других инструментов, включает помощь в поиске неисправностей, инструменты для активизации и отключения туннелей, а также для опроса состояния каждого туннеля IPSec. Все, что нам нужно для того, чтобы начать построение VPN – это отредактировать файлы ipsec.conf и ipsec.secrets и затем активировать IPSec с помощью приложения ipsec.

Читайте также:  Windows on arm snapdragon

Введение в файлы ipsec.conf и ipsec.secrets

Файл ipsec.conf содержит большую часть информации о конфигурации и управлении FreeS/WAN и расположен по умолчанию в директории /etc. Страница man (мануал) для ipsec.conf содержит все необходимые сведения.

Файл ipsec.conf – текстовый файл, включающий одну или более секций. Все, что начинается с “#” – комментарии. Секция обычно начинается с новой строки без отступа. Например, в листинге 1(а) секция начинается со строки:

config” определяет тип секции, а “setup” – метка секции, которая идентифицирует каждую секцию данного типа. Обычно типом является “config”, определяющий системные настройки FreeS/WAN, или “conn”, содержащий конфигурационные параметры каждого VPN туннеля. Каждый VPN туннель имеет собственную секцию “conn”.

Строки внутри секции отделены пробелами от левой границы и имеют вид:

KLIPS debugging (параметр klipsdebug) включается и выключается установкой его в «all» или «none«, как показано выше.

Во всех файлах ipsec.conf первая секция «config setup» содержит настройки интерфейсов и соединений FreeS/WAN, используемых при включенном IPSec. Следующая строка задает шлюз по умолчанию (default gateway) на компьютере, как интерфейс для всех VPN туннелей:

Значения параметров, начинающиеся с «%» обозначают системную переменную, загружаемую FreeS/WAN при образовании туннеля. Значение %defaultroute (IP маршрут по умолчанию) загружается из системной таблицы маршрутизации. Следующие строки:

выключают debugging для KLIPS и Pluto. Установка этих параметров в «all«, включает подробную debugging информацию, полезную для поиска и решения проблем. Строки:

говорят Pluto искать (%search) возможные соединения. Pluto сканирует файл ipsec.conf в поисках соединений, которые будут загружены (секции «conn«, см. ниже) и выдает доступ к VPN туннелям, где это необходимо. Другая опция явно задает разрешенные туннели (напр. «plutoload=»connection_1 conection_2″» разрешит туннели, заданные в секциях «conn connection_1» ,»conn conection_2«, проигнорировав остальные.

устанавливает настройки по умолчанию для всех параметров всех туннелей. Можно считать ее набором глобальных переменных для всех секций «conn«. Строка:

говорит IKE бесконечно продолжать попытки обмена ключами при потере соединения. Можно также задать множество других параметров, многие из которых имеют предустановленные значения, например механизм по умолчанию обмена ключами – IKE («keyexchange=ike») и время по умолчанию между сменой ключей – 8 часов («keylife=8h»).

Метод аутентификации по умолчанию для FreeS/WAN – это публичный общий ключ (PSK — publicly shared key), устанавливаемый строкой:

PSK – это обычно секретная буквенно-цифровая строка, общая для обеих сторон. Листинг 2(a) показывает содержимое типичного файла ipsec.secrets, который содержит PSK и IP адреса сторон для соединений в листингах 1(b) и (c). Файл ipsec.secrets содержит конфиденциальную информацию и должен быть доступен для чтения и записи только root’у.

В листинге 1(a), все секции после «conn %default» задают ряд туннелей, которые будут рассмотрены подробнее. Спецификации соединений записаны в терминах «левого» и «правого» хостов, а не в терминах локального и удаленного. Выбор левого и правого произволен; FreeS/WAN определяет это на основе внутренней информации (напр. локального IP адреса). Это позволяет использовать одинаковые спецификации соединения для обеих систем.

IPSec может быть использован для создания защищенных туннелей хост-хост, подсеть-подсеть, или подсеть-хост. Широкие возможности FreeS/WAN могут быть продемонстрированы некоторыми реальными VPN-сценариями.

Источник

Оцените статью