мета-данные страницы
Это старая версия документа!
Почтовый сервер с нуля
Разберем настройку на базе операционной системы (далее - ОС) Ubuntu 20.04.
Предварительная подготовка
Обновление ОС
apt update
apt upgrade
Важно переименовать сервер т.к. многие анти спам системы проверяют, обращение к серверу по имени
hostnamectl set-hostname mail.fellk.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 + PHP + MariaDB
Устанавливаем apache2 и включаем автозапуск
apt install apache2
systemctl enable apache2Проверить работу сервера можно перейдя по ссылке http://10.0.1.18
Видите эту картинку?
Значит все супер, движемся дальше.
Устанавливаем php и php-fpm и делаем автозапуск
apt install php8.1 php8.1-fpm
systemctl enable php8.1-fpm
проверить версию можно так
php -v
Ставим доп.компоненты для php
apt install php8.1-mysql php8.1-mbstring php8.1-imap libapache2-mod-php8.1
Для применения перезапускаем
systemctl restart php8.1-fpm
Чтобы проверить работоспособность php создаем файл
nano /var/www/html/index.php
вписываем в файл строку
<?php phpinfo(); ?>
Проверить работу можно перейдя по ссылке http://10.0.1.18/index.php
Видите эту картинку?
20230925-072123.png_nolink
Значит все супер, движемся дальше.
Устанавливаем сервер баз данных и делаем автозапуск
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
Создать базу данных postfix и учетную запись
mysql -u root -p
CREATE DATABASE fellk DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON fellk.* TO 'fellk'@'localhost' IDENTIFIED BY 'Ваш пароль';
quit;
Создаем конфигурационный файл postfixadmin
nano /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://10.0.1.18/postfixadmin/public/setup.php
Задаем пароль установки и генерируем хэш
Вставить ее необходимо в файл в самый низ до закрывающей скобки
nano /var/www/html/postfixadmin/config.local.php
Перезагружаем страницу http://10.0.1.18/postfixadmin/public/setup.php — появится форма ввода пароля. Как вы могли понять, пароль вводите, который вводили на предыдущем шаге.
Будет выполнена установка PostfixAdmin. По итогу не должно быть никаких ошибок, но если вдруг они будут, то на экране будет видно чего не хватает системе и нужно будет просто доустановить.
После успешной установки на экране появится возможность завести суперпользователя
Админ — root@fellk.ru
Пароль — новый пароль для создаваемой учетной записи
Переходим в браузере на страницу http://10.0.1.18/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
Задаем владельца
chown mail:mail /mail
Приводим строки к такому виду
В файле
nano /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.fellk.ru
smtpd_tls_key_file — путь и названия сертификатов у вас могут отличаться.
В конец этого же файла допишем следующее
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
password = Ваш пароль
hosts = localhost
dbname = fellk
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Создать файл с инструкцией получения данных по виртуальным доменам
nano /etc/postfix/mysql_virtual_domains_maps.cf
password = Ваш пароль
hosts = localhost
dbname = fellk
query = SELECT domain FROM domain WHERE domain='%u'
Файл с почтовыми ящиками
nano /etc/postfix/mysql_virtual_mailbox_maps.cf
password = Ваш пароль
hosts = localhost
dbname = fellk
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/mailSSL сертификат куплен у провайдера 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=mail.fellk.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 = 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
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
Проверка почты
В браузере заходим в админку http://10.0.1.18/postfixadmin/public/login.php
Переходим в Список доменов и создаем новый домен.
Далее переходим в Обзор и создаем тестовый ящик.
Сервер: имя сервера или его IP-адрес (если указывать IP, то сертификат не будет работать).
IMAP: 143 без шифрования или 993 с шифрованием
POP3: 110 без шифрования или 995 с шифрованием
SMTP: 25 без шифрования или 465 с шифрованием
Устанавливаем и настраиваем веб клиент Roundcube
Скачиваем программу
wget https://github.com/roundcube/roundcubemail/releases/download/1.6.1/roundcubemail-1.6.1-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://root:Ваш пароль@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;
Задаем владельца 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 root@localhost IDENTIFIED BY 'Ваш пароль';
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/8.1/fpm/conf.d/99-mcrypt.ini
extension=mcrypt.so
В конфиге php
nano /etc/php/8.1/fpm/php.ini
date.timezone = "Europe/Moscow" post_max_size = 70M upload_max_filesize = 70M
Перезагружаем php-fpm
systemctl restart php8.1-fpm
Настроим apache2
nano /etc/php/8.1/apache2/php.ini
upload_max_filesize = 70M post_max_size = 70M
Перезагружаем apache2
systemctl restart apache2
Открываем браузер и переходим по адресу http://10.0.1.18/webmail/installer/. В самом низу нажимаем по кнопке Next.
На следующей странице проверяем, что все пункты находятся в состоянии OK. Установка выполнена.
Редактируем конфиг roundcube
nano /var/www/html/webmail/config/config.inc.php
$config['enable_installer'] = false;
Удаляем папку с установочными скриптами
rm -rf /var/www/html/webmail/installer
И заходим в браузере по адресу http://10.0.1.18/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
Письмо не доставится, в логе (/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\@fellk.ru"; $virus_quarantine_to = "virus\@fellk.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
#Разрешить доступ клиентам, прошедшим процедуру аутентификации SMTP
permit_sasl_authenticated
#Запретить некорректное использование команд конвейерной обработки
reject_unauth_pipelining
#Разрешить доступ
permit
smtpd_helo_restrictions =
#Разрешить доступ
permit
smtpd_sender_restrictions =
#Разрешить доступ из доверенных сетей
permit_mynetworks
#Разрешить доступ клиентам, прошедшим процедуру аутентификации SMTP
permit_sasl_authenticated
reject_non_fqdn_sender
reject_unknown_sender_domain
#Разрешить доступ
permit
smtpd_relay_restrictions =
#Разрешить доступ из доверенных сетей
permit_mynetworks
#Разрешить доступ клиентам, прошедшим процедуру аутентификации SMTP
permit_sasl_authenticated
defer_unauth_destination
smtpd_recipient_restrictions =
#Разрешить доступ из доверенных сетей
permit_mynetworks
#Разрешить доступ клиентам, прошедшим процедуру аутентификации SMTP
permit_sasl_authenticated
#Запретить доступ, если адрес получателя сообщения имеет некорректный формат
reject_non_fqdn_recipient
#Запретить Postfix быть открытым релеем
reject_unauth_destination
#Запретить доступ, если для имени домена адреса получателя не существует A или MX запись в DNS
reject_unknown_recipient_domain
#Запретить доступ, если адрес получателя не может быть проверен
reject_unverified_recipient
#Запретить доступ клиентам, не зарегистрированным в DNS
reject_unknown_client_hostname
#Запретить доступ, если имя хоста, содержащееся в выданном клиентом приветствии, имеет некорректный синтаксис
reject_invalid_helo_hostname
#Запретить доступ, если имя хоста, содержащееся в выданном клиентом приветствии, не является FQDN
reject_non_fqdn_helo_hostname
#Запретить доступ, если для имени хоста, содержащемся в выданном клиентом приветствии, не существует A или MX запись в DNS
reject_unknown_helo_hostname
######Проверить адрес сети клиента по блэклистам######
reject_rbl_client zombie.dnsbl.sorbs.net,
reject_rbl_client work.rsbs.express.ru,
reject_rhsbl_sender dsn.rfc-ignorant.org
##Вызывает проблемы с отправкой и доставкой почты## reject_rbl_client bl.spamcop.net
##Вызывает проблемы с отправкой и доставкой почты## reject_rbl_client cbl.abuseat.org
##Вызывает проблемы с отправкой и доставкой почты## reject_rbl_client dul.ru
##Вызывает проблемы с отправкой и доставкой почты## reject_rbl_client dnsbl.abuse.ch
##Вызывает проблемы с отправкой и доставкой почты## reject_rbl_client zen.spamhaus.org,
##Вызывает проблемы с отправкой и доставкой почты## reject_rbl_client multihop.dsbl.org,
##Вызывает проблемы с отправкой и доставкой почты## reject_rbl_client dnsbl.sorbs.net,
#Проверить, разрешен ли адрес отправителя сообщения в файле, являющемся параметром данного ограничения
check_sender_access hash:/etc/postfix/sender_access
#Разрешить доступ
permit
Перезагрузка Postfix
systemctl restart postfix
Обучение антиспама
sa-learn --spam /mail/fellk.ru/*/{.\&BCEEPwQwBDw-,.Spam,.Junk\ E-mail,.Junk}/cur
Убрать некорректные срабатывания можно так
sa-learn --ham /mail/fellk.ru/spam\@fellk.ru/.Ham/cur
Статистика по обучению спама
sa-learn --dump magic
Выводим почту во внешку
rDNS
postconf -n myhostnameили
hostname
А-запись
Настраивается на вашем хостинге. Выглядит так
SPF запись
Настраивается на вашем хостинге. Выглядит так
DMARC запись
Настраивается на вашем хостинге. Выглядит так
DKIM запись
Создать папку для ключей
mkdir -p /var/lib/dkim
Генерируем последовательность
amavisd-new genrsa /var/lib/dkim/fellk.ru.pem 1024
Ставим нужные права
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('fellk.ru', "dkim", "/var/lib/dkim/fellk.ru.pem");
@dkim_signature_options_bysender_maps = ( {
"test.ru" => { d => "fellk.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
});
Перезапускаем amavis
systemctl restart amavis
Проверить DKIM последовательность для домена можно так
amavisd-new showkeys
будет что-то вроде этого
; key#1 1024 bits, i=dkim, d=fellk.ru, /var/lib/dkim/fellk.ru.pem dkim._domainkey.fellk.ru. 3600 TXT ( "v=DKIM1; p=" "VIDfMA0kh1jVbGBwY2Nx3IgEMgCNRDCRiQKBgQC23iOK+39mY9972KNNGKETJo8n/Heg" "x6eMYXsp1unAdo2EBJDFU35CNRDCRiQKBgQC23iOK+39mYBxsnIl1Jo8n/Heg" "x6eMA0kh1jVbGBZrREVZYTEAQUAA4CNRh1jNWGQIF38KWYTE+uPOwtAbXEeRLG/Vz5" "zyQuIRDCKSHWUGN2461SFG3iOQAB")Теперь нужно на хостинге прописать эти данные. Выглядит так
Проверяем настройки 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['smtp_server'] = 'tls://localhost'; $config['smtp_port'] = 587;
Настройка квот почты
В файле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
}
}
В файле 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=fellk user=root password=Ваш пароль
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@fellk.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@fellk.ru> Subject: Предупреждение о превышении квоты на почтовый ящик X-Priority: 2 <p>Размер Вашего почтового ящика $1% от установленного ограничения.<br> Удалите большие письма с вложениями, сделайте архивацию или обратитесь за помощью в ИТ отдел.</p> EOF
Прописываем права на файл
chmod +x /usr/local/bin/quota-warning.sh
Тестируем скрипт
/usr/local/bin/quota-warning.sh 80 test@fellk.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
}
}
Для применения настроек перезапускаем dovecot
systemctl restart dovecot
Настройка ограничения вложений
Начнем с файла
nano /etc/postfix/main.cf
Размер почтового ящика Для установки квоты на почтовые ящики редактируем следующее
mailbox_size_limit = 734003200 virtual_mailbox_limit = 734003200 message_size_limit = 73400320
После редактирования применяем изменения
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/';
Обсуждение