Как обезопасить соединение с почтовым сервером (использование шифрования для связи с почтовым сервером)

SSL (уровень защищённых сокетов) и его потомок TLS (безопасность транспортного уровня) наиболее широко используемые протоколы для шифрования данных, которыми обмениваются сервер и клиент. Эти протоколы часто используют сертификаты X.509 для асимметричной криптографии.

STARTTTLS — это другой метод обезопасить обмен простым текстом. Этот протокол также шифрует данные с SSL или TLS, но с тем же портом что и протоколы простого текста, вместо использования отдельных портов для SSL/TLS-зашифрованной коммуникации. Например, IMAP через STARTTLS использует тот же порт что и IMAP (143), в то время как IMAPS (IMAP через SSL) использует отдельный порт 993.

Предыдущая инструкция описывала, как настроить почтовый сервер на основе Postfix и Dovecot, но аспект безопасности не попал в неё. В этом уроке мы продемонстрируем как усилить безопасность почтового сервера посредством настройки шифрования, основанного на TLS/SSL.

Необходимые сертификаты TLS/SSL могут быть самоподписанными, подписанными бесплатной службой сертификации (вроде CAcert) или подписаны коммерческой службой (вроде VeriSign), а также могут быть созданы утилитами вроде OpenSSL. В данном мануале мы собираемся использовать самоподписанный сертификат.

Включение TLS шифрования для Postfix

Самоподписанный сертификат может быть создан следующей командой.

# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/postfixcert.pem -keyout /etc/ssl/private/postfixkey.pem

Вышеприведённая команда затребует новый сертификат, тип которого X.509, и который будет валидным на протяжении 365 дней. Необязательный параметр -nodes определяет, что частный ключ не должен быть зашифрованным. Созданный файл сертификат будет сохранён как postfixcert.pem, а файл ключа как postfixkey.pem .

При создании сертификата будут запрошены данные:

Country Name (2 letter code) [AU]:TH
State or Province Name (full name) [Some-State]:Chonburi
Locality Name (eg, city) []:Pattaya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:codeby.net
Organizational Unit Name (eg, section) []:Example.tst
Common Name (e.g. server FQDN or YOUR name) []:mail.example.tst
Email Address []:alex@example.tst

Можно всё красиво и правильно ввести, но правда жизни такова, что эти данные ни на что не влияют. Их не смотрят ни люди, ни программы. Вместо ввода данных можно просто каждый раз нажимать [Enter].

Теперь, когда сертификаты готовы, необходимы внести нужные настройки в файл конфигурации postfix.

root@mail:~# vim /etc/postfix/main.cf
### STARTTLS включён ###
smtpd_tls_security_level = may

smtpd_tls_received_header = yes
smtpd_tls_auth_only = yes

### loglevel 3 может быть использован для решения проблем ###
smtpd_tls_loglevel = 1

### путь до сертификата и ключевого файла
smtpd_tls_cert_file = /etc/ssl/certs/postfixcert.pem
smtpd_tls_key_file = /etc/ssl/private/postfixkey.pem
smtpd_use_tls=yes

Перезапускаем postfix для включения TLS.

root@mail:~# service postfix restart

Уже сейчас postfix готов для шифрования данных при передачи их с/на сервер. Дополнительные подробности о поддержке Postfix TLS можно найти в официальном README.

Включение SSL шифрования для Dovecot

Настройка dovecot для шифрования схожа с postfix.

Вначале делаем самоподписанный сертификат с помощью openssl:

# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/dovecotcert.pem -keyout /etc/ssl/private/dovecotkey.pem

Эта команда затребует создание нового сертификата X.509, действительного 365 дней. -nodes это опция, которая говорит, что частный ключ не должен быть зашифрован. Файл сертификата будет сохранён как dovecotcert.pem, а файл ключа будет иметь имя dovecotkey.pem.

Заполняем данные для сертификата (можно писать что угодно, либо просто оставлять строки пустыми):

Country Name (2 letter code) [AU]:TH
State or Province Name (full name) [Some-State]:Chonburi
Locality Name (eg, city) []:Pattaya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:codeby.net
Organizational Unit Name (eg, section) []:Example.tst
Common Name (e.g. server FQDN or YOUR name) []:mail.example.tst
Email Address []:alex@example.tst

Далее, прописываем пути к сертификатам в настройках dovecot.

root@mail:~# vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no
меняем на
ssl = yes
И добавляем следующие строки:
ssl_cert = </etc/ssl/certs/dovecotcert.pem
ssl_key = </etc/ssl/private/dovecotkey.pem

Наконец, перезапускаем dovecot для включения SSL с новыми сертификатами.

root@mail:~# service dovecot restart

Проверяем открытые порты, теперь должен быть полный набор.

root@mail:/etc/dovecot/conf.d# netstat -nat
tcp 0 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
tcp 0 0 0 0.0.0.0:143 0.0.0.0:* LISTEN
tcp 0 0 0 0.0.0.0:993 0.0.0.0:* LISTEN
tcp 0 0 0 0.0.0.0:995 0.0.0.0:* LISTEN

Настройка почтового клиента Mozilla Thunderbird

Для тестирования использовалась программа Mozilla Thunderbird. Программа хорошая, но встроенный мастер настройки учётной записи не предлагает принять новые самоподписанные сертификаты. Т.е. можно столкнуться с неприятной ситуацией, когда на самом деле почтовый сервер настроен и работает правильно, а мастер настройки учётной записи Mozilla Thunderbird постоянно пишет, что пароль неправильный.

Я делал следующим образом: выбирал аутентификацию без шифрования. После создания учётной записи переходил в её настройки и выбирал аутентификацию с шифрованием. После этого, при отправке/получении почты Mozilla Thunderbird делал запрос на принятие сертификатов. После принятия всех сертификатов всё отлично работает, в том числе и злосчастный мастер настройки учётных записией.

После описанных манипуляций почтовая программа Mozilla Thunderbird определила следующие настройки для моего сервера:

02

03

Решение проблем

Для начала, убедитесь, что все необходимые порты разрешены в файерволе.

Второе, попробуйте telnet подключиться к почтовому серверу. Это должно получиться. Ниже приведено несколько примеров.

Соединение к IMAPS

$ telnet mail.example.tst 993
Trying mail.example.tst...
Connected to mail.example.tst.
Escape character is '^]'.
exit
exit
Connection closed by foreign host.

Соединение к POP3S

$ telnet mail.example.tst 995
Trying mail.example.tst...
Connected to mail.example.tst.
Escape character is '^]'.
exit
exit
Connection closed by foreign host.

Соединение к SMTP

$ telnet mail.example.tst 25
Trying mail.example.tst...
Connected to mail.example.tst.
Escape character is '^]'.
220 mail.example.tst ESMTP Postfix (Debian/GNU)

### Команды ###
ehlo mail.example.tst
250-mail.example.tst
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *