Создание корпоративного почтового сервера часть третья (Общие вопросы безопасности)

    Общий рейтинг статьи: 5 (проголосовало 1 )
    Опубликовано:  [просмотров 843]


    Представляем вашему вниманию третью часть практического экскурса в построение почтовых серверов. Данная заметка является продолжением статей:

    Данный цикл статей пишется на практическом примере миграции нашего почтового сервера и сегодня мы рассмотрим основные операции которые должны быть произведены после базовой настройки почтового сервера.

    • Защита трафика от перехвата третьими лицами
    • Блокировка попыток подбора паролей
    • Настройка DKIM/SPF и т.п. для повышения уровня доверия вашему почтовому серверу
    • И дополнительно, сбор почты с других ящиков

    Mail server security

    Установка SSL-сертификата для защиты трафика почтового MTA-агента Postfix

    В качестве SSL-сертификата мы будем использовать Let's encrypt. В предыдущих статьях мы уже не раз рассказывали как установить сертификат Let's encrypt на сервер и поэтому напомним только команду как получить сертификат Let's encrypt из командной строки:

    # certbot-auto certonly --apache -d mail.help-me-24.com

    Параметр --apache задает плагин при помощи которого мы получаем или обновляем сертификат (список плагинов можно посмотреть в справке).

    Настраиваем поддержку SSL в Postfix

    Для активации режима SSL в Postfix вам потребуется дополнить файл конфигурации /etc/postfix/main.cf несколькими параметрами:

    smtpd_tls_CAfile = /etc/letsencrypt/live/mail.help-me-24.com/cert.pem
    smtpd_tls_cert_file=/etc/letsencrypt/live/mail.help-me-24.com/fullchain.pem
    smtpd_tls_key_file=/etc/letsencrypt/live/mail.help-me-24.com/privkey.pem
    smtp_tls_cert_file=/etc/letsencrypt/live/mail.help-me-24.com/fullchain.pem
    smtp_tls_key_file=/etc/letsencrypt/live/mail.help-me-24.com/privkey.pem
    smtp_tls_CAfile = /etc/letsencrypt/live/mail.help-me-24.com/cert.pem
    smtpd_use_tls=yes
    smtp_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    smtpd_tls_security_level = may
    smtpd_tls_received_header = yes
    smtpd_tls_auth_only = no
    tls_random_source = dev:/dev/urandom

    После перезапуска почтового сервера проверьте отправку почты при помощи почтового клиента Thunderbird с включенным режимом STARTTLS.

    postfix start tls

    В случае ошибок можно использовать консольную команду:

    # openssl s_client -starttls smtp -showcerts -connect localhost:25

    Данная команда используется для проверки возможности подключения и запроса сертификатов, режим STARTTLS использует стандартный 25-ый порт почтового сервера.

    Помимо режима STARTTLS почтовые клиенты так же могут использовать режим SSL/TLS и в этом режиме уже используется нестандартный порт 465 и естественно его потребуется открыть в FireWall.

    Активация режима SSL/TLS в Postfix потребует внесения исправлений в другой конфигурационный файл /etc/postfix/master.cf, где необходимо раскомментировать параметр:

    smtps inet n - - - - smtpd
    -o syslog_name=postfix/smtps
    -o smtpd_tls_wrappermode=yes

    За подключение режима TLS отвечает параметр smtpd_tls_wrappermode=yes. После перезапуска Postfix-демона (демон перезапускаем на каждом этапе правки конфигурационных файлов) проверьте работу при помощи Thunderbird с активированным одноименным режимом работы.

    Postfix SSL TLS on port 465

    Зашита трафика IMAP-сервера от перехвата

    Аналогично MTA-агенту Postfix у Dovecot так же имеется возможность использования SSL-сертификатов для шифрования трафика при обмене данными между почтовым клиентом и сервером IMAP.

    Для активации этого режима потребуется внести правки в конфигурационный файл /etc/dovecot/conf.d/10-ssl.conf:

    ssl = yes
    ssl_cert = </etc/letsencrypt/live/mail.help-me-24.com/fullchain.pem
    ssl_key = </etc/letsencrypt/live/mail.help-me-24.com/privkey.pem
    ssl_ca = /etc/letsencrypt/live/mail.help-me-24.com/cert.pem

    Проверьте работу режимов STARTTLS и SSL/TLS при помощи консольной команды из прошлого раздела и просто подключитесь при помощи Thunderbird установив необходимые уровни шифрования трафика.

    Imap server SSL and TLS

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

    Настройка DKIM/SPF (DMARK) для повышения уровня доверия почтовому серверу

    Первое, что необходимо проверить в первую очередь перед тем как приступать к настройке DKIM/SPF, это DNS-записи для вашего домена и почтового сервера. Если вы не выполните эти базовые требования, то повышать уровень доверия DKIM/SPF записями не имеет смысла.

    Проверяем MX-запись для домена:

    $ dig MX help-me-24.com
    help-me-24.com.         3599    IN      MX      0 mail.help-me-24.com.

    Из ответа DNS-сервера понятно, что за обслуживание домена отвечает сервер mail.help-me-24.com

    Проверяем прямую запись адреса почтового сервера:

    $ dig A mail.help-me-24.com
    mail.help-me-24.com.    3488    IN      A       168.235.83.125

    И соотвтетсвенно обратную запись для ip-адреса:

    $ dig -x 168.235.83.125
    125.83.235.168.in-addr.arpa. 86399 IN   PTR     mail.help-me-24.com.

    Логично, что для подтверждения принадлежности почтового сервера домену прямая и обратная DNS-записи должны совпадать, а сам сервер должен принадлежать MX-записи домена, без соблюдения этих устловий дальше можно не заморачиваться.

    Проверяем на наличие нашего сервера в блэк-листах

    Для массовой проверки наличия сервера в блэк листах можно воспользоваться сервисом: https://mxtoolbox.com/SuperTool.aspx?action=blacklist

    Проверка почтового сервера на находжение в черных списках спамеров

    Если ваш сервер находится в черном списке, то вы можете попробовать вывести его из этого списка воспользовавшись специальной формой на сайте сервиса предоставляющего списки или перепиской с администрацией сервиса (предоставляющего списки блокировки, а не сайта проверки).

    Настраиваем SPF

    SPF, если не вникать в детали это логическое продолжение связки записей прямая-обратная-MX, но описывающее политику обработки почты. Различные можели SFP могут описывать различные правила для сервера принимающего почту.

    Если не вникать в разные вычурные модели, то логично добавить почтовому домену одну SPF запись описывающую правило, - "принимать почту только с наших MX-серверов".

    Такая DNS-запись выглядит следующим образом:

    help.me-24.com IN TXT "v=spf1 mx -all"

    В консоли управления Go Daddy‎ это будет выглядеть следующим образом.

    godaddy spf settings

    Обратите внимание, что в случае использования сервися GoDaddy ковычки не указываются и проверить, что соотвтетсвующая TXT запись добавлена можно командой:

    $ dig TXT help-me-24.com

    Настройка DKIM-подписи исходящей почты

    Настройка DKIM подписи, является основой политики DMARK и это наиболее точный способ определить, что письмо пришло именно из нашего домена.

    Для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации (запись привязана к DNS-записи в домене), подпись проверяется на стороне получателя и на основании результата проверки принимается решение о помещении письма в спам (в случае подделки домена отправителя). В этой статье мы будем рассматривать подпись исходящей почты нашего домена, а вопросы борьбы со спамом мы рассмотрим в следующих статьях.

    Для настройки DKIM-подписи сообщений установите пакеты opendkim-tools и opendkim:

    # apt-get install opendkim opendkim-tools

    Ключи у нас будут храниться в каталоге /etc/postfix/dkim/, этот каталог необходимо создать и сделать пользователя opendkim владельцем этого каталога:

    # mkdir /etc/postfix/dkim/
    # chown opendkim /etc/postfix/dkim/

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

    # opendkim-genkey -D /etc/postfix/dkim/ -d help-me-24.com -s help_me_24_com
    # opendkim-genkey -D /etc/postfix/dkim/ -d th22.info -s th22_info
    # chown opendkim -R /etc/postfix/dkim

    В результате в каталоге /etc/postfix/dkim/ будет создано несколько файлов:

    # ls /etc/postfix/dkim/
    help_me_24_com.private  help_me_24_com.txt  th22_info.private  th22_info.tx

    Файлы с расширением .txt содержат описание DNS записи которую требуется создать, а файлы с расширением .privat должны содержаться в секрете и будут использоваться при подписи сообщений.

    Приступим к настройке OpenDKIM и в файл /etc/opendkim.conf прописываем пути к файлам, содержащим списки ключей и соответствия ключей доменам обслуживаемых сервером:

    Syslog yes
    Mode sv
    KeyTable file:/etc/postfix/dkim/keytable
    SigningTable file:/etc/postfix/dkim/signingtable

    Создаем соответствующие файлы:

    # touch /etc/postfix/dkim/keytable
    # touch /etc/postfix/dkim/signingtable

    Синтаксис у этих файлов конфигурации довольно специфичный, но вполне понятный.

    keytable

    help_me_24_com._domainkey.help-me-24.com help-me-24.com:help_me_24_com:/etc/postfix/dkim/help_me_24_com.private
    th22_info._domainkey.th22.info th22.info:th_22_info:/etc/postfix/dkim/th22_info.private

    signingtable

    help-me-24.com help_me_24_com._domainkey.help-me-24.com
    th22.info th22_info._domainkey.th22.info

    Таблица signtable содержит связку "домен отправитель" -> "запись в таблице ключей", а таблица keytable содержит описание связей "запись в таблице ключей" -> "приватный файл ключа".

    Обратите ваше внимание, что по умолчанию opendkim обслуживает локальный Socket, а мы изменим поведение с работы с сокетами на работу по TCP-протоколу, и для этого в файл /etc/default/opendkim внесите следующий параметр:

    SOCKET="inet:8891@localhost"

    Перезапустите демона opendkim командой:

    # /etc/init.d/opendkim restart

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

    milter_default_action = accept
    milter_protocol = 2
    smtpd_milters = inet:localhost:8891
    non_smtpd_milters = inet:localhost:8891

    После перезапуска демона postfix исходящие сообщения будут автоматически подписываться согласно домена отправителя, проверить это вы сможете посмотрев исходный код письма в Thunderbird отправив письмо самому себе.

    Не забудьте создать TXT-записи DNS сервера содержащиеся в файлах с расширением .txt, в противном случае сервер получателя не сможет проверить вашу DKIM подпись.

    Например, TXT запись для домена help-me-24.com выглядит следующим образом (записана в файле /etc/postfix/dkim/help_me_24_com.txt):

    help_me_24_com._domainkey       IN      TXT     ( "v=DKIM1; k=rsa; "
    "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoQi5kLd4yKLC
    GlITwNrae2yaDaCEjOQKs+L45DlqhRHN8Z6IEBc739ksicX4chhDfyyQv1f
    +RrXBCh6enOlopXtOUskqyQ4uWu1aiCS7koUMJ5ysVfDKNoo9Fb33gKS
    Cc5+NgLdgf1jzwtmvmPe0DRw38EP1PJnmQSUm/Z9vOWwIDAQAB" ) 
    ; ----- DKIM key help_me_24_com for help-me-24.com

    В консоли регистратора GoDaddy она будет отображаться следующим образом:

    GoDaddy DKIM record

    Ковычки обязательно уберите как и в случае с SPF! Это особенность редактора GoDaddy. После того как ваша DNS-запись обновиться можно воспользоваться сервисом http://dkimvalidator.com/ для проверки корректности произведенных настроек.

    Защита сервера от перебора паролей спамерами

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

    Для блокировки попыток перебора паролей обычно используется популярный пакет fail2ban и установку этого пакета для блокировки перебора паролей ssh-сервера мы уже рассматривали в прошлых статьях и сейчас мы научим его блокировать спамеров пытающихся подобрать пользовательские пароли.

    Установим пакет fail2ban при помощи команды:

    # aptitude install fail2ban

    Принцип действия fail2ban достаточно простой, приложение просматривает log-файлы и анализирует попытки неудачной авторизации. Когда количество неудачных авторизаций за определенный период времени превышает настроенный в конфигурации показатель осуществляется блокировка адреса с которого осуществлялись попытки подбора пароля (на период указанный в файле конфигурации).

    Для анализа log-файлов на попытки подбора паролей к службам Postfix и Dovecot внесите следующие изменения в конфигурационный файл /etc/fail2ban/jail.conf:

    [dovecot]
    enabled = true
    port    = imap2,imap3,imaps,pop3,pop3s
    filter  = dovecot
    logpath = /var/log/mail.log

    [postfix]

    enabled  = true
    port     = smtp,ssmtp,submission
    filter   = postfix
    logpath  = /var/log/mail.log

    После перезапуска службы fail2ban при помощи команды:

    # service fail2ban restart

    Проверьте появилиь ли соответствующие "цепочки-блокировки" в iptables при помощи команды:

    # iptables -L -n

    Если все прошло успешно, то будут активированы две дополнительные цепочки правил multiport:

    fail2ban-dovecot  tcp  --  0.0.0.0/0   0.0.0.0/0   multiport dports 143,220,993,110,995
    fail2ban-postfix  tcp  --  0.0.0.0/0   0.0.0.0/0   multiport dports 25,465,587

    Сбор почты со сторонних почтовых серверов

    Наверное у многих наших читателей имеется куча почтовых ящиков на сторонних сервисах, таких как Yandex/Google/Mail.ru и т.п., естественно проверять их все мягко говоря неудобно и поэтому разумно будет настроить сбор почты со всех ящиков в центральный "корпоративный аккаунт".

    Для этого можно использовать старую как сам Unix/Linux утилиту FetchMail, это решение отлично себя зарекомендовало тем, что оно просто работает и главное работает стабильно как часы и для начала работы вам потребуется установить соответствующий пакет, так как в поставку по умолчанию он не входит:

    # aptitude install fetchmail

    Fetchmail может быть запущена как в режиме "пользователя", так и в режиме демона и нас интересует второй режим, так как основной нашей задачей является настроить автоматизированный сбор почты и доставка ее в локальные "корпоративные" почтовые ящики.

    Запуск Fetchmail по умолчанию запрещен при старте сервера и для активации режима автозагрузки вам необходимо изменить конфигурационный файл /etc/default/fetchmail изменив параметр:

    START_DAEMON=yes

    Fetchmail в режиме службы работает с конфигурационным файлом /etc/fetchmailrc примерно такого содержания:

    set postmaster "chernousov@th22.info"
    set bouncemail
    set no spambounce
    set no syslog
    set properties ""
    set daemon 30
    set logfile=/var/log/fetchmail/fetchmail.log  
     
    poll imap.mail.ru with proto IMAP  
           user 'anton-public@mail.ru' there with password 'xxxxPasswordxxxx' is 'chernousov@help-me-24.com' here options flush ssl  
     
    poll imap.gmail.com with proto IMAP
           user 'nl12345df@gmail.com' there with password 'xxxxPasswordxxxx' is 'chernousov@help-me-24.com' here options flush ssl

    poll imap.yandex.ru with proto IMAP
           user 'nl12345df@yandex.ru' there with password 'xxxxPasswordxxxx' is 'chernousov@help-me-24.com' here options flush ssl

    Обратите внимание, что потребуется создать каталог для хранения log-файлов и назначить ему владельца:

    # mkdir /var/log/fetchmail/
    # chown fetchmail /var/log/fetchmail/
    # touch /var/log/fetchmail/fetchmail.log
    # chown fetchmail /var/log/fetchmail/fetchmail.log

    Конфигурационный файл довольно простой и представленный пример описывает сбор почты с трех популярных серверов публичных почтовых служб, но обратите внимание на параметр flush, так-как активировав его вы удалите письма на сервере с которого вы загружаете почту.

    После перезапуска сервиса командой:

    # /etc/init.d/fetchmail restart

    Начнется сбор почты с указанных в конфигурационном файле ящиков, а состояние сбора данных можно проверить просмотрел лог-файл /var/log/fetchmail/fetchmail.log.

    Частота опроса внешних почтовых ящиков задается параметром daemon и в примере конфигурационного файла она установлена раз в 30 секунд, этого вполне достаточно в работе и почтовые сервера Google и Mail.ru спокойно относятся к такому периоду опроса не блокируя клиента.


    Обсуждение статьи

    Ваш комментарий: