Защита POP3 с помощью Stunnel.
Метки: chroot | Stunnel | РОР3
Среда, 21 октября 2009 г.
Просмотров: 2255
Подписаться на комментарии по RSS
Даже если РОРЗ/IМАР-сервер не поддерживает ни один из вариантов безопасных протоколов (SPOP и IMAPS), можно применить Stunnel, который дает возможность создавать TCP-туннели, по которым данные пересылаются в зашифрованном виде.
Stunnel предназначен для универсального туннелирования ТСР-соединений. Если Stunnel еще не установлен, можно загрузить его с сайта: http://www.stunnel.org (конечно, понадобится SSL-библиотека, к примеру OpenSSL). Co стороны сервера можно употреблять Stunnel, чтобы предоставлять сервисы SPOP и IMPAS пользователям.
Генерация ключа.
Сначала надо сгенерировать ключ для сервера. В каталоге /etc/stunnel для этих целей можно найти сценарий generate-stunnel-key.sh, вызывающий библиотеку openssl для генерирования сертификатов х509.
openssl req -new x509 -days 365 -nodes -config .stunnel.cnf \ -out stunnel.pem -keyout stunnel.pem
test $USE_DH -eq 0 opensll gendh 512 » stunnel.pem
openssl x509 -subject -dates -fingerprint -noout -in stunnel.pem
chmod 600 stunnel.pem rm -f stunnel. rr.d
Так как была описана процедура генерирования сертификатов ранее несколько раз, можно предположить, что все уже знакомы с этим процессом.
Если был вызван сценарий generate-stunnel-key.sh не из каталога /etc/stunnel, нужно переместить .pem-файлы в каталог /etc/stunnel.
Конфигурация.
После данного надо создать конфигурационный файл для Stunnel. Можно создать конфигурационный файл для туннелирования РОРЗ-сервера, но если нужно применять Stunnel для туннелирования другого ТСР-сервиса, то надо будет модифицировать конфигурацию Stunnel.
Stunnel поддерживает chroot-окружения, поэтому надо создать группу и пользователя, от имени которых будет запускаться Stunnel, и тоже структуру каталогов /chroot/stunnel:
# groupadd stunnel
# useradd -g stunnel -s /sbin/nologin
Нужно создать файл /etc/stunnel/stunnel.conf и добавить в него следующие записи:
setuid = stunnel
setgid = stunnel
pid = /stunnel.pid
debug = mail.notice
client = no
Кроме этого можно указать месторасположение только что созданного сертификата:
Путь к сертификату надо указывать абсолютный (и не относительно chroot-окружения), потому что сертификат загружается до вызова chroot(). Это позволяет хранить сертификаты за пределами «песочницы», что обеспечивает дополнительную безопасность.
Теперь надо подумать о клиентах. Конечно, самый безопасный вариант - это когда клиенты предоставляют свои сертификаты, но это и самый непрактичный результат: представте себе лицо обычного пользователя, которому надо сказать: «Создайте сертификат Х509». Поэтому с практической точки зрения лучшим будет вариант, когда пользователи будут пропускаться как с сертификатом, так и без него:
Осталось только добавить опции РОРЗ:
accept = 995
connect = localhost:pop3
Первая строка [рорЗ server] применяется для повышения читабельности конфигурационного файла, 995 - это стандартный порт для SPOP (этот порт будет прослушивать spop), а третья строка устанавливает имя узла и порт, которому будет перенаправлено (forward) соединение.
Все, что теперь осталось, - это запустить Stunnel (и конечно же, обеспечить его автоматический запуск):