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|http://10.0.1.18]]
Видите эту картинку?
{{:manuals:pasted:20230522-071140.png?nolink}}
Значит все супер, движемся дальше.
=== Устанавливаем 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
вписываем в файл строку
Проверить работу можно перейдя по ссылке [[http://10.0.1.18/index.php|http://10.0.1.18/index.php]]
Видите эту картинку?
{{:manuals:pasted:20230925-072123.png?nolink?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
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;
nano /var/www/html/postfixadmin/config.local.php
И добавляем туда
В браузере вводим адрес http://10.0.1.18/postfixadmin/public/setup.php
=== Задаем пароль установки и генерируем хэш ===
{{:manuals:pasted:20230522-075540.png?nolink}}
Вставить ее необходимо в файл в самый низ до закрывающей скобки
nano /var/www/html/postfixadmin/config.local.php
{{:manuals:pasted:20230925-072659.png?nolink}}
Перезагружаем страницу http://10.0.1.18/postfixadmin/public/setup.php — появится форма ввода пароля.
Как вы могли понять, пароль вводите, который вводили на предыдущем шаге.
{{:manuals:pasted:20230522-075757.png?nolink}}
Будет выполнена установка PostfixAdmin.
По итогу не должно быть никаких ошибок, но если вдруг они будут, то на экране будет видно чего не хватает системе и нужно будет просто доустановить.
=== После успешной установки на экране появится возможность завести суперпользователя ===
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
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
nano /etc/postfix/mysql_virtual_domains_maps.cf
nano /etc/postfix/mysql_virtual_mailbox_maps.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=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 =
ssl_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
Переходим в Список доменов и создаем новый домен.
{{:manuals:pasted:20230925-073017.png?nolink}}
Далее переходим в Обзор и создаем тестовый ящик.
Для проверки можно использовать, 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.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
В моем случае разрешение на файлы 70 мегабайт, вы можете изменить как вам нужно
=== Перезагружаем 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
В моем случае разрешение на файлы 70 мегабайт, вы можете изменить как вам нужно
Открываем браузер и переходим по адресу http://10.0.1.18/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://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*
Нужно отправить на вашу тестовую почту
Лучше это делать через [[poleznosti:sending_mail_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\@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
=== А-запись ===
Настраивается на вашем хостинге. Выглядит так
{{:manuals:pasted:20230925-075250.png?nolink}}
=== SPF запись ===
Настраивается на вашем хостинге. Выглядит так
{{:manuals:pasted:20230925-075307.png?nolink}}
=== DMARC запись ===
Настраивается на вашем хостинге. Выглядит так
{{:manuals:pasted:20230925-075320.png?nolink}}
=== 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")
Теперь нужно на хостинге прописать эти данные. Выглядит так
{{:manuals:pasted:20230925-075623.png?nolink}}
=== Проверяем настройки 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;
Проверить сервер можно тут:
https://spamtest.smtp.bz
==== Настройка квот почты ====
=== В файле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=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
Прописывать квоты нужно в веб интерфейсе в каждый почтовый ящик
{{:manuals:pasted:20230925-080423.png?nolink}}
==== Информирование при превышении квот ====
=== В файле 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: Администратор почты
Subject: Предупреждение о превышении квоты на почтовый ящик
X-Priority: 2
Размер Вашего почтового ящика $1% от установленного ограничения.
Удалите большие письма с вложениями, сделайте архивацию или обратитесь за помощью в ИТ отдел.
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
}
}
Имейте ввиду что если вы пользуетесь с одного почтового ящика и Outlook и web интерфейсом, то у вас будет отображаться в Outlook и русские папки и английские, в английские будут валиться письма с web интерфейса, а в русские будут из Outlook.
=== Для применения настроек перезапускаем dovecot ===
systemctl restart dovecot
==== Настройка ограничения вложений ====
=== Начнем с файла ===
nano /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
==== Возможные ошибки и их решения ====
{{:manuals:pasted:20230522-110102.png?nolink}}
решается данная проблема одной-двумя командами, в зависимости что указано в выводе ошибки
a2enmod rewrite
a2enmod ssl
=== Если не отправляются вложения из веб интерфейса Roundcube ===
Нужно отредактировать конфиг
nano /var/www/html/webmail/config/config.inc.php
добавив в него строку
$config['temp_dir'] = '/tmp/';