Сервер SSTP#
Описание#
Протокол SSTP - протокол построения VPN, обеспечивающий механизм передачи PPP трафика по SSL/TLS туннелю. SSL/TLS обеспечивает безопасность на транспортном уровне с согласованием ключей, шифрованием и проверкой целостности трафика. Использование SSL/TLS через TCP-порт 443 позволяет протоколу SSTP проходить практически через любой межсетевой экран и прокси-сервер, за исключением веб-прокси с аутентификацией.
Протокол SSTP доступен к использованию в операционных системах Linux, BSD и Windows.
Для обеспечения функциональности SSTP сервера в ПО Факел используется механизм accel-ppp. Данный механизм может использоваться как с локальной аутентификацией, так и совместно с подключенным сервером RADIUS.
Поскольку протокол SSTP позволяет передавать PPP трафик по SSL/TLS туннелю, для организации VPN необходимо использовать сертификаты с открытой подписью, а также инфраструктуру PKI.
Примечание
Все сертификаты должны размещаться в ПО Факел по
следующему пути /config/auth
. Если сертификаты размещаются не в каталоге
/config
, они не будут перенесены при обновлении ПО.
Настройка#
Пример настройки#
В данном примере рассматриваться порядок конфигурирования SSTP сервера в составе ПО Факел с учетом следующих особенностей:
используется локальная учетная запись пользователя с логином
foo
и паролемbar
;IP адрес для клиента будет выделяться из пула, определенного подсетью
192.0.2.0/25
.
Подготовка сертификатов#
Первым шагом необходимо подготовить сертификата УЦ, закрытого ключа и сертификата сервера SSTP.
Для генерации сертификата УЦ, закрытого ключа и сертификата сервера SSTP выполните следующие команды:
fakel@fakel:~$ mkdir -p /config/user-data/sstp
fakel@fakel:~$ openssl req -newkey rsa:4096 -new -nodes -x509 -days 3650 -keyout /config/user-data/sstp/server.key -out /config/user-data/sstp/server.crt
Generating a 4096 bit RSA private key
.........................++
...............................................................++
Writing new private key to 'server.key'
[...]
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Some-Region]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Some Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
fakel@fakel:~$ openssl req -new -x509 -key /config/user-data/sstp/server.key -out /config/user-data/sstp/ca.crt
[...]
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Some-Region]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Some Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Настройка SSTP на маршрутизаторе#
После того, как сертификаты будут готовы можно переходить к настройке SSTP.
Команды для настройки SSTP на маршрутизаторе:
set vpn sstp authentication local-users username foo password bar
set vpn sstp authentication mode local
set vpn sstp gateway-address 192.0.2.254
set vpn sstp client-ip-pool subnet 192.0.2.0/25
set vpn sstp name-server 10.0.0.1
set vpn sstp name-server 10.0.0.2
set vpn sstp ssl ca-cert-file /config/auth/ca.crt
set vpn sstp ssl cert-file /config/auth/server.crt
set vpn sstp ssl key-file /config/auth/server.key
Проверка работы SSTP#
После конфигурирования SSTP сервера необходимо выполнить базовую проверку его работы. Для этого можно воспользоваться SSTP клиентом для операционной системы Linux - sstpc. Данные клиент потребует наличия соответствующего конфигурационного файла.
В примере далее показано использование для базовой проверки протокола MS-CHAP v2.
$ cat /etc/ppp/peers/fakel
usepeerdns
#require-mppe
#require-pap
require-mschap-v2
noauth
lock
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
#refuse-mschap-v2
nobsdcomp
nodeflate
debug
Теперь можно попробовать выполнить подключение клиента с помощью команды
sstpc --log-level 4 --log-stderr --user foo --password bar vpn.example.ru -- call fakel
.
Детальная информация по попытке подключения представлена в примере ниже.
$ sstpc --log-level 4 --log-stderr --user foo --password bar vpn.example.ru -- call fakel
Mar 22 13:29:12 sstpc[12344]: Resolved vpn.example.ru to 192.0.2.1
Mar 22 13:29:12 sstpc[12344]: Connected to vpn.example.ru
Mar 22 13:29:12 sstpc[12344]: Sending Connect-Request Message
Mar 22 13:29:12 sstpc[12344]: SEND SSTP CRTL PKT(14)
Mar 22 13:29:12 sstpc[12344]: TYPE(1): CONNECT REQUEST, ATTR(1):
Mar 22 13:29:12 sstpc[12344]: ENCAP PROTO(1): 6
Mar 22 13:29:12 sstpc[12344]: RECV SSTP CRTL PKT(48)
Mar 22 13:29:12 sstpc[12344]: TYPE(2): CONNECT ACK, ATTR(1):
Mar 22 13:29:12 sstpc[12344]: CRYPTO BIND REQ(4): 40
Mar 22 13:29:12 sstpc[12344]: Started PPP Link Negotiation
Mar 22 13:29:15 sstpc[12344]: Sending Connected Message
Mar 22 13:29:15 sstpc[12344]: SEND SSTP CRTL PKT(112)
Mar 22 13:29:15 sstpc[12344]: TYPE(4): CONNECTED, ATTR(1):
Mar 22 13:29:15 sstpc[12344]: CRYPTO BIND(3): 104
Mar 22 13:29:15 sstpc[12344]: Connection Established
$ ip addr show ppp0
164: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1452 qdisc fq_codel state UNKNOWN group default qlen 3
link/ppp promiscuity 0
inet 100.64.2.2 peer 100.64.1.1/32 scope global ppp0
valid_lft forever preferred_lft forever
Список команд#
Основные настройки#
- • set vpn sstp authentication local-users username <user> password <pass>#
Создает учетную запись пользователя с логином
<user>
для локальной аутентификации. Пароль пользователя будет иметь значение<pass>
.
- • set vpn sstp authentication local-users username <user> disable#
Отключает учетную запись пользователя с логином
<user>
.
- • set vpn sstp authentication local-users username <user> static-ip <address>#
Назначает учетной записи пользователя с логином
<user>
статический IP адрес<address>
.
- • set vpn sstp authentication local-users username <user> rate-limit download <bandwidth>#
Ограничивает полосу пропускания при скачивании данных для учетной записи пользователя с логином
<user>
в единицах кбит/с (килобит в секунду).
- • set vpn sstp authentication local-users username <user> rate-limit upload <bandwidth>#
Ограничивает полосу пропускания при загрузке данных для учетной записи пользователя с логином
<user>
в единицах кбит/с (килобит в секунду).
- • set vpn sstp authentication protocols <pap | chap | mschap | mschap-v2>#
Задает требования аутентификации узла-участника VPN с помощью одного из следующих протоколов: PAP, CHAP, MS-CHAP, MS-CHAP v2.
- • set vpn sstp authentication mode <local | radius>#
Задает режим аутентификации (
<local>
- локальных пользователей,<radius>
- пользователей RADIUS). В заданном режиме будут обрабатываться все запросы.<local>
- все запросы на аутентификацию будут обрабатываться локально.<radius>
- все запросы на аутентификацию будут обрабатыватьсясконфигурированным RADIUS сервером.
- • set vpn sstp gateway-address <gateway>#
Задает IP адрес узла
<gateway>
, который будет использоваться в качестве локального адреса для PPP интерфейса.
- • set vpn sstp client-ip-pool subnet <subnet>#
Задает IP адрес подсети
<subnet>
, которая будет использоваться в качестве пула адресов для всех подключающихся клиентов.
- • set vpn sstp client-ipv6-pool prefix <address> mask <number-of-bits>#
Задает пул IPv6, из которого SSTP клиент будет получать IPv6 префикс заданной длины (маску) для определения конечной точки SSTP на своей стороне. Длина маски может быть задана в диапазоне от 48 до 128 бит, значение по умолчанию - 64 бит.
- • set vpn sstp client-ipv6-pool delegate <address> delegation-prefix <number-of-bits>#
Настраивает механизма делегирования префикса DHCPv6 согласно RFC 3633 в контексте протокола SSTP. Для этого необходимо задать пул IPv6 и длину префикса делегирования. Из заданного пула будут выделяться IPv6 подсети определенной размерности. Длина префикса делегирования может быть задана от 32 до 64 бит.
- • set vpn sstp name-server <address>#
При использовании данной команды подключенный клиент должен использовать адрес
<address>
в качестве адреса DNS сервера. Эта команда принимает адреса как IPv4, так и IPv6. Для IPv4 может быть настроено до двух DNS серверов, для IPv6 - до трех.
Настройка сертификатов SSL/TLS#
- • set vpn sstp ssl ca-cert-file <file>#
Задает путь до файла
<file>
сертификата УЦ.
- • set vpn sstp ssl cert-file <file>#
Задает путь до файла
<file>
сертификата сервера (открытый ключ).
- • set vpn sstp ssl key-file <file>#
Задает путь до файла
<file>
с закрытым ключом сервера.
Настройка PPP#
- • set vpn sstp ppp-options lcp-echo-failure <number>#
Задает максимальное количество
<number>
сообщений Echo Request по протоколу LCP, по достижении которого PPP сессия будет сброшена.
- • set vpn sstp ppp-options lcp-echo-interval <interval>#
Задает периодичность
<interval>
в секундах отправки модулем PPP сообщения Echo Request по протоколу LCP. При значении 0 модуль PPP не будет отправлять сообщения Echo Request.
- • set vpn sstp ppp-options lcp-echo-timeout <timeout>#
Задает время
<timeout>
ожидания активности любых узлов-участников VPN. При использовании опцииlcp-echo-timeout
для модуля PPP активируется режим адаптивной функциональности LCP Echo Request, а значение опцииlcp-echo-failure
игнорируется.
- • set vpn sstp ppp-options mppe <require | prefer | deny>#
Определяет один из следующих режимов использования протокола шифрования MPPE:
require
- ожидать от клиента подтверждения использования протокола MPPE, если клиент такого подтверждения не дает, то соединение сбрасывается;prefer
- ожидать от клиента подтверждения использования протокола MPPE, если клиент такого подтверждения не дает, то соединение сохраняется;deny
- не использовать протокол MPPE.
Если режим не указан явно, то по умолчанию модуль PPP не запрашивает подтверждения от клиента, но допускает использование протокола MPPE по его инициативе.
Примечание
Обратите внимание, что RADIUS сервер может переопределять
значение данной опции значением атрибута MS-MPPE-Encryption-Policy
.
Настройка аутентификации RADIUS#
Подключение к серверу#
- • set vpn sstp authentication radius server <server> port <port>#
Определяет RADIUS сервер
<server>
и задает порт<port>
для отправки запросов на аутентификацию.
- • set vpn sstp authentication radius server <server> key <secret>#
Определяет RADIUS сервер
<server>
и задает общий ключ<secret>
для защиты коммуникаций с сервером.
- • set vpn sstp authentication radius server <server> fail-time <time>#
Помечает настроенный RADIUS сервер
<server>
как «не в сети» на заданный в секундах промежуток времени<time>
.
- • set vpn sstp authentication radius server <server> disable#
Отключает настроенный RADIUS сервер
<server>
.
Параметры работы#
- • set vpn sstp authentication radius acct-timeout <timeout>#
Определяет время ожидания
<timeout>
в секундах ответа на пакеты Interim Update от RADIUS сервера. По умолчанию - 3 секунды.
- • set vpn sstp authentication radius dynamic-author server <address>#
Задает IP адрес
<address>
для сервера Dynamic Authorization Extension (DM/CoA).
- • set vpn sstp authentication radius dynamic-author port <port>#
Задает порт
<port>
для подключения к серверу Dynamic Authorization Extension (DM/CoA).
- • set vpn sstp authentication radius dynamic-author key <secret>#
Задает общий ключ
<secret>
для защиты коммуникаций с сервером Dynamic Authorization Extension (DM/CoA).
- • set vpn sstp authentication radius max-try <number>#
Определяет количество
<number>
попыток передачи серверу запросов Access Request и Accounting Request.
- • set vpn sstp authentication radius timeout <timeout>#
Определяет время ожидания
<timeout>
в секундах ответа от сервера.
- • set vpn sstp authentication radius nas-identifier <identifier>#
Задает значение идентификатора
NAS-Identifier
, который будет передан RADIUS серверу соответствующим атрибутом и должен соответствовать запросам Dynamic Authorization Extension (DM/CoA).
- • set vpn sstp authentication radius nas-ip-address <address>#
Определяет значение адреса
NAS-IP-Address
, который будет передан RADIUS серверу соответствующим атрибутом и должен соответствовать запросам Dynamic Authorization Extension (DM/CoA). Также указанный адрес будет выбран в качестве адреса сервера Dynamic Authorization Extension (DM/CoA).
- • set vpn sstp authentication radius source-address <address>#
Задает IPv4 адрес
<address>
отправителя, который будет использоваться при формирования запросов на аутентификацию к RADIUS серверу.
- • set vpn sstp authentication radius rate-limit attribute <attribute>#
Определяет в каком из атрибутов
<attribute>
RADIUS сервера будет храниться предельное значение полосы пропускания. По умолчанию таким атрибутом является атрибутFilter-Id
.
- • set vpn sstp authentication radius rate-limit enable#
Включает ограничение полосы пропускания средствами RADIUS сервера.
- • set vpn sstp authentication radius rate-limit vendor#
Включает использование справочника атрибутов RADIUS сервера, который должен располагаться по следующему пути
/usr/share/accel-ppp/radius
.