Настройка SSL соединения для Postfix, Dovecot и Apache в CentOS

Настройка SSL соединения для Postfix, Dovecot и Apache в CentOS это третья статья в цикле «Создание и настройка полноценного почтового сервера на Centos VPS» в которой мы рассмотрим метод безопасной работы с почтовым сервером с помощью SSL соединения. Стоит отметить, что мы будем использовать самоподписаные SSL сертификаты, так как в подписанных мы не нуждаемся, да и стоят они много денег. Использование зашифрованного SSL соединения позволяет не боятся за сохранность переписки, а так же логина и пароля, поскольку теперь аутентификация будет производится по методу SSL, что достаточно безопасно. А наш почтовый сервер наконец-то выйдет в рабочую и готовую для работы в боевых условиях – Бету. Итак, поехали.

Создаем SSL сертификаты, ключи и CSR

Установливаем SSL:

yum install openssl 
 
mkdir -p ~/ssl/mydomain.com
cd ~/ssl/mydomain.com
openssl genrsa -des3 -out mydomain.com.key 2048
openssl req -new -key mydomain.com.key -out mydomain.com.csr
openssl x509 -req -days 365 -in mydomain.com.csr -signkey mydomain.com.key -out mydomain.com.crt
cp mydomain.com.key{,.orig}
openssl rsa -in mydomain.com.key.orig -out mydomain.com.key
chmod 400 mydomain.com.key
yum install openssl 

mkdir -p ~/ssl/mydomain.com
cd ~/ssl/mydomain.com
openssl genrsa -des3 -out mydomain.com.key 2048
openssl req -new -key mydomain.com.key -out mydomain.com.csr
openssl x509 -req -days 365 -in mydomain.com.csr -signkey mydomain.com.key -out mydomain.com.crt
cp mydomain.com.key{,.orig}
openssl rsa -in mydomain.com.key.orig -out mydomain.com.key
chmod 400 mydomain.com.key

Распихиваем ключи по папкам:

cp mydomain.com.crt /etc/pki/tls/certs
cp mydomain.com.{key,csr} /etc/pki/tls/private/
cp mydomain.com.crt /etc/pki/tls/certs
cp mydomain.com.{key,csr} /etc/pki/tls/private/

Настройка SSL доступа к Roundcube

Это могло бы быть сложно, если бы не CentOS. К счатью если вы использовали для установки LAMP мануалы этого сайта, то все что вам необходимо сделать, это расскаментить пару строк, что-бы активировать модуль mod_ssl для Apache.

Добавляем ключи в файл ssl.conf:

yum install mod_ssl
vim +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf
 
SSLCertificateFile /etc/pki/tls/certs/mydomain.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/mydomain.com.key
yum install mod_ssl
vim +/SSLCertificateFile /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/pki/tls/certs/mydomain.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/mydomain.com.key

Форсировать SSL соединение в Apache для mydomain.com/webmail:

vim /etc/httpd/conf.d/90-roundcube.conf
 
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?webmail/(.*) https://%{SERVER_NAME}/webmail/$1 [R,L]
vim /etc/httpd/conf.d/90-roundcube.conf

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?webmail/(.*) https://%{SERVER_NAME}/webmail/$1 [R,L]

Рестартуем Apache:

service httpd restart 
service httpd restart 

Настройка IMAP/POP3 соединения через SSL

Для этого надо немного поковыряться в конфиге dovecot.conf:

protocols = imap pop3
 
ssl = yes
ssl_cert = 
 
Порты которые должны быть открыты в системе в случаем SSL соединения:
<strong>SSL IMAP 993
SSL POP3 995
SSL SMTP 465</strong>
 
Порты которые должны быть открыты в системе в случаем PLAIN TEXT соединения:
<strong>POP3 110
SMTP 25
IMAP 143 </strong>
 
Если вам нужно открыть порты в IPtables для <strong>SSL </strong>то делаем так:
protocols = imap pop3

ssl = yes
ssl_cert = 

Порты которые должны быть открыты в системе в случаем SSL соединения:
<strong>SSL IMAP 993
SSL POP3 995
SSL SMTP 465</strong>

Порты которые должны быть открыты в системе в случаем PLAIN TEXT соединения:
<strong>POP3 110
SMTP 25
IMAP 143 </strong>

Если вам нужно открыть порты в IPtables для <strong>SSL </strong>то делаем так:
iptables -I INPUT 5 -p tcp --dport 993 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 995 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 465 -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 993 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 995 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 465 -j ACCEPT

Если вам нужно открыть порты в IPtables для PLAIN TEXT то делаем так:

iptables -I INPUT 2 -p tcp --dport 25 -j ACCEPT
iptables -I INPUT 3 -p tcp --dport 110 -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 25 -j ACCEPT
iptables -I INPUT 3 -p tcp --dport 110 -j ACCEPT

Незабываем сделать рестарт dovecot и проверить что все нормально:

service dovecot restart
ss -tpl | grep -E 'imaps|pop3s'
LISTEN  0  0  *:imaps *:* users:(("dovecot",1955,22))
LISTEN  0  0  *:pop3s *:* users:(("dovecot",1955,18))
service dovecot restart
ss -tpl | grep -E 'imaps|pop3s'
LISTEN  0  0  *:imaps *:* users:(("dovecot",1955,22))
LISTEN  0  0  *:pop3s *:* users:(("dovecot",1955,18))

Настройка SMTP соединения через SSL

И для этого нужно поковыряться в конфигурационном файле Postfix main.cf:

vim /etc/postfix/main.cf
vim /etc/postfix/main.cf

И туда добавляем:

#ssl
smtpd_use_tls = yes
smtpd_tls_key_file  = /etc/pki/tls/private/mydomain.com.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mydomain.com.crt
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
 
smtp_use_tls = yes
smtp_tls_key_file = /etc/pki/tls/private/mydomain.com.key
smtp_tls_cert_file = /etc/pki/tls/certs/mydomain.com.crt
 
# Misc TLS
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1
 
smtp_tls_session_cache_database = btree:/etc/postfix/smtp_tls_session_cache
smtp_tls_session_cache_timeout = 3600s
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_tls_session_cache
smtpd_tls_session_cache_timeout = 3600s
#ssl
smtpd_use_tls = yes
smtpd_tls_key_file  = /etc/pki/tls/private/mydomain.com.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mydomain.com.crt
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

smtp_use_tls = yes
smtp_tls_key_file = /etc/pki/tls/private/mydomain.com.key
smtp_tls_cert_file = /etc/pki/tls/certs/mydomain.com.crt

# Misc TLS
smtp_tls_loglevel = 1
smtpd_tls_loglevel = 1

smtp_tls_session_cache_database = btree:/etc/postfix/smtp_tls_session_cache
smtp_tls_session_cache_timeout = 3600s
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_tls_session_cache
smtpd_tls_session_cache_timeout = 3600s

Заглянем в файл master.cf:

vim +/smtps /etc/postfix/master.cf
vim +/smtps /etc/postfix/master.cf

Там должны быть расскоментированы следующие строки:

smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

Сохраняем, рестартуем Постфикс:

service postfix restart
service postfix restart

Смотрим на результат:

ss -tnpl | grep 465
LISTEN 0 0  *:465 *:* users:(("master",2119,19))
ss -tnpl | grep 465
LISTEN 0 0  *:465 *:* users:(("master",2119,19))

По итогу вы теперь можете использовать безопасное SSL соединение для входа в вашу почту.
MAIL_1

Так выглядит интерфейс изнутри. Как видно из скриншота, осуществлено безопасное соединение с сервером.
MAIL_2