11.3к
2
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Как мы переводили корпоративную почту с Google на собственный сервер Postfix

Время чтения 56 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
11.3к
2
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Меня зовут Игорь Кучеренко, я ведущий системный администратор на телеканалах «Еда» и FoodTime. Ранее я рассказывал о настройке систем мониторинга и логирования и о хакерском взломе. Сегодня хочу поделиться историей о срочном переходе на новый почтовый сервис.

Как мы переводили корпоративную почту с Google на собственный сервер Postfix

Придя работать в компанию, я впервые столкнулся с корпоративной почтой на базе 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

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

Держите почту в безопасности и качественной вам работы. Всего хорошего.

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники