Stunnel
Stunnel позволяет обеспечить шифрование сетевого трафика с использованием протокола TLS, создавая защищённый туннель между клиентами и серверами. В системе ARMA Стена Stunnel реализован как прозрачная обёртка, добавляющая поддержку безопасных соединений для сервисов, изначально не предусматривающих шифрование — таких как POP3, IMAP, SMTP и других.
Для корректной работы требуется установка Stunnel как на клиентской, так и на серверной стороне, а также использование единого сертификата на обоих концах соединения.
Конфигурирование хранилища сертификатов
Для регистрации сертификатов в системе необходимо выполнить следующие команды:
set pki ca <ca_name> certificate <namecertserver>где:
<ca_name> - имя корневого центра сертификации (CA);
<namecertserver> – имя сертификата.
set pki certificate <namecertserver> certificate <ExampleContentServCert>где:
<ExampleContentServCert> – содержимое сертификата в формате PEM, извлечённое из файла «*.pem», за исключением строк «BEGIN CERTIFICATE» и «END CERTIFICATE», без пробелов и переносов строк.
set pki certificate <namekeyserver> private key <ExampleContentServKey>где:
<ExampleContentServKey> – содержимое закрытого ключа из файла «*.key», указанное без строк «BEGIN CERTIFICATE» и «END CERTIFICATE», без пробелов и переносов строк.
Общие настройки stunnel
Установка уровня журналирования:
set service stunnel log level <level>где <level> – уровень детализации логирования. Допустимые значения:
«emerg» – чрезвычайная ситуация;
«alert» – тревога;
«crit» – критическое состояние;
«err» – ошибка;
«warning» – предупреждение;
«notice» – уведомление (по умолчанию);
«info» – информационное сообщение;
«debug» – отладочная информация.
Включение/отключение записи событий Stunnel в глобальный системный журнал:
set service stunnel log syslog yes|noПо умолчанию параметр установлен в значение «yes» — запись событий в системный журнал включена.
Настройка серверного режима
Задание адреса и порта удалённого сервера, к которому будет перенаправлен трафик через защищённый SSL/TLS-туннель:
set service stunnel server <name_server> connect address <address> set service stunnel server <name_server> connect port <port>где:
<name_server> - пользовательское имя логического контейнера экземпляра Stunnel, объединяющего параметры одного туннелируемого соединения;
<address> - IP-адрес (IPv4) или имя хоста (FQDN) целевого сервера. При отсутствии значения используется «localhost»;
<port> - TCP-порт удалённого сервера (обязательный параметр). Возможно указать значение в диапазоне от «1» до «65535».
Настройка адреса и порта, на котором Stunnel принимает входящие соединения:
set service stunnel server <name_server> listen address <address> set service stunnel server <name_server> listen port <port>где:
<address> - IP-адрес или имя хоста (FQDN), на котором ожидается подключение. По умолчанию используется привязка ко всем IPv4-адресам локального хоста. Для прослушивания всех IPv6-адресов необходимо использовать значение «::»;
<port> - указать TCP-порт, на котором осуществляется приём соединений (обязательный параметр). Возможно указать значение в диапазоне от «1» до «65535».
Указание прикладного протокола для согласования TLS-сессии:
set service stunnel server <name_server> protocol <protocol>где <protocol> - имя поддерживаемого прикладного протокола. Поддерживаемые значения:
cifs - проприетарное расширение протокола CIFS (Common Internet File System), требующее специальной обработки перед началом TLS;
imap - поддержка RFC 2595 (STARTTLS для IMAP);
pgsql - протокол PostgreSQL с запросом шифрования через SSLRequest;
pop3 - поддержка RFC 2449 (STLS для POP3);
proxy - протокол HAProxy PROXY v1, сохраняющий исходный IP-адрес клиента;
smtp - поддержка TLS по RFC 2487 — SMTP Service Extension for Secure SMTP over TLS. Клиент отправляет команду STARTTLS, после чего сервер инициирует переход к шифрованию;
socks - поддержка SOCKS-протоколов версий 4, 4a и 5, шифрование устанавливается до начала передачи данных.
Настройка сертификатов для установления TLS-соединения:
set service stunnel server <name_server> ssl ca-certificate <ca_name> set service stunnel server <name_server> ssl certificate <namecertserver>где:
<ca_name> - имя CA, используемого для проверки клиентских сертификатов при включённой аутентификации;
<namecertserver> - имя сертификата сервера, представленного клиенту. Параметр является обязательным.
Уровень проверки сертификата удалённой стороны (пира):
set service stunnel server <name_server> verify <number>где <number> - целое число. Доступные значения:
0 - запрашивать сертификат пира, но игнорировать цепочку (установлено по умолчанию). Сервер может запросить сертификат у клиента, но не проверяет его подлинность.
1 - проверять цепочку сертификатов пира, если она предоставлена. Если клиент представил сертификат, stunnel проверяет его цепочку доверия. Если сертификат отсутствует — соединение разрешается.
2 - обязательно проверять цепочку сертификатов пира. Клиент обязан предоставить действительный сертификат, подписанный доверенным CA, указанным в параметре ca-certificate. Без корректного сертификата соединение будет отклонено.
3 - проверять цепочку и сравнивать конечный сертификат с локально установленным. Помимо проверки цепочки доверия, stunnel дополнительно сверяет представленный клиентский сертификат с конкретным сертификатом, заранее размещённым в системе. Обеспечивает высокий уровень безопасности — допускаются только заранее известные клиенты.
4 - игнорировать цепочку, но проверять конечный сертификат по локальной копии. Цепочка сертификатов не проверяется, но stunnel требует, чтобы клиент представил сертификат, идентичный одному из локально установленных.
Настройка клиентского режима
Указание адреса и порта удалённого сервера:
set service stunnel client <name_client> connect address <address> set service stunnel client <name_client> connect port <port>где:
<name_client> - имя логического контейнера клиентского экземпляра Stunnel;
<address> - IP-адрес (IPv4) или имя хоста (FQDN) целевого сервера. Если параметр не задан, используется значение по умолчанию — «localhost»;
<port> - TCP-порт назначения (обязательный параметр). Возможно указать значение в диапазоне от «1» до «65535».
Указание адреса и порта для приёма входящих соединений на клиенте:
set service stunnel client <name_client> listen address <address> set service stunnel client <name_client> listen port <port>где:
<address> - IP-адрес или имя хоста (FQDN), на котором будет ожидаться входящее соединение. При отсутствии указания хоста по умолчанию используется привязка ко всем IPv4-адресам локального хоста. Для прослушивания всех IPv6-адресов необходимо использовать значение «::»;
<port> - TCP-порт наприёма соединений (обязательный параметр). Возможно указать значение в диапазоне от «1» до «65535».
Указание прикладного протокола для согласования TLS-сессии:
set service stunnel client <name_client> protocol <protocol>где <protocol> - имя поддерживаемого прикладного протокола. Поддерживаемые значения:
cifs - проприетарное расширение протокола CIFS (Common Internet File System), требующее специальной обработки перед началом TLS;
connect - реализация механизма туннелирования по методу CONNECT, описанному в RFC 2817 (раздел 5.2), предназначенному для перехода на TLS в рамках HTTP/1.1;
imap - поддержка защищённого соединения для протокола IMAP в соответствии с RFC 2595;
nntp - интеграция с NNTP с применением TLS согласно RFC 4642;
pgsql - поддержка протокола взаимодействия между клиентом и сервером СУБД PostgreSQL;
pop3 - обеспечение безопасного соединения для POP3 на основе механизма расширений, описанного в RFC 2449;
proxy - передача исходного IP-адреса клиента с использованием HAProxy PROXY-протокола версии 1;
smtp - реализация расширения SMTP для работы поверх TLS в соответствии с RFC 2487;
socks - поддержка SOCKS-протоколов версий 4, 4a и 5, шифрование устанавливается до начала передачи данных.
Настройка сертификатов для клиентского соединения:
set service stunnel client <name_client> ssl ca-certificate <ca_name> set service stunnel client <name_client> ssl certificate <namecertserver>где:
<ca_name> - имя CA для проверки сертификата сервера;
<namecertserver> - имя клиентского сертификата, предоставляемого серверу при двухсторонней аутентификации.
Уровень проверки сертификата сервера:
set service stunnel client <name_client> verify <number>где <number> - целое число. Доступные значения:
0 - запрашивать сертификат пира, но игнорировать цепочку (установлено по умолчанию). Сервер может запросить сертификат у клиента, но не проверяет его подлинность.
1 - проверять цепочку сертификатов пира, если она предоставлена. Если клиент представил сертификат, stunnel проверяет его цепочку доверия. Если сертификат отсутствует — соединение разрешается.
2 - обязательно проверять цепочку сертификатов пира. Клиент обязан предоставить действительный сертификат, подписанный доверенным CA, указанным в параметре ca-certificate. Без корректного сертификата соединение будет отклонено.
3 - проверять цепочку и сравнивать конечный сертификат с локально установленным. Помимо проверки цепочки доверия, stunnel дополнительно сверяет представленный клиентский сертификат с конкретным сертификатом, заранее размещённым в системе. Обеспечивает высокий уровень безопасности — допускаются только заранее известные клиенты.
4 - игнорировать цепочку, но проверять конечный сертификат по локальной копии. Цепочка сертификатов не проверяется, но stunnel требует, чтобы клиент представил сертификат, идентичный одному из локально установленных.
Определить метод аутентификации, используемый при взаимодействии с промежуточным сервером (например, HTTP-прокси или SMTP-сервер) в рамках протоколов, поддерживающих авторизацию:
set service stunnel client <name_client> options authentication <method>где <method> - метод аутентификации. Поддерживаемые методы:
basic - протокол connect - HTTP Basic Auth (RFC 7617), используется по умолчанию для протокола connect;
ntlm - протокол connect - NTLM-аутентификация, более безопасна, чем basic;
plain - протокол smtp - механизм PLAIN (RFC 4616), применяется по умолчанию для SMTP при включённой авторизации;
login - протокол smtp - классическая SMTP-аутентификация с последовательной передачей логина и пароля.
Параметр применяется только для протоколов, поддерживающих аутентификацию (connect, smtp), и выполняется до установления TLS-туннеля.
Указание домена для NTLM-аутентификации:
set service stunnel client <name_client> options domain <fqdn>где <fqdn> - полное доменное имя, используемое при NTLM-аутентификации через HTTP-прокси.
Целевой хост и порт для прокси-подключения:
set service stunnel client <name_client> options host address <address> set service stunnel client <name_client> options host port <port>где:
<address> - IP-адрес (IPv4) или имя хоста (FQDN) конечного сервера, доступ к которому осуществляется через прокси;
<port> - TCP-порт конечного сервера. Возможно указать значение в диапазоне от «1» до «65535».
Учётные данные для аутентификации на промежуточном сервере:
set service stunnel client <name_client> options username <username> set service stunnel client <name_client> options password <password>где:
<username> - имя пользователя;
<password> - пароль.
Данные параметры используются при необходимости прохождения аутентификации на HTTP-прокси или SMTP-сервере.