Ставим почтовый сервер на 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. Теперь каждый раз, как какой-либо пользователь пройдет аутентификацию на сервере, вы сможете получить об этом сообщение.