Zarafa и шифрование

Материал из ALT Linux Wiki

Zarafa и шифрование

Чтобы не нагромождать и так большую статью о настройке Zarafa, настройка шифрования выделена в отдельную статью. Первая часть статьи описывает конфигурацию шифрования, используя свой CA и вручную созданные сертификаты. Вторая часть описывает настройку уже при имеющихся сертификатах.

Для тех, у кого уже всё есть

Данная инструкция описывает создание самоподписанных сертификатов. Если у Вас уже имеется сертификат, тогда Вам надо перейти в конец этой инструкции.

Предварительные подготовления

Кроме тех пакетов, которые были установлены, нужно еще 2. OpenSSL наверняка уже установлен, а вот плагин TLS к postfix...:h2.

sudo apt-get install postfix-tls

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

Создание CA, сертификатов и частных ключей для них

Переходите к /var/lib/ssl/. Любым текстовым редактором открываем файл openssl.cnf. Все изменения там опциональны, все сделано для повышения удобства создания сертификатов. Меняйте след. строки:

dir = /var/lib/ssl/misc/demoCA  # Чисто для удобства, если создавать сертификаты вне папки demoCA
default_days = 365   # На сколько дней по умолчанию создавать сертификат
stateOrProvinceName_default = Tatarstan   # укажите область нахождения Вашей организации
localityName_default = Kazan    # то же, но город.
0.organizationName_default = Roga i kopyta   #  Название вашей организации.
organizationalUnitName_default<>=  Pohorony  # Название отдела организации.
commonName_default = i-2-6-VM.localdomain   # Настойтельно рекомендуется выбрать FQDN сервера в качестве общего имени. Можно узнать по команде hostname -f
emailAddress_default = test@rik.ru   # Основной адрес электронной почты организации

По сути, эти настройки ни на что не влияют, просто при создании сертификата эти данные будут предложены по умолчанию. Все остальные параметры менять по Вашему усмотрению, нет смысла рассматривать все.

После сохранения изменений переходим к ./misc/. В этой папке запускаем скрипт CA с ключом создания центра сертификации:

cd ./misc
./CA -newCA

Отвечайте на вопросы скрипта, опциональные параметры можете пропустить.

Далее создайте любой каталог и помещаем туда два скрипта, прикрепленные к статье. Запускайте вначале генерацию частных ключей, далее - публичных сертификатов.

./private.key.gen.sh
./public.cert.gen.sh

Скрипты приложены к этой статье (выложу чуть позже). Учтите, что сертификаты для выдаваться разным именам, организацию можно не менять. В случае использования лишь одного имени, создается лишь один сертификат.

Во время выполнения скрипта все нужные данные уже будут по умолчанию, в нужных местах придется лишь набрать пароль. Единственное замечание: помните, что для сертификатов нельзя выдавать одинаковые CommonNames, поэтому во время создания при запросе CommonName указывайте уникальные имена.

В каталоге, где эти скрипты были запущены, для каждого сервиса будут созданы сертификаты и ключи к ним. Теперь поместим их в нужные папки. Выполните эти команды по очереди:

# mkdir /etc/postfix/ssl/
# mkdir /etc/httpd2/ssl/
# mkdir /etc/zarafa/ssl/
# cp postfix_p* /etc/postfix/ssl/
# cp apache_p* /etc/httpd2/ssl/
# cp *.pem /etc/zarafa/ssl/
# rm /etc/zarafa/ssl/postfix_p* /etc/zarafa/ssl/apache_p*
# cp /var/lib/ssl/misc/demoCA/cacert.pem /etc/postfix/ssl/
# cp /var/lib/ssl/misc/demoCA/cacert.pem /etc/zarafa/ssl/
# cp /var/lib/ssl/misc/demoCA/cacert.pem /etc/httpd2/ssl/

# chown -R vmail /etc/zarafa/ssl/
# chmod -R 700 /etc/zarafa/ssl/
# chmod 640 /etc/httpd2/ssl/*private* /etc/postfix/ssl/*private*

Теперь переходим, собственно, к настройке шифровании.

Настройка шифрования в zarafa (/etc/zarafa/)

Далее указаны строки конфиг. файлов, которые необходимо изменить:

