На новой работе мне достался почтовый сервер. Для повышения безопасности я решил поднять на нем SSL шифрование + SASL. Для начала решил поменять pop3 сервер с штатного qpopper на гибконастраиваемый и легий сервер dovecot. Собсвенно о нем и пойдет речь далее.
Настройка SSL шифрования или STARTTLS на Dovecot занимает очень мало времени, все очень хорошо задокументировано и описано на официальном сайте.
Так как мгновенно перейти на шифрование не получится (пользователей почтового севера чуть более ста человек, всех поментально не обойдешь), я решил настроить Dovecot так, чтобы была возможность авторизации как старым не безопасным методом, так и с использованием ssl шифрования.
И уже после полного перехода либо закрыть 110 порт совсем, либо принудильно сделать на нем авторизацию с помощью STARTTLS.
Для функционирования SSL нужен сертификат и закрытый ключ, если у вас есть свой центр сертификации то сделать их не проблема, в противном случаем с dovecot идет очень полезный скриптик для генерации самоподписанного сертификата и закрытого ключа. Скачать его можно с официального сайта тут. Так же с ним нужно скачать конфигурационный файл, в котором надо прописать свои данные. Скрипт и конфиг положить в одну директорию.
Для генерации ключа и сертификата используется openssl (он должен быть устанолен в системе). Можно зайти и поправить скрипт указав свои названия файлов, каталоги, колличество дней и т.д. По умолчанию ключ будет генерироваться в директорию /etc/ssl/private, а сертификат в /etc/ssl/certs и оба будут иметь названия dovecot.pem. Так же сертификат делается на 1 год. Теперь поправим конфиг который мы скачали:
# country (2 letter code)
C=RU# State or Province Name (full name)
#ST=# Locality Name (eg. city)
L=Tyumen# Organization (eg. company)
O=Example Ltd# Organizational Unit Name (eg. section)
OU=POP3 server# Common Name (*.example.com is also possible)
CN=mail.example.ru# E-mail contact
emailAddress=postmaster@example.ru
После всех правок запускаем mkcert.sh без параметров и на выходе должны получить что то типо:
Generating a 1024 bit RSA private key
…………..++++++
…………………………………………++++++
writing new private key to ‘/etc/ssl/private/dovecot.pem’
——subject= /C=RU/L=Tyumen/O=Example Ltd/OU=POP3 server/CN=mail.example.ru/emailAddress=postmaster@example.ru
SHA1 Fingerprint=0F:EF:09:EB:D9:E1:AD:0C:9C:6E:3A:69:64:3F:CD:EA:8D:1A:E3:0B
После чего в заданных нами директориях должны появится файлы ключа и сетрификата.
Теперь настало время лезть уже в сам конфиг dovecot. У меня почтовый сервер на FreeBSD, так что конфиг файлы содержатся в /usr/local/etc/dovecot/ . Заходим туда и лезем в поддиректорию conf.d где правим файл 10-auth.conf
Все оставляем по дефолту за исключением:
disable_plaintext_auth = no
Этим параметром мы явно указываем что можно передавть данные для авторизации на сервере в открытом виде
auth_mechanisms = plain login
А сдесь указываем механизмы авторизации. Это простой текст, именно эти 2 механизма используют почти все mail-клиенты.
Далее настраиваем ssl. Заходим в dovecot/conf.d и находим файл 10-ssl.conf в нем делаем следующие поправки:
ssl = yes
Включаем SSL, после этой опции начнем прослушиваться 995 порт.
ssl_cert = </etc/ssl/certs/dovecot.pem
Здесь прописываем полный путь до файла сертификата. У меня тут прописан полный путь так, если бы я не изменял скрипт генерации.
ssl_key = </etc/ssl/private/dovecot.pem
Полный путь до секретного ключа, аналогично взят из дефотного значения генерации.
Убеждаемся что права у ключа 600, а у сертификата 644.
Ну и под конец правим главный конфиг /usr/local/etc/dovecot/dovecot.conf
У меня поправлено следующее:
protocols = pop3
Указываем какой протокол используем. У меня он только pop3, без imap. значение pop3 открывает как 110 так и 995 порт (при включенной ssl директиве)
listen = *
На всякий случай явно указал что слушаем на всех интерфейсах
!include conf.d/*.conf
Просто убеждаемся что перед ! нет комментария (знакак #).
На этом базовая настройка закончена! просто запускаем демона и радуемся.
После того как все пользователи перейдут на ssl (995 порт) можно либо файрволом закрыть 110, либо немного поменять значения:
в 10-auth.conf указать disable_plaintext_auth = yes
в 10-ssl.conf указать ssl = required
тем самым явно заставляя открывать зашифрованное SSL соединение на 110 портом, иначе будет выдаваться ошибка.
P. S. : В начале я не зря указывал на STARTTLS. Настройка позволяет запускать шифрованную сессию по 110 порту, если mail-клиент умеет работать с starttls. Не все клиенты поддерживают эту функцию, а частности в MS Outlook’e я так не нашел как его заставить работать с STARTTLS, однако тот же Thunderbird вполне легко пользуется этим шифрованием.
No comments
RSS / trackback