Придя работать в компанию, я впервые столкнулся с корпоративной почтой на базе Google. Изучил информацию и понял, что ничего сложного в управлении нет. Но в бесплатной версии G Suite были ограничения, и в целом иметь корпоративную почту не на своем оборудовании, на мой взгляд, совсем не безопасно.
Руководство не спешило одобрить переход на локальный почтовый сервер, поэтому инициативу я не проявлял, пока не получил письмо от Google: «Устаревшая бесплатная версия G Suite перестанет работать 27 июня 2022 года. Ваш аккаунт будет автоматически переведен на Google Workspace — платную подписку, функции которой существенно оптимизируют работу в компании».
После этого письма я поговорил с руководством и предложил поднять почту на собственном сервере с полным переносом всех данных из G Suite.
Поиск почтовой программы занял немного времени, я выбирал между тремя крупными проектами: Exim, Postfix, Zimbra. Само собой, существует еще множество разных почтовых сервисов, но по количеству мануалов и функционалу эти — одни из лучших.
Я выбрал Postfix, потому что посчитал его более безопасным и гибким, чем другие решения.
Теперь была задача сохранить всю информацию со старого сервера и ничего не потерять, я занялся выгрузкой почтовых адресов с их содержимым. Перенести нужно было около 1 ТБ данных, поэтому пришлось задействовать временное хранилище.
Параллельно занялся подготовкой сервера для будущего почтовика. Выбрал такие характеристики:
- Процессор — Intel(R) Xeon(R) CPU E3-1270 v5 @ 3.60GHz, 8 ядер;
- ОЗУ — 16 ГБ;
- Дисковое пространство под почтовые ящики — 8 ТБ в RAID5;
- Дисковое пространство под систему и домашние каталоги — 1 ТБ в RAID5;
- Операционная система — Ubuntu Linux 20.04.
Настройка сервера
В первую очередь обновляем ОС до актуальной версии:
apt update
apt upgrade
Важно переименовать сервер, потому что многие антиспам-системы проверяют обращение к серверу по FQDN-имени сервера (в этом примере — mail.test.ru):
hostnamectl set-hostname mail.test.ru
Настраиваем синхронизацию времени — я установил московский часовой пояс:
apt install chrony
timedatectl set-timezone Europe/Moscow
systemctl enable chrony
Открываем порты для почты и веб-интерфейсов с помощью iptables:
iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995 -j ACCEPT
iptables -I INPUT 1 -p tcp --match multiport --dports 80,443 -j ACCEPT
Сохраняем новые правила:
apt install iptables-persistent
netfilter-persistent save
Устанавливаем apache2 и включаем автозапуск:
apt install apache2
systemctl enable apache2
Проверить работу сервера можно по ссылке http://<IP-адрес сервера>.
Устанавливаем php, php-fpm и дополнительные компоненты для них:
apt install php7.4 php7.4-fpm
systemctl enable php7.4-fpm
apt install php7.4-mysql php7.4-mbstring php7.4-imap libapache2-mod-php7.4
Перезапускаем, чтобы применить обновления:
systemctl restart php7.4-fpm
Чтобы проверить работоспособность php, создаем файл:
nano /var/www/html/index.php
В него вписываем строку:
<?php phpinfo(); ?>
Проверить работу можно, перейдя по ссылке: http://<IP-адрес сервера>/index.php.
Устанавливаем сервер баз данных с автозапуском:
apt install mariadb-server
systemctl enable mariadb
Задаем пароль для пользователя root:
mysqladmin -u root password
Теперь нужно установить и настроить PostfixAdmin — веб-приложение для управления почтовым сервером:
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz
Создаем каталог postfixadmin и распаковываем в него архив:
mkdir /var/www/html/postfixadmin
tar -C /var/www/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1
Создаем каталог templates_c внутри папки postfixadmin:
mkdir /var/www/html/postfixadmin/templates_c
Задаем права на каталог так, чтобы по умолчанию интерфейс запускался от пользователя www-data:
chown -R www-data:www-data /var/www/html/postfixadmin
Создаем базу данных postfix и учетную запись:
mysql -u root -p
> CREATE DATABASE postfixmail DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> GRANT ALL ON postfixmail.* TO 'postfixmail'@'localhost' IDENTIFIED BY 'password123456';
> quit;
Здесь postfixmail — это имя базы, postfixmail — имя учетной записи, а password123456 — пароль. Их можно заменить на ваши. Параметр localhost разрешает подключение только с локального сервера.
Создаем конфигурационный файл /var/www/html/postfixadmin/config.local.php и добавляем в него строки:
<?php
$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_password'] = 'password123456';
$CONF['emailcheck_resolve_domain']='NO';
?>
В браузере вводим адрес: http://<IP-адрес сервера>/postfixadmin/public/setup.php.
Задаем пароль установки и генерируем хеш.
Всю получившуюся строку нужно скопировать и вставить в конец конфигурационного файла перед закрывающей скобкой.
Перезагружаем страницу http://<IP-адрес сервера>/postfixadmin/public/setup.php и вводим пароль, который задали на предыдущем шаге. После этого начнется установка PostfixAdmin. Если в процессе возникнут ошибки, то программа подскажет, каких элементов не хватает в системе — их нужно будет просто доустановить.
После успешной установки на экране появится возможность завести суперпользователя:
- Setup password — пароль с предыдущего шага;
- Админ — учетная запись для входа в панель управления;
- Пароль — новый пароль для создаваемой учетной записи.
В браузере открываем страницу http://<IP-адрес сервера>/postfixadmin/public/login.php, вводим логин и пароль суперпользователя и попадаем в панель управления PostfixAdmin.
Настройка Postfix
Устанавливаем программу и зависимости:
apt install postfix postfix-mysql
В процессе появится окно Postfix Configuration — оставляем Internet Site. В следующем окне оставляем имя сервера и нажимаем Enter.
После установки создаем учетную запись, под которой будем работать с каталогом виртуальных почтовых ящиков:
groupadd -g 1024 mail
useradd -d /mail -g 1024 -u 1024 mail -m
В папке /mail будет храниться почта. У меня это отдельный RAID-массив, у вас может быть совершенно другая папка. Задаем для нее владельца:
chown mail:mail /mail
Заполняем конфигурационный файл /etc/postfix/main.cf:
mydestination = localhost.$mydomain, localhost, localhost.localdomain
inet_protocols = ipv4
smtpd_tls_cert_file = /etc/ssl/mail/cert.pem
smtpd_tls_key_file = /etc/ssl/mail/cert.key
myhostname = mail.test.ru
smtpd_tls_cert_file — это путь к файлу сертификатов, smtpd_tls_key_file — путь к файлу приватных ключей, а mail.test.ru — FQDN-имя сервера. Здесь нужно использовать ваши данные, они могут отличаться от моих.
В конец того же файла допишем:
virtual_mailbox_base = /mail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1024
virtual_uid_maps = static:1024
virtual_gid_maps = static:1024
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
Создаем и заполняем файл с настройками обращения к базе с алиасами /etc/postfix/mysql_virtual_alias_maps.cf:
user = postfixmail
password = password123456
hosts = localhost
dbname = postfixmail
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Добавляем файл с инструкцией получения данных по виртуальным доменам /etc/postfix/mysql_virtual_domains_maps.cf:
user = postfixmail
password = password123456
hosts = localhost
dbname = postfixmail
query = SELECT domain FROM domain WHERE domain='%u'
Создаем файл с почтовыми ящиками:
nano /etc/postfix/mysql_virtual_mailbox_maps.cf
Заполняем:
user = postfixmail
password = password123456
hosts = localhost
dbname = postfixmail
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
В файл /etc/postfix/master.cf дописываем:
submission inet n - n - - smtpd
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=mail:mail argv=/usr/lib/dovecot/deliver -d ${recipient}
Покупаем у хостинг-провайдера или генерируем сертификаты безопасности. Я купил готовые SSL-сертификаты у провайдера и поместил их в папку /etc/ssl/mail.
Если вы не готовы покупать сертификаты, их можно сгенерировать. Но учитывайте, что сгенерированные сертификаты не пройдут всех проверок безопасности.
Команда для генерации:
openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/mail/cert.pem -keyout /etc/ssl/mail/cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT/CN=test.mail.ru"
Включаем автозапуск postfix и перезагружаем сервис:
systemctl enable postfix
systemctl restart postfix
Настройка IMAP- и POP3-сервера
Устанавливаем Dovecot с зависимостями для баз данных:
apt install dovecot-imapd dovecot-pop3d dovecot-mysql
Меняем способ хранения сообщений:
nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/mail/%d/%u/
Конфигурируем слушателя для аутентификации в файле /etc/dovecot/conf.d/10-master.conf:
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfixmail
group = postfixmail
}
unix_listener auth-userdb {
mode = 0600
user = mail
group = mail
}
}
service stats {
unix_listener stats-reader {
user = mail
group = mail
mode = 0660
}
unix_listener stats-writer {
user = mail
group = mail
mode = 0660
}
}
Добавляем аутентификацию Dovecot в файле /etc/dovecot/conf.d/10-auth.conf:
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Настраиваем шифрование в файле /etc/dovecot/conf.d/10-ssl.conf:
ssl = required
ssl_cert = </etc/ssl/mail/cert.pem
ssl_key = </etc/ssl/mail/cert.key
Указываем каталоги подключения к почте в файле /etc/dovecot/conf.d/15-lda.conf:
lda_mailbox_autocreate = yes
Подключаемся к базе данных в файле /etc/dovecot/conf.d/auth-sql.conf.ext:
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
args = /etc/dovecot/dovecot-sql.conf.ext
}
Редактируем файл работы с базой данных /etc/dovecot/dovecot-sql.conf.ext:
driver = mysql
connect = host=localhost dbname=postfixmail user=postfixmail password=password123456
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u'
Настраиваем слушателя dovecot в файле /etc/dovecot/dovecot.conf:
listen = *
Включаем автозапуск dovecot и перезагружаем его:
systemctl enable dovecot
systemctl restart dovecot
Проверяем работоспособность почты. В браузере заходим в интерфейс postfixadmin. Переходим на вкладку «Список доменов» и создаем новый домен. Я использовал test.local, у вас будет другое доменное имя.
Далее переходим на вкладку «Обзор» и создаем тестовый ящик. Для проверки можно использовать MS Outlook, Mozilla Thunderbird и другие подобные программы. Данные, которые можно указать для проверки:
- Сервер — имя сервера или его IP-адрес (если указывать IP, то сертификат не будет работать);
- IMAP — 143 (без шифрования) или 993 (с шифрованием);
- POP3 — 110 или 995;
- SMTP — 25 или 465.
Настройка веб-клиента для почты
Вы можете установить любой веб-клиент: rainloop, AfterLogic WebMail Lite и другие. Я использовал roundcube, поэтому опишу настройку именно для него.
Скачиваем программу:
wget https://github.com/roundcube/roundcubemail/releases/download/1.2.11/roundcubemail-1.2.11-complete.tar.gz
Создаем папку для размещения программы и распаковываем архив:
mkdir /var/www/html/webmail
tar -C /var/www/html/webmail -xvf roundcubemail-*.tar.gz --strip-components 1
Копируем шаблон конфигурации и редактируем его:
cp /var/www/html/webmail/config/config.inc.php.sample /var/www/html/webmail/config/config.inc.php
nano /var/www/html/webmail/config/config.inc.php
В файле прописываем строки:
$config['db_dsnw'] = 'mysql://webint:password123456@localhost/roundcubemail';
$config['enable_installer'] = true;
$config['smtp_pass'] = '';
$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;
webint:password123456 — это логин и пароль для доступа к базе данных, localhost — сервер базы данных, а roundcubemail — имя базы данных.
Задаем владельца apache на папку портала:
chown -R www-data:www-data /var/www/html/webmail
Создаем базу roundcubemail:
mysql -uroot -p
> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON roundcubemail.* TO webint@localhost IDENTIFIED BY 'password123456';
> quit
Подгружаем данные:
mysql -uroot -p roundcubemail < /var/www/html/webmail/SQL/mysql.initial.sql
Ставим дополнения для Roundcube:
apt install php-pear php-intl php-ldap php-net-smtp php-gd php-imagick php-zip php-curl
apt install php-dev libmcrypt-dev
pecl channel-update pecl.php.net
pecl install mcrypt-1.0.4
Создаем файл настройки /etc/php/7.4/fpm/conf.d/99-mcrypt.ini и вписываем в него:
extension=mcrypt.so
В файле конфигурации php /etc/php/7.4/fpm/php.ini указываем часовой пояс и задаем максимальный размер файлов:
date.timezone = "Europe/Moscow"
post_max_size = 70M
upload_max_filesize = 70M
Перезагружаем php-fpm:
systemctl restart php7.4-fpm
Настраиваем apache2 в файле /etc/php/7.4/apache2/php.ini:
upload_max_filesize = 70M
post_max_size = 70M
Перезагружаем apache2:
systemctl restart apache2
Открываем браузер и переходим по адресу: http://<IP-адрес сервера>/webmail/installer/. Проверяем, что нет ошибок, то есть все пункты в состоянии OK. Внизу нажимаем кнопку Next. На следующей странице также проверяем все пункты.
Установка завершилась, теперь отредактируем конфигурационный файл roundcube /var/www/html/webmail/config/config.inc.php:
$config['enable_installer'] = false
Удаляем папку с установочными скриптами:
rm -rf /var/www/html/webmail/installer
Открываем в браузере страницу http://<IP-адрес сервера>/webmail/. Вводим в качестве логина адрес почты созданного пользователя и его пароль. Если все прошло успешно, то вы молодец, но впереди еще работа по защите.
Если к этому моменту у вас закончился чай и печеньки, можно развеяться и заварить себе еще чаю.
Настройка антивируса и контент-фильтра
Снова используем open-source-решения Clamav и Amavisd. Устанавливаем:
apt install amavisd-new clamav clamav-daemon spamassassin
Добавляем пользователя clamav в группу amavis:
usermod -a -G amavis clamav
В конфигурационном файле amavis /etc/amavis/conf.d/15-content_filter_mode убираем комментарии:
@bypass_virus_checks_maps = (
%bypass_virus_checks, @bypass_virus_checks_acl, $bypass_virus_checks_re);
@bypass_spam_checks_maps = (
%bypass_spam_checks, @bypass_spam_checks_acl, $bypass_spam_checks_re);
Далее в файл /etc/amavis/conf.d/50-user добавляем строки:
$allowed_header_tests{'multiple'} = 0;
$allowed_header_tests{'missing'} = 0;
Включаем автозапуск Clamav и Amavisd и перезагружаем их:
systemctl enable clamav-daemon clamav-freshclam amavis
systemctl restart amavis clamav-daemon clamav-freshclam
Изменяем файл /etc/postfix/main.cf:
content_filter = scan:[127.0.0.1]:10024
И файл /etc/postfix/master.cff:
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Перезапускаем postfix:
systemctl restart postfix
Включаем автообновление антиспама:
sa-update --nogpg --verbose
crontab -e
00 0 * * * /usr/bin/sa-update
В последней строке указано время — 00 минут 0 часов, можно подставить любое.
Отправляем проверочное сообщение на тестовую почту через telnet — информацию о том, как это сделать, можно найти в интернете. Текст сообщения лучше взять готовый, чтобы точно знать, какой результат получится. Я предлагаю такой: X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Почтовый сервис не пропустит письмо, а в логе /var/log/maillog появятся следующие записи:
… amavis[17688]: (17688-04) Blocked INFECTED (Eicar-Signature) {DiscardedOutbound,Quarantined}, MYNETS LOCAL …
… relay=127.0.0.1[127.0.0.1]:10024, delay=0.25, delays=0.19/0/0/0.06, dsn=2.7.0, status=sent (250 2.7.0 Ok, discarded, id=17688-04 – INFECTED: Eicar-Signature)
Второй тест контентный:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
В логах будет:
… amavis[17689]: (17689-04) Blocked SPAM {DiscardedOutbound,Quarantined}, MYNETS LOCAL …
… status=sent (250 2.7.0 Ok, discarded, id=17689-04 – spam)
Затем настроим отдельные почтовые ящики для спама и писем с вирусами.
В конфигурационном файле /etc/amavis/conf.d/50-user прописываем:
$spam_quarantine_to = "spam@test.ru";
$virus_quarantine_to = "virus@test.ru";
@test.ru — это ваш домен.
Перезапускаем Amavis:
systemctl restart amavis
Еще раз отправим тестовые сообщения. Но предварительно у вас должны быть созданы эти почтовые ящики.
Также настроим антиспам Postfix. В конфигурационном файле /etc/postfix/main.cf закомментируем строку:
# smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
В этот же файл впишем:
smtpd_client_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_pipelining
permit
smtpd_helo_restrictions =
permit
smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_sender
reject_unknown_sender_domain
permit
smtpd_relay_restrictions =
permit_mynetworks
permit_sasl_authenticated
defer_unauth_destination
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_non_fqdn_recipient
reject_unauth_destination
reject_unknown_recipient_domain
reject_unverified_recipient
permit
smtpd_data_restrictions =
permit
smtpd_end_of_data_restrictions =
permit
smtpd_recipient_restrictions =
...
reject_unknown_client_hostname
reject_invalid_helo_hostname
reject_non_fqdn_helo_hostname
reject_unknown_helo_hostname
reject_rbl_client bl.spamcop.net
reject_rbl_client cbl.abuseat.org
reject_rbl_client dul.ru
reject_rbl_client dnsbl.abuse.ch
permit
Перезагружаем Postfix:
systemctl restart postfix
Теперь нужно обучить антиспам. Для этого введем команду, которая ищет спам в папках у существующих пользователей:
sa-learn --spam /mail/test.local/*/{.&BCEEPwQwBDw-,.Spam,.Junk E-mail,.Junk}/cur
Убрать некорректные срабатывания можно такой командой:
sa-learn --ham /mail/test.local/spam@test.local/.Ham/cur
Статистику по обучению антиспам-фильтра можно проверить по команде:
sa-learn --dump magic
Открываем почту для внешнего доступа
Чтобы создать запись rDNS, напишите или позвоните в поддержку вашего провайдера. Оператору понадобится информация из команды postconf -n myhostname или hostname.
А-, SPF- и DMARC-записи нужно настроить на вашем хостинге. Выглядит примерно так:
Чтобы добавить DKIM-запись в Postfix, создаем папку для ключей:
mkdir -p /var/lib/dkim
Затем генерируем последовательность:
amavisd-new genrsa /var/lib/dkim/test.ru.pem 1024
Вместо test.ru нужно указать ваш домен.
Теперь устанавливаем права доступа:
chown amavis:amavis /var/lib/dkim/*.pem
chmod 0400 /var/lib/dkim/*.pem
Редактируем файл конфигурации Amavisd etc/amavis/conf.d/20-debian_defaults:
#$inet_socket_port = 10024;
$inet_socket_port = [10024,10026];
$forward_method = 'smtp:[127.0.0.1]:10025';
$notify_method = $forward_method;
$interface_policy{'10026'} = 'ORIGINATING';
$policy_bank{'ORIGINATING'} = {
originating => 1,
smtpd_discard_ehlo_keywords => ['8BITMIME'],
os_fingerprint_method => undef,
bypass_banned_checks_maps => [1],
bypass_header_checks_maps => [1],
bypass_banned_checks_maps => [1],
virus_admin_maps => ["virusalert@$mydomain"],
};
В файл etc/amavis/conf.d/50-user добавляем строки:
$enable_dkim_verification = 1;
$enable_dkim_signing = 1;
dkim_key('test.ru', "dkim", "/var/lib/dkim/test.ru.pem");
@dkim_signature_options_bysender_maps = ( {
"test.ru" => { d => "test.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
});
Снова вместо test.ru нужно указать ваш домен.
Перезапускаем Amavis:
systemctl restart amavis
Проверить DKIM-запись для домена можно командой:
amavisd-new showkeys
Ответное сообщение будет примерно таким:
; key#1 1024 bits, i=dkim, d=test.ru, /var/lib/dkim/test.ru.pem
dkim._domainkey.test.ru. 3600 TXT (
"v=DKIM1; p="
"VIDfMA0kh1jVbGBwY2Nx3IgEMgCNRDCRiQKBgQC23iOK+39mYBxsnIl1Jo8n/Heg"
"x6eMYXsp1unAdo2EBAQUAA4CNRDCRiQKBgQC23iOK+39mYBxsnIl1Jo8n/Heg"
"x6eMA0kh1jVbGBZrREVZYTEAQUAA4CNRh1jVbGBZrREVZYTE+uPOwtAbXEeRLG/Vz5"
"zyQuIRDCRiQKBgQC23iOQAB")
Копируем этот текст и вставляем в нужное поле хостинга.
Проверяем настройки DKIM:
amavisd-new testkeys
Если все устраивает, донастраиваем postfix в файле /etc/postfix/master.cf:
smtp inet n - y - - smtpd
-o content_filter=scan:[127.0.0.1]:10026
submission inet n - n - - smtpd
-o content_filter=scan:[127.0.0.1]:10026
smtps inet n - n - - smtpd
-o content_filter=scan:[127.0.0.1]:10026
127.0.0.1:10027 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
Перезапускаем postfix:
systemctl restart postfix
Чтобы настроить roundcube, в файле /var/www/html/webmail/config/config.inc.php редактируем строки:
$config['smtp_server'] = 'tls://localhost';
$config['smtp_port'] = 587;
Проверить сервер можно с помощью сайта https://spamtest.smtp.bz.
Настроим квоты для почты. Для этого в файле /etc/dovecot/conf.d/10-mail.conf снимаем коммент или прописываем строку:
mail_plugins = $mail_plugins quota
Затем в файле /etc/dovecot/conf.d/20-imap.conf прописываем строки:
protocol imap {
mail_plugins = $mail_plugins imap_quota
}
В файле /etc/dovecot/conf.d/10-master.conf редактируем строки:
service dict {
unix_listener dict {
mode = 0660
user = mail
group = mail
}
}
В файле /etc/dovecot/conf.d/90-quota.conf добавляем строки:
plugin {
quota = dict:User quota::proxy::quota
}
В файле /etc/dovecot/dovecot.conf добавляем строки:
dict {
quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
В файле /etc/dovecot/dovecot-dict-sql.conf.ext прописываем настройки:
connect = host=localhost dbname=postfixmail user=postfixmail password=password123456
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
Редактируем или дописываем в файле /etc/dovecot/dovecot-sql.conf.ext строки:
user_query = SELECT CONCAT('/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1024 AS uid, 1024 AS gid, CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u'
Проверяем конфигурационный файл dovecot и, если нет ошибок, перезапускаем его:
doveconf
systemctl restart dovecot
Далее проверяем, корректно ли работают квоты командой:
doveadm quota get -u test@test.ru
Вместо test@test.ru укажите нужный почтовый ящик.
Для каждого ящика можно прописать квоты в веб-интерфейсе PostfixAdmin.
Также рекомендую настроить информирование при превышении квот. Для этого в файле /etc/dovecot/conf.d/90-quota.conf редактируем строки:
plugin {
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=80%% quota-warning 80 %u
}
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = dovecot
unix_listener quota-warning {
user = mail
}
}
Прописываем скрипт оповещения в файле /usr/local/bin/quota-warning.sh:
cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $2 -o "plugin/quota=maildir:User quota:noenforcing"
Content-Type: text/html; charset=utf-8
From: Администратор почты <admin@test.ru>
Subject: Предупреждение о превышении квоты на почтовый ящик
X-Priority: 2
<p>Размер Вашего почтового ящика $1% от установленного ограничения.<br>
Удалите большие письма с вложениями, сделайте архивацию или обратитесь за помощью в ИТ-отдел.</p>
EOF
Вместо admin@test.ru укажите почту администратора.
Прописываем права на файл:
chmod +x /usr/local/bin/quota-warning.sh
Тестируем скрипт:
/usr/local/bin/quota-warning.sh 80 test@test.ru
Вместо test@test.ru укажите свой адрес.
Перезапускаем dovecot:
systemctl restart dovecot
Для любителей Outlook переводим названия папок в почте на русский язык. Для этого редактируем файл /etc/dovecot/conf.d/15-mailboxes.conf:
namespace inbox {
mailbox Черновики {
auto = subscribe
special_use = Drafts
}
mailbox Drafts {
auto = no
special_use = Drafts
}
mailbox Спам {
auto = subscribe
special_use = Junk
}
mailbox Junk {
auto = no
special_use = Junk
}
mailbox Spam {
auto = no
special_use = Junk
}
mailbox "Junk E-mail" {
auto = no
special_use = Junk
}
mailbox Удаленные {
auto = subscribe
special_use = Trash
}
mailbox Trash {
auto = no
special_use = Trash
}
mailbox "Deleted Messages" {
auto = no
special_use = Trash
}
mailbox Отправленные {
auto = subscribe
special_use = Sent
}
mailbox Sent {
auto = no
special_use = Sent
}
mailbox "Sent Messages" {
auto = no
special_use = Sent
}
mailbox "Sent Items" {
auto = no
special_use = Sent
}
}
Перезапускаем dovecot:
systemctl restart dovecot
Отмечу, что в Outlook могут дублироваться папки на двух языках, если этот же почтовый ящик используется в веб-интерфейсе. Причем в папках с англоязычным названием будут письма из веб-интерфейса, а с русскоязычным — из Outlook.
Далее настроим ограничения вложений. Я ставлю 70 МБ, в файле это 73 400 320 байт. Начнем с файла /etc/postfix/main.cf:
mailbox_size_limit = 73400320
virtual_mailbox_limit = 73400320
message_size_limit = 7340032
Если не нужны ограничения, ставим 0.
Перезагружаем postfix, чтобы применить изменения:
systemctl reload postfix
Далее в файле /etc/php/7.4/apache2/php.ini находим и редактируем:
post_max_size = 70M
upload_max_filesize = 70M
И не забываем о перезапуске:
systemctl restart apache2
В этой статье я показал, как можно легко настроить почтовый сервер без каких-либо вложений в программное обеспечение. Разумеется, у вас уже должно быть железо либо вы готовы его купить.
Держите почту в безопасности и качественной вам работы. Всего хорошего.