dagent.cfg:

sslkey_file = /etc/zarafa/ssl/dagent_private_key.pem
sslkey_pass = password

gateway.cfg:

pop3s_enable  =  yes
pop3s_port  =  995
imaps_enable  =  yes
imaps_port  =  993
ssl_private_key_file  =  /etc/zarafa/ssl/gateway_private_key.pem
ssl_certificate_file  =  /etc/zarafa/ssl/gateway_public_cert.pem
ssl_verify_file       =  /etc/zarafa/ssl/cacert.pem

Если необходимо отключить нешифрованные соединения, то:

pop3_enable  =  no
imap_enable  =  no

ical.cfg:

icals_enable = yes 
icals_port = 8443
ssl_private_key_file = /etc/zarafa/ssl/ical_private_key.pem
ssl_certificate_file = /etc/zarafa/ssl/ical_public_cert.pem
ssl_verify_file       =  /etc/zarafa/ssl/cacert.pem

Если необходимо отключить нешифрованные соединения для службы календарей, то:

ical_enable = no

indexer.cfg:

sslkey_file         = /etc/zarafa/ssl/indexer_private_key.pem
sslkey_pass         = password
ssl_private_key_file= /etc/zarafa/ssl/indexer_private_key.pem
ssl_certificate_file= /etc/zarafa/indexer/indexer_public_cert.pem

monitor.cfg:

sslkey_file = /etc/zarafa/ssl/monitor_private_key.pem
sslkey_pass = password

server.cfg:

server_ssl_enabled = yes
server_ssl_port = 237
server_ssl_key_file  = /etc/zarafa/ssl/server_cert_key.pem
server_ssl_key_pass = password
server_ssl_ca_file = /etc/zarafa/ssl/cacert.pem

spooler.cfg:

sslkey_file = /etc/zarafa/ssl/spooler_private_key.pem
sslkey_pass = password

licensed.cfg (если имеется):

sslkey_file = /etc/zarafa/ssl/licensed_private_key.pem
sslkey_pass = password

Я думаю, объяснений не требуется, всё тривиально.

Службы zarafa пока не следует запускать.

Postfix (/etc/postfix/)

Далее приведен кусок конфигурации main.cf для включения шифрования.

smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem                                                                                                               
smtpd_tls_cert_file = /etc/postfiх/ssl/postfix_public_cert.pem                                                                                               
smtpd_tls_key_file = /etc/postfix/ssl/postfix_private_key.pem                                                                                                
smtpd_use_tls = yes                                                                                                                                          
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache                                                                                      
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache                                                                                        
smtp_use_tls = yes                                                                                                                                           
tls_random_source = dev:/dev/urandom                                                                                                                         
smtp_tls_note_starttls_offer = yes                                                                                                                           
# Same as defaults                                                                                                                                           
#smtpd_enforce_tls = no                                                                                                                                      
#smtpd_tls_auth_only = no                                                                                                                                    
#smtpd_tls_received_header = no                                                                                                                              
#smtpd_tls_session_cache_timeout = 3600s

Это конфиг универсален, возможно, придется лишь изменить пути к сертификатам, если они помещены не в каталоге ./ssl/.

О включении 465 порта (SMTPS) обратитесь в основной статье, п. "Полезные советы".

Apache (/etc/httpd2/)

Первым делом установите пакет apache2-mod_ssl:

apt-get install apache2-mod_ssl

После этого откройте файл ./conf/sites-available/default_https.conf и измените след. строки:

#ServerName www.example.com:443   # закомментируйте эту строчку
SSLCertificateFile "/etc/httpd2/ssl/apache_public_cert.pem"
SSLCertificateKeyFile "/etc/httpd2/ssl/apache_private_key.pem"
SSLCACertificateFile "/etc/httpd2/ssl/cacert.pem"

Сохраняем этот файл. Редактируйте ports_all:

#NameVirtualHost *:80                                                                                                                                        
#Listen 10.10.19.47:80                                                                                                                                       
                                                                                                                                                             
<IfModule mod_ssl.c>                                                                                                                                         
    NameVirtualHost *:443                                                                                                                                    
    Listen 443                                                                                                                                               
</IfModule>                                                                                                                                                  
                                                                                                                                                             
<IfModule mod_gnutls.c>                                                                                                                                      
    NameVirtualHost *:443                                                                                                                                    
    Listen 443                                                                                                                                               
</IfModule> 

Первые две строчки закомментированы, потому что при попытке запустить сервер с этими параметрами apache выдаст ошибку вида:

Starting httpd2 service: (98)Address already in use: make_sock: could not bind to address 10.10.19.47:80
no listening sockets available, shutting down

Следующий файл на изменение - ./conf/mods-start.d/000-default.conf. В ней нужно добавить строчку:

ssl=yes

Последний штрих: создайте символические ссылки:

ln -s /etc/httpd2/conf/mods-available/ssl.conf /etc/httpd2/conf/mods-enabled/ssl.conf
ln -s /etc/httpd2/conf/mods-available/ssl.load /etc/httpd2/conf/mods-enabled/ssl.load

Теперь перезагрузите все необходимые службы:

/etc/init.d/postfix restart; /etc/init.d/httpd2 restart; /etc/init.d/mysqld restart; /etc/init.d/zarafa-dagent restart; /etc/init.d/zarafa-gateway restart; /etc/init.d/zarafa-ical restart; /etc/init.d/zarafa-indexer restart; /etc/init.d/zarafa-monitor restart; /etc/init.d/zarafa-server restart; /etc/init.d/zarafa-spooler restart

Если все настройки были прописаны верно, все службы запустятся успешно. Заметьте, что в строке нет команды запуска службы лицензий. Если этот файл необходимо запустить, то поместите нижеследующую строку до команды запуска zarafa-server:

/etc/init.d/zarafa-licensed restart;

Для проверки работы через шифрованное соединение продейлайте след. шаги:

  1. Войдите в webaccess через https, например, https://www.example.com. Браузер, скорее всего, выведет предупреждение о недоверенности сертификата, добавляйте исключение для сайта.
  2. Войдите под своим именем и паролем.
  3. Отправьте письмо самому себе. Приход письма означает корректную настройку шифрования.

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

Для SMTP доступно два порта - 25 и 465. Оба эти порта будут шифрованы, один - StartTLS, другой - SSL. Вы вправе использовать оба порта по своему разумению.

На этом настройка шифрования почты завершена.

Шифрование официальными сертификатами

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

Рассмотрим ситуацию. В Вашем распоряжении имеются cert.crt (сам сертификат), req.key (закрытый ключ для сертификата), ca.crt (сертификат Центра сертификации). В данном случае эти файлы сгодятся лишь для некоторых служб Zarafa. Для других нужно создать объединенный файл сертификата, содержащий в себе собственно сертификат и ключ к нему. Для этого:

cat /path/to/req.key > /path/to/cert_new.pem
cat /path/to/cert.crt  >> /path/to/cert_new.pem

Таким образом у Вас будет создано все для настройки шифрования Zarafa существующими сертификатами.

Теперь поясню, что где какие файлы надо указать. В gateway.cfg и ical.cfg нужно указать оригинальные файлы:

ssl_private_key_file  =  /etc/zarafa/ssl/req.keyh2. 
ssl_certificate_file  =  /etc/zarafa/ssl/cert.crt
sll_verify_file       =  /etc/zarafa/ssl/ca.crt

Для indexer.cfg нужно указывать:

sslkey_file         = /etc/zarafa/ssl/cert_new.pem
sslkey_pass         =       # при ручном создании пароля к созданному сертификату не будет
ssl_private_key_file= /etc/zarafa/ssl/req.key
ssl_certificate_file= /etc/zarafa/indexer/cert.crt

Для остальных служб (dagent.cfg, monitor.cfg, licensed.cfg, server.cfg, spooler.cfg) необходимо указать созданный нами файл.

sslkey_file = /etc/zarafa/ssl/cert_new.key
sslkey_pass =      # при ручном создании пароля к созданному сертификату не будет

Файл ca.crt указываем в server.cfg:

server_ssl_ca_file = /etc/zarafa/ssl/ca.crt

Для apache и postfix необходимо использовать оригинальные файлы сертификатов и настройка шифрования аналогична настройке в вышеследующем разделе.