Устройство не поддерживает SSL? Не беда, поможет STunnel!

Отсутствие поддержки SSL/TLS у устройств – случай достаточно распространенный. Например, некоторые МФУ умеют сканировать документы и отправлять их на указанный адрес почты. Все бы хорошо, но зачастую, такие устройства работают только с обычным незащищенным SMTP. А на сегодняшний день найти SMTP, который работает по 25 порту и не требует шифрованного соединения, дело неблагодарное, да и из соображений безопасности – нежелательно.

У меня эта проблема проявилась в другом – камера наблюдения Axis M1104 (дорогая, приличная модель) вдруг перестала отправлять уведомления об обнаруженном движения на почту. Она долгое время работала с SMTP сервером me.com/icloud, который по каким-то соображениям допускал незашифрованные соединения (наверное, от mac.com досталось по наследству). Это конечно было потенциально небезопасно, но я не придавал этому значения, так как ящик использовался исключительно в качестве SMTP сервера для камеры. Но когда эта система перестала работать пришлось искать решение. И решение нашлось, причем довольно изящное.

Если программа или устройство не поддерживают SSL/TLS «из коробки», рекомендуется использовать STunnel. STunnel это «переходник» между «глупым и опасным клиентом» и «умным безопасным сервером». Клиент, который не умеет устанавливать шифрованное SSL/TLS соединение, подключается к STunnel незашифрованным способом, а потом STunnel установит безопасное SSL/TLS соединение с сервером и будет транслировать информацию уже в зашифрованном виде. Понятное дело, что сервер с STunnel рекомендуется ставить в той же локальной сети где находится устройство-клиент. Таким образом, внутри локальной сети между устройством и сервером STunnel будет ходить незашифрованный трафик, что не является большой проблемой, а уже на выходе в Интернет STunnel зашифрует трафик между собой и удаленным сервером (например, smtp.gmail.com).

Принцип работы STunnel на примере устройств отправляющих почту и не поддерживающих SSL

STunnel можно использовать для добавления SSL/TLS защиты для любого сервиса, который в ней нуждается. При чем это может быть как сервис или программа работающая на том же компьютере, где работает STunnel (в этом случае незашифрованная информация даже не покинет этот компьютер), так и отдельное устройство в локальной сети (IP камера, МФУ). Мы рассмотрим настройку STunnel в самом распространенном случае, когда нужно подружить устройство не поддерживающее SSL с SMTP сервером Gmail, который требует включения SSL.

Устанавливаем STunnel из репозитория Ubuntu:

$ sudo apt-get install stunnel4

Далее настроим автозагрузку STunnel, для этого достаточно в файле /etc/default/stunnel4 изменить строку

ENABLED=0

на

ENABLED=1

сохраняем и закрываем файл.

Так как STunnel у нас будет работать в режиме сервера (на самом деле он будет работать как в режиме сервере, так и клиента, потому что будет как принимать подключения, так и сам будет подключаться к серверу Gmail) нужно сгенерировать для него сертификат. Наличие сертификата необходимо, если STunnel работает в режиме сервера – обратите на это внимание, об этом даже написано в конфигурационном файле. Сгенерировать самоподписанный сертификат безопасности поможет утилита OpenSSL, которая скорее всего у вас уже есть. Если нет – поставьте.

Чтобы было проще, сгенерируйте сертификат в своей домашней папке, а потом переместите его в папку с сертификатами STunnel. Для создания сертификата используйте команду:

$ openssl req -new -out mail.pem -keyout mail.pem -nodes -x509 -days 365

Вам зададут несколько вопросов, например, код страны, как называется ваша организация, ваш email, имя сервера. В имени сервера (CN, Common Name) нужно указывать именно доменное имя. В принципе, так как сертификат нам нужен больше для галочки, можно и не указывать реальные данные, но лучше укажите, чтоб красиво было.

Процесс генерации сертификата будет выглядеть примерно так:

OpenSSL - генерация ключа шифрования

Когда сертификат будет готов, переместите его в папку где STunnel предполагает по умолчанию наличие сертификатов:

$ sudo mv ~/mail.pem /etc/ssl/certs/mail.pem

Теперь перейдем к файлу настроек STunnel:

$ sudo nano /etc/stunnel/stunnel.conf

В самом начале файла укажите правильный путь к сертификату (здесь нам напоминают, что сертификат опционален в клиентском режиме и обязателен в режиме сервера), и убедитесь что этот путь раскомментирован:

cert = /etc/ssl/certs/mail.pem

Далее в этом же файле настроек нужно выбрать версию протокола (all, SSLv2, SSLv3, TLSv1). Чтобы не заморачиваться я поставил all:

; Protocol version (all, SSLv2, SSLv3, TLSv1)
 sslVersion = all

Также включите клиентский режим, для этого раскомментируйте сл. строку:

; Use it for client mode
 client = yes

Если вы не включите клиентский режим, STunnel будет принимать подключения из локальной сети, будет всячески делать видимость работы и даже писать в лог, но не будет устанавливать соединение с удаленным сервером!

И в заключение настроим порты, которые он будет «коммутировать». В моем случае это только SMTP протокол, все остальное у меня закомментировано:

; Service-level configuration
 [ssmtp]
 accept = 25
 connect = smtp.gmail.com:465

Закрываем файл настроек сохранив его.

Запускаем процесс:

$ sudo /etc/init.d/stunnel4 start

При успешном старте должно появиться только сообщение:

Starting SSL tunnels: [Started: /etc/stunnel/stunnel.conf] stunnel.

Отладка STunnel

Если у вас что-то не получается, включите ведение лога STunnel. Для этого в файле настроек раскомментируйте строки:

debug = 7
 output = /var/log/stunnel4/stunnel.log

Напомню, что просмотреть лог в реальном времени можно командой:

tail -f /var/log/stunnel4/stunnel.log

Также проверьте что на сервере с STunnel открыт порт который принимает подключения, в нашем случае это 25.

Для того чтоб инициировать соединение через STunnel необязательно отправлять почтовое сообщение с IP камеры или МФУ или что вы там настраиваете. Очень удобно для быстрой проверки работы STunnel использовать программу Mail из Mac OS X. Просто создайте в ней SMTP сервер с локальным IP сервера где у вас работает STunnel, с 25 портом без SSL и логином/паролем как того требует сервер. Потом выберите Окно > Проверка подключения и индикатор сразу вам покажет работает ли ваша конфигурация:

Быстрая проверка STunnel с помощью Mail в Mac OS X

Для останова и перезапуска STunnel используйте следующие команды:

$ sudo /etc/init.d/stunnel4 stop
$ sudo /etc/init.d/stunnel4 restart

Подключение клиентов

Настройка SMTP клиентов для подключения к STunnel

Чтобы подключить к STunnel клиентов, которые должны отправлять почту, просто укажите в их настройках в качестве SMTP сервера локальный адрес компьютера, на котором работает STunnel и порт который слушается. Логин и пароль используйте тот который ожидает ваш почтовый сервер. Способ аутентификации можно выбирать самый простой, так как аутентификация будет происходить уже внутри SSL туннеля.

Оставьте первый комментарий

Оставить комментарий