Отсутствие поддержки 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/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) нужно указывать именно доменное имя. В принципе, так как сертификат нам нужен больше для галочки, можно и не указывать реальные данные, но лучше укажите, чтоб красиво было.
Процесс генерации сертификата будет выглядеть примерно так:
Когда сертификат будет готов, переместите его в папку где 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 используйте следующие команды:
$ sudo /etc/init.d/stunnel4 stop $ sudo /etc/init.d/stunnel4 restart
Подключение клиентов
Чтобы подключить к STunnel клиентов, которые должны отправлять почту, просто укажите в их настройках в качестве SMTP сервера локальный адрес компьютера, на котором работает STunnel и порт который слушается. Логин и пароль используйте тот который ожидает ваш почтовый сервер. Способ аутентификации можно выбирать самый простой, так как аутентификация будет происходить уже внутри SSL туннеля.
Оставить комментарий
Для отправки комментария вам необходимо авторизоваться.