Прежде чем начнем основной разбор процесса установки и настройки, запаситесь чаем и печеньками, ведь статья будет длинной и интересной.
В моей статье разберем настройку на базе операционной системы (далее - ОС) Ubuntu 20.04. Рассказывать как установить ОС не буду, в интернете много информации об этом имеется, да и по сути без интернета все очень просто.
Все действия можно выполнять сразу под root, либо постоянно вначале каждой команды писать sudo и вводить пароль. Так же обращаю внимание, что в тексте будут строки, для внесения изменений в конфигурационные файлы. Удалять лишнее если я об этом не пишу, не нужно. Только редактируем и добавляем то что читаете.
Предварительная подготовка
Обновление ОС:
apt update
apt upgrade
Важно переименовать сервер т.к. многие анти спам системы проверяют, обращение к серверу по имени:
hostnamectl set-hostname mail.test.ru
mail.test.ru - вместо этого указываете свою FQDN имя.
Настройка синхронизации времени:
apt install chrony
timedatectl set-timezone Europe/Moscow
systemctl enable chrony
Europe/Moscow - вместо этой временной зоны вы указываете свою, либо оставляете как есть.
Открываем порты с помощью 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 + PHP + MariaDB
Устанавливаем apache2 и включаем автозапуск:
apt install apache2
systemctl enable apache2
Проверить работу сервера можно перейдя по ссылке http://<IP-адрес сервера>. Видите эту картинку? Значит все супер, движемся дальше.
Устанавливаем php и php-fpm и делаем автозапуск:
apt install php7.4 php7.4-fpm
systemctl enable php7.4-fpm
php7.4-fpm зависит от используемой версии php, проверить версию можно так php -v.
Ставим доп.компоненты для php:
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
Скачиваем 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
Задаем права на каталог:
chown -R www-data:www-data /var/www/html/postfixadmin
php-fpm по умолчанию, запускается от пользователя www-data.
Создать базу данных 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';
postfixmail — Имя базы. Можете задать свое имя
postfixmail — Имя учетной записи Можете задать свое имя;
password123456 — Пароль. Можете задать свой;
localhost разрешает подключение только с локального сервера.
Выходим из MariaDB:
> quit;
Создаем конфигурационный файл postfixadmin:
nano /var/www/html/postfixadmin/config.local.php
И добавляем туда:
<?php
$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_name'] = 'postfixmail';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixmail';
$CONF['database_password'] = 'password123456';
$CONF['emailcheck_resolve_domain']='NO';
?>
В браузере вводим адрес http://<IP-адрес сервера>/postfixadmin/public/setup.php
Задаем пароль установки и генерируем хэш
Всю получившуюся строку нужно скопировать
Вставить ее необходимо в файл в самый низ до закрывающей скобки:
nano /var/www/html/postfixadmin/config.local.php
Перезагружаем страницу http://<IP-адрес сервера>/postfixadmin/public/setup.php — появится форма ввода пароля. Как вы могли понять, пароль вводите, который вводили на предыдущем шаге.
Будет выполнена установка PostfixAdmin.
По итогу не должно быть никаких ошибок, но если вдруг они будут, то на экране будет видно чего не хватает системе и нужно будет просто доустановить.
Решения ошибок со скриншота выше:
Открыть файл
nano /etc/php/7.4/apache2/php.ini
Снять комментарий со строки:
До
;extension=pdo_mysql
После
extension=pdo_mysql
После успешной установки на экране появится возможность завести суперпользователя:
Setup password — пароль с предыдущего шага;
Админ — учетная запись для входа в панель управления (например root@test.ru)
Пароль — новый пароль для создаваемой учетной записи.
Переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/public/login.php
Вводим логин и пароль только что созданные и попадаем в панель управления.
Установка и настройка 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 массив с примонтированной папкой /mail.
Задаем владельца
chown mail:mail /mail
Приводим строки к такому виду:
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 имя введенное в самом начале статьи.
в конфигурационном файле:
nano /etc/postfix/main.cf
В конец этого же файла допишем следующее:
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
Создать файл с настройками обращения к базе с алиасами:
nano /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'
postfixmail — Имя ранее созданной базы
postfixmail — Имя ранее созданной учетной записи
password123456 — Пароль ранее созданный
Создать файл с инструкцией получения данных по виртуальным доменам:
nano /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'
Дописать в конце в файле master.cf:
nano /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}
Генерируем сертификаты безопасности. Либо приобретаем готовые у своего хостинг провайдера.
Создаем папку:
mkdir -p /etc/ssl/mail
В моем случае я покупал готовый SSL сертификат у провайдера timeweb за 999 рублей. Готовые файлы поместил в папку /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
Настройка Dovecot
Устанавливаем Dovecot с зависимостями для баз данных:
apt install dovecot-imapd dovecot-pop3d dovecot-mysql
Меняем способ хранения сообщений:
nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/mail/%d/%u/
конфигурируем слушателя для аутентификации:
nano /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
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:
nano /etc/dovecot/conf.d/10-auth.conf
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Настройка шифрования:
nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/ssl/mail/cert.pem
ssl_key = </etc/ssl/mail/cert.key
Настройка создания каталогов подключения к почте:
nano /etc/dovecot/conf.d/15-lda.conf
lda_mailbox_autocreate = yes
Подключение к базе данных:
nano /etc/dovecot/conf.d/auth-sql.conf.ext
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
args = /etc/dovecot/dovecot-sql.conf.ext
}
Редактируем файл работы с базой данных:
nano /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:
nano /etc/dovecot/dovecot.conf
listen = *
Включаем автозапуск dovecot и делаем перезагрузку:
systemctl enable dovecot
systemctl restart dovecot
Обязательно делаем перезагрузку всего сервера
reboot
Проверка почты
В браузере заходим в админку postfixadmin
Переходим в Список доменов и создаем новый домен. В вашем случае будет не test.local, а ваше доменное имя.
Далее переходим в Обзор и создаем тестовый ящик.
Для проверки можно использовать, MS Outlook, Mozilla Thunderbird и другие подобные программы.
Сервер: имя сервера или его IP-адрес (если указывать IP, то сертификат не будет работать).
IMAP: 143 без шифрования или 993 с шифрованием
POP3: 110 без шифрования или 995 с шифрованием
SMTP: 25 без шифрования или 465 с шифрованием
Устанавливаем и настраиваем веб клиент Roundcube
Вы можете установить себе другой веб клиент например, 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;
webint:password123456 — логин и пароль для доступа к базе данных
localhost — сервер базы данных
roundcubemail — имя базы данных.
$config['smtp_pass'] = '';
Прописываем папки в этом же конфиге:
$config['drafts_mbox'] = 'Drafts';
$config['junk_mbox'] = 'Junk';
$config['sent_mbox'] = 'Sent';
$config['trash_mbox'] = 'Trash';
$config['create_default_folders'] = true;
Задаем владельца apache на папку портала:
chown -R www-data:www-data /var/www/html/webmail
Создаем базу roundcubemail:
mysql -uroot -p
Если на этапе входа под рутом схватили подобную ошибку
Для решения выполняйте следующие рекомендации:
Останавливаем сервис mysql:
systemctl stop mysql
Запускаем сервис без загрузки таблиц предоставления или включения сети:
mysqld_safe --skip-grant-tables --skip-networking &
Теперь проваливаемся под рутом без пароля:
mysql -u root
Обновляем данные о привилегиях:
FLUSH PRIVILEGES;
Задаем новый пароль пользователю root:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password123456';
где password123456 - ваш новый пароль
Выходим:
quit;
Останавливаем запущенный сервис mysql:
kill `cat /var/run/mysqld/mysqld.pid`
Запускаем в обычном режиме mysql:
systemctl start mysql
Теперь заходим под рутом и не видим никакой ошибки:
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
Создать файл настройки:
nano /etc/php/7.4/fpm/conf.d/99-mcrypt.ini
extension=mcrypt.so
В конфиге php:
nano /etc/php/7.4/fpm/php.ini
date.timezone = "Europe/Moscow"
post_max_size = 70M
upload_max_filesize = 70M
В моем случае разрешение на файлы 70 мегабайт, вы можете изменить как вам нужно
Перезагружаем php-fpm:
systemctl restart php7.4-fpm
Настроим apache2:
nano /etc/php/7.4/apache2/php.ini
upload_max_filesize = 70M
post_max_size = 70M
Перезагружаем apache2:
systemctl restart apache2
В моем случае разрешение на файлы 70 мегабайт, вы можете изменить как вам нужно
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/webmail/installer/. В самом низу нажимаем по кнопке Next. Если кнопка будет неактивна, проверяем, что нет ошибок (NOT OK).
На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.
Редактируем конфиг roundcube:
nano /var/www/html/webmail/config/config.inc.php
$config['enable_installer'] = false;
Удаляем папку с установочными скриптами:
rm -rf /var/www/html/webmail/installer
И заходим в браузере по адресу http://<IP-адрес сервера>/webmail/. Вводим в качестве логина адрес почты созданного пользователя и его пароль. Если все прошло успешно, то вы молодец, но впереди еще работа по защите.
Если к этому моменту у вас закончился чай и печеньки, можно сходить развеяться и налить себе еще чаю.
Установка и настройка Clamav + Amavisd
Ставим все необходимое:
apt install amavisd-new clamav clamav-daemon spamassassin
Добавляем пользователя clamav в группу amavis:
usermod -a -G amavis clamav
редактируем конфиг amavis:
nano /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);
Далее редактируем:
nano /etc/amavis/conf.d/50-user
Нужно добавить
$allowed_header_tests{'multiple'} = 0;
$allowed_header_tests{'missing'} = 0;
Включаем автозапуск и перезагружаем:
systemctl enable clamav-daemon clamav-freshclam amavis
systemctl restart amavis clamav-daemon clamav-freshclam
Делаем изменения в postfix:
nano /etc/postfix/main.cf
content_filter = scan:[127.0.0.1]:10024
Так же тут master.cf:
nano /etc/postfix/master.cf
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 - Время 0 часов 00 минут, вы выставляете нужное вам
Тестируем
Содержание в сообщении ниже:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Нужно отправить на вашу тестовую почту.
Лучше это делать через telnet, информацию найти можно в интернете как отправлять письма через telnet.
Письмо не доставится, в логе (/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)
Отдельные ящики для спама и вирусов
В конфиге:
nano /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
В конфиге main.cf:
nano /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
Выводим почту во внешку
1. rDNS
Для создания записи пишите или звоните в поддержку вашего провайдера и просите его сделать данную запись, предоставив ему информацию из команды
postconf -n myhostname
или
hostname
2. А-запись
Настраивается на вашем хостинге. Выглядит примерно так
3. SPF запись
Настраивается на вашем хостинге. Выглядит примерно так
4. DMARC запись
Настраивается на вашем хостинге. Выглядит примерно так
5. DKIM запись
Создать папку для ключей:
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 редактируем:
nano /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"],
};
В файле 50-user добавляем:
nano /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
Если перезапуск выдает ошибку подобного содержания
То заходим в
nano /etc/amavis/conf.d/05-node_id
И снимаем коммент со строки:
#$myhostname = "mail.test.ru";
$myhostname = "mail.test.ru";
где mail.test.ru - ваш домен
После этого снова выполняем команду
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:
nano /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:
nano /var/www/html/webmail/config/config.inc.php
Строки
$config['smtp_server'] = '';
$config['smtp_port'] = 25;
заменить на
$config['smtps_server'] = 'ssl://localhost';
$config['smtps_port'] = 465;
Проверить сервер можно тут:
Настройка квот почты
В файле10-mail.conf:
nano /etc/dovecot/conf.d/10-mail.conf
снимаем коммент или прописываем строку
mail_plugins = $mail_plugins quota
В файле 20-imap.conf:
nano /etc/dovecot/conf.d/20-imap.conf
Снимаем комментарий или прописываем строку
protocol imap {
mail_plugins = $mail_plugins imap_quota
}
В файле 10-master.conf:
nano /etc/dovecot/conf.d/10-master.conf
редактируем строки как показано ниже:
service dict {
unix_listener dict {
mode = 0660
user = mail
group = mail
}
}
user и group - это все те же что создавались ранее вами.
В файле 90-quota.conf:
nano /etc/dovecot/conf.d/90-quota.conf
Добавляем строки или убираем коммент с них:
plugin {
quota = dict:User quota::proxy::quota
}
В файле dovecot.conf:
nano /etc/dovecot/dovecot.conf
Убираем коммент или добавляем строки:
dict {
quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
В файле dovecot-dict-sql.conf.ext:
nano /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
}
Редактируем или дописываем в файле dovecot-sql.conf.ext:
nano /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 - Эти данные меняйте на ваш нужный почтовый ящик
Прописывать квоты нужно в веб интерфейсе в каждый почтовый ящик
Информирование при превышении квот
В файле 90-quota.conf:
nano /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 редактируем все как ниже:
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = dovecot
unix_listener quota-warning {
user = mail
}
}
Скрипт оповещения quota-warning.sh:
nano /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 переводим папки на русский
Редактируем файл 15-mailboxes.conf:
nano /etc/dovecot/conf.d/15-mailboxes.conf
В блоке namespace inbox редактируем:
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
}
}
Имейте ввиду что если вы пользуетесь с одного почтового ящика и Outlook и web интерфейсом, то у вас будет отображаться в Outlook и русские папки и английские, в английские будут валиться письма с web интерфейса, а в русские будут из Outlook.
Для применения настроек перезапускаем dovecot:
systemctl restart dovecot
Настройка ограничения вложений
Начнем с:
nano /etc/postfix/main.cf
* для FreeBSD путь будет /usr/local/etc/postfix/main.cf.
Размер почтового ящика
Для установки квоты на почтовые ящики редактируем следующее:
mailbox_size_limit = 734003200
virtual_mailbox_limit = 734003200
message_size_limit = 73400320
Я ставлю 70 МБ - в файле это выглядит все в байтах как 734003200
Если не нужны ограничения, ставим 0:
После редактирования применяем изменения:
systemctl reload postfix
Далее в файле:
nano /etc/php/7.4/apache2/php.ini
Находим и редактируем
post_max_size = 70M
upload_max_filesize = 70M
И не забываем о перезапуске
systemctl restart apache2
Возможные ошибки и их решения
решается данная проблема одной-двумя командами, в зависимости что указано в выводе ошибки
a2enmod rewrite
a2enmod ssl
Если не отправляются вложения из веб интерфейса Roundcube:
Нужно отредактировать конфиг
nano /var/www/html/webmail/config/config.inc.php
добавив в него строку
$config['temp_dir'] = '/tmp/';
Если вы дочитали до конца, я вас искренне поздравляю, у вас получился отличный работоспособный почтовый сервис. Теперь остается только обслуживать его и доделывать что-то если обнаружили нехватку например автоматической настройки почты через autodiscover и другие возможности. Так же не забывайте что нужно сделать резервный сервер на случай проблем с основным. Об этих настройках я расскажу в следующих своих статьях.
Всем удачи и огромное спасибо за прочтение.