Ставим почтовый сервер на CentOS 7 на базе Postfix и Dovecot

Материал из Викиадмин
Перейти к навигации Перейти к поиску

Итак, нам нужен почтовый сервер и сделаем его на уже названных Postfix и Dovecot. Почему они:

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

Установка и настройка Postfix

Для начала, мы установим Postfix в самой простой вариации. То есть без шифрования и так далее, просто база. Порт SMTP, разумеется, 25.

yum -y install postfix

Теперь конфигурируем сервер

mcedit /etc/postfix/main.cf

и изменим/добавим следущее:

строка 75: раскоментируем и укажем имя хоста

myhostname = wikiadmin.net

на строке 83: опять раскоментируем и укажем имя домена (хост не обязательно должен совпадать с доменом. Для сайта wikiadmin.net почта может хостится на mail.wikiadmin.net, например)

mydomain = wikiadmin.net

раскомментируем строку 99

myorigin = $mydomain

строка 116, меняем

inet_interfaces = all

строка 164, добавим

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

на строке 264 раскомментируем и добавим ваши сети (для хождения почты без авторизации, если сеть известна)

mynetworks = 127.0.0.0/8, 10.0.0.0/24

на строке 419 укажем Maildir. Мне нравится то, что почта хранится в виде файлов в домашней директории пользователя: легко найти, перенести, обработать (архивация, проверка антивиром) и так далее. В общем, дело привычки.

home_mailbox = Maildir/

строка 574, добавляем

smtpd_banner = $myhostname ESMTP

и теперь добавим в конец конфигурации ограничение на письмо (10М), на ящик (1G) и авторизацию через Dovecot

message_size_limit = 10485760
mailbox_size_limit = 1073741824
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

Теперь перезагрузка сервиса и включение в автозапуск

systemctl restart postfix
systemctl enable postfix

И почти самое главное: практически на все вопросы ищем ответы в логах:

tail -f /var/log/messages

иначе рискуете быть отправленым в гугл или в известный город в Перу, если где-то без логов будете задавать вопросы.


Настройка Dovecot как POP/IMAP сервер

Итак, настраиваем и доступ к почте с помощью Dovecot. Порт (TCP) для POP 110, для IMAP 143

Установка

yum -y install dovecot

Редактируем конфигурацию. Начнём с основного файла dovecot.conf

vi /etc/dovecot/dovecot.conf

раскомментируем 24 строчку, тем самым указав включить поддержку POP и IMAP

protocols = imap pop3 lmtp

Если не используете IPv6, раскомментируем и эту строчку

listen = *

Теперь исправим файл /etc/dovecot/conf.d/10-auth.conf. На 10 строке раскомментируем и исправим

disable_plaintext_auth = no

Укажем способы аутентификации

auth_mechanisms = plain login

Теперь в файле 10-mail.conf

mcedit /etc/dovecot/conf.d/10-mail.conf

на 30 строке снова снимем комментарий и укажем где почта пользователей (выше в Postfix мы определили, что она будет в домешней директории пользователей)

mail_location = maildir:~/Maildir

Теперь редактируем файл, который подскажет Dovecot, с правами какого пользователя работать

mcedit /etc/dovecot/conf.d/10-master.conf

на строках 96-98 подправим до такого состояния:

unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
}

и, пока мы не дошли до SSL, отключим это как таковое, отредактировав файл /etc/dovecot/conf.d/10-ssl.conf на строке 8

ssl = no

Стартуем этот сервер почты и добавляем в автозапуск

systemctl start dovecot
systemctl enable dovecot

Всё готово, теперь можно подключать клиент. Базовый вариант почты работает. Без антиспама и так далее, но она есть….

Конфигурируем SSL-работу

Для чего это нужно: безопасность от перехвата данных. К тому же будут доступны дополнительные порты, что тоже неплохо, я уже встречал места, где 25, 110 и 143 порты были заблокированы провайдером. (Меня это не сильно задело, так как использую часто OpenVPN, а вот пользователей озадачило.) Для сведенья по TCP портам: SMTPS будет доступен на 465, POPS на 995, а IMAPS на 993.

Первый шаг: настраиваем SSL. Об этом можно прочитать на страницах этого сайта, да и в сети Интернет полно подобных инструкций.

Предположим, что сертификаты есть и теперь укажем их в /etc/postfix/main.cf, добавив в конце:

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/wikiadmin.crt
smtpd_tls_key_file = /etc/pki/tls/certs/wikiadmin.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

Разумеется, wikiadmin.crt и wikiadmin.key - ваши сертификаты.

Теперь редактируем /etc/postfix/master.cf, раскомментировав строки 26-28

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

Теперь редактируем /etc/dovecot/conf.d/10-ssl.conf, где на строке 8 мы убирали поддержку SSL. Теперь возвращаем.

ssl = yes

На строке 14-15 указываем уже упомянутые ранее сертификаты

ssl_cert = </etc/pki/tls/certs/server.crt
ssl_key = </etc/pki/tls/certs/server.key

Теперь перегружаем postfix и dovecot

systemctl restart postfix
systemctl restart dovecot

Добавляем виртуальные, дополнительные домены. (Set Virtual Domain)

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

Итак, вводные данные: * основной домен wikiadmin.net * дополнительный домен dpld.ru * в обоих случаях есть почта admin@домен, то есть admin@wikiadmin.net и admin@dpld.ru. * пользователей оставим такими: для admin@wikiadmin.net будет пользователь admin, а для admin@dpld.ru будет пользователь admin.dpld


В файле /etc/postfix/main.cf в конце мы добавим строки:

virtual_alias_domains = dpld.ru
virtual_alias_maps = hash:/etc/postfix/virtual

Здесь мы указали дополнительный домен и где нам искать соответствие почты и пользователя. Теперь отредактирум файл /etc/postfix/virtual, где добавим это самое соответствие.

admin@dpld.ru admin.dpld

Правильно, мы указали hash, поэтому нам нужно будет сделать “карту”. Поэтому, после внесения изменений в virtual, пересоздадим файл virtual.db

postmap /etc/postfix/virtual

И применяем изменения, перезагрузив почту

systemctl reload postfix

Готово, проверяем на клиентах.


Как научить сервер сообщать вам по почте о логине Root

Задача: нужно в максимально короткий срок узнать, зашел ли кто под пользователем root на сервер, от какого пользователя была запущена команда su и какой IP посмел такое сделать. Проверка каждого пользователя

По сути, все просто, если у вас работает Postfix или любой другой почтовик. Все, что вам нужно, это добавить в конец файла

   /root/.bash_profile

следующую строку:

echo 'ALERT - Root Shell Access on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d"(" -f2 | cut -d")" -f1`" user@wikiadmin.net

Советую заранее протестировать эту строчку, просто выполнив её. На почту должно прийти сообщение примерно такого вида:

ALERT - [Root](/) [Shell](/) Access on: Sun Dec 11 00:58:17 MSK 2011 user pts/0 2011-12-10 21:08 (72.22.22.1462) user pts/2 2011-12-10 21:17 (72.22.22.1462)

Эту же строчку можно добавить всем пользователям, которые имеют доступ на сервер по SSH Этот вариант стоит использовать, если важно получать сообщения о каждом зарегистрировавшемся пользователе. Для этого строчку

   echo ‘ALERT - Root Shell Access on:’ date who | mail -s “Alert: Root Access from who | cut -d"(" -f2 | cut -d")" -f1” user@wikiadmin.net

мы добавляем в конец файла /etc/profile. Теперь каждый раз, как какой-либо пользователь пройдет аутентификацию на сервере, вы сможете получить об этом сообщение.