Это свободное Open Source решение по организации почтового сервера на базе Unix подобных ОС.
iRedMail:
В сборку входят такие пакеты как Postfix+Dovecot+LDAP, MySQL или PostreSQL back-end на выбор)+SpamAssassin+ClamAV+AmaViS+RoundCube .
Более подробно о компонентах и их функциях:
- Postfix - агент передачи почты (MTA — Mail transfer agent) предоставляет SMTP сервис;
- Dovecot (MDA/LDA) - свободный и очень безопасный POP3/POP3S и IMAP/IMAPS сервер, служит для получения почты. Использует Sieve для фильтрации почтовых сообщей;
- MySQL - служит для хранения данных приложений и пользовательских учетных записей, управляется при помощи консоли или phpmyadmin;
- OpenLDAP - служит для хранения пользовательских учетных записей про протоколу OpenLDAP;
- Policyd - служба политик сервера Postfix; Policyd v2 — кодовое имя «cluebringer»;
- Amavisd - используется в качестве интерфейса между Postfix и SpamAssassin.;
- SpamAssassin - это одна из самых известных программ по борьбе со спамом,
- ClamAV - антивирус, который в свою очередь применяются для обнаружения вирусов в почтовых сообщениях;
- Nginx, Apache - web server;
- Roundcube - пользовательский веб-интерфейс для почтовой системы;
- Awstats - анализатор лог-файлов для Nginx, Apache и Postfix;
- iRedAdmin - веб панель администратора;
- Fail2ban - программа для сканирования лог-файлов, находящихся (как правило) в каталоге /var/log/maillog и блокирующая те ip-адреса, с которых усматриваются признаки попыток подбора паролей к разнообразным службам;
Нам понадобятся:
Компоненты для работы почтового сервера.
- Домен - open-networks.ru;
- DNS Manager - возможность управления записями dns-сервера;
- Сервер - с виртуализацией OpenVZ или KVM или Single-board Computer;
- Дистрибутив - в моем случае Debian Bullseye;
FAQ:
- Which network ports are open by iRedMail [link];
- Setup DNS records for your iRedMail server (A, PTR, MX, SPF, DKIM) [link];
- Sign DKIM signature on outgoing emails for new mail domain [link];
- Locations of configuration and log files of major components [link];
- Change mail attachment size [link];
- Errors you may see while maintaining iRedMail server [link];
- iRedMail Easy: Best Practice [link];
- iRedMail release notes and upgrade tutorials [link];
- Fail2ban: Store banned IP addresses in SQL database [link];
- Manage iRedAPD (white/blacklists, greylisting, throttling and more) [link];
Установка:
Подготавливаем систему:
# apt update && apt upgrade
Проверяем дату и время:
При необходимости задаем правильный часовой пояс.
# date
# ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Настраиваем полное доменное имя (FQDN):
- Проверяем текщее значение FQDN:
# hostname --fqdn | hostname -f
- Задаем имя хоста:
# hostnamectl set-hostname mail
- Проверяем:
# cat /etc/hostname
- Задаем FQDN:
# nano /etc/hosts
127.0.0.1 localhost
#127.0.1.1 mail.open-networks.ru mail
[ip-address] mail.open-networks.ru mail
- Заверщающая проверка:
В выводе должно получится:
- mail.open-networks.ru
# hostname --fqdn | hostname -f
# hostname --ip-address
Установка:
Скрипт установщика скачиваем с оффициального сайта.
# wget -P /tmp https://github.com/iredmail/iRedMail/archive/1.4.2.tar.gz
# tar -zxf /tmp/iRedMail-1.4.2.tar.gz -C /tmp
# cd /tmp/iRedMail-1.4.2/
# bash iRedMail.sh
Основные этапы установщика:
- Каталог хранения базы - /var/vmail;
- Веб сервер - Nginx;
- База данных - MariaDB;
- Доменное имя почтового сервера - open-networks.ru;
- Дополнительные компоненты - | Roundcubemail | iRedAdmin | Fail2ban |.
В заключительном этапе соглашаемся на использование правил для nftables предоставляемых iRedMail.
* URLs of installed web applications:
- Roundcube webmail: https://mail.open-networks.ru/mail/
- Web admin panel (iRedAdmin): https://mail.open-networks.ru/iredadmin/
Скопируем файл основных настроек почтового сервера:
# cp iRedMail.tips /home/
Настраиваем MariaDB:
# mysql_secure_installation
Перезагружаем сервер:
# reboot
iRedAdmin:
Панель управления администратора.
Создаем нового пользователя:
Переходим в раздел Добавить -> Пользователь -> Добавить пользователя в open-networks.ru:
- Почтовый адрес * mtv@open-networks.ru;
- Квота ящика 512 MB;
- Предпочитаемый язык: Русский;
- Time zone: Europe/Moscow.
Процесс создания новой dkim подписи для добавленного домена. В нашем случае, все это сделано в автоматически в процессе установки.
Подготовка:
Добавляем необходимые записи для нового домена.
# nano /etc/amavis/conf.d/50-user
- Ищем:
CTRL+W "# Add dkim_key here."
- и добавляем:
dkim_key("open-networks.ru", "dkim", "/var/lib/dkim/open-networks.ru.pem");
- Ищем:
CTRL+W "@dkim_signature_options_bysender_maps"
- и добавляем:
"open-networks.ru" => { d => "open-networks.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
- или так, Use one DKIM key for all mail domains:
@dkim_signature_options_bysender_maps = ({
'.' => {d => 'open-networks.ru',
a => 'rsa-sha256',
c => 'relaxed/simple',
ttl => 30*24*3600 },
});
Amavisd-Genrsa:
Генерируем подпись и настраиваем права, пользователя и группу.
# rm /var/lib/dkim/open-networks.ru.pem
# amavisd-new genrsa /var/lib/dkim/open-networks.ru.pem 2048
- или так,
# amavisd-new -c /etc/amavis/conf.d/50-user genrsa /var/lib/dkim/open-networks.ru.pem 2048
- далее,
# chown amavis:amavis /var/lib/dkim/open-networks.ru.pem
# chmod 0400 /var/lib/dkim/open-networks.ru.pem
# /etc/init.d/amavis restart
Проверяем:
Нам понадобится значение "p=" Его мы вставим в DNS запись "dkim.domainkey.open-networks.ru."
# amavisd-new showkeys
dkim._domainkey.open-networks.ru. 3600 TXT ( "v=DKIM1; p="
# amavisd-new testkey
DNS Manager: [link]
Настройка DNS записей ( "A, PTR, MX, SPF, DKIM" )
Последовательность записей:
| Имя | TTL, сек | Тип | Значение |
A - Записи:
| open-networks.ru. | 3600 | A (адрес Internet v4) | IP-адрес |
| www.open-networks.ru. | 3600 | A (адрес Internet v4) | IP-адрес |
| mail.open-networks.ru. | 3600 - A (адрес Internet v4) | IP-адрес |
PTR - реверсная запись:
Прописывается на стороне провайдера, предоставившего IP-адрес.
- Для домена open-networks.ru c MX записью mail.open-networks.ru
| mail.open-networks.ru. | 3600 | PTR | IP-Address |
MX - записи почтового сервера:
| open-networks.ru. | 3600 | MX | mail.open-networks.ru. | priority= 10 |
| open-networks.ru. | 3600 | MX | mail.open-networks.ru. | priority= 20 |
SPF - запись:
| open-networks.ru. | 3600 | TXT | v=spf1 mx mx:open-networks.ru -all |
DKIM - запись:
| dkim._domainkey.open-networks.ru.| 3600 | TXT | v=DKIM1; k=rsa; s=email; p= |
ADSP - запись
| _adsp._domainkey.open-networks.ru. | 3600 | TXT | dkim=all |
| _dmarc.open-networks.ru.open-networks.ru. | 3600 | TXT | v=DMARC1; p=none |
Fail2ban + Nftables:
Настройка основного конфига F2B: fail2ban.local
Зададим время, после которого необходимо удалять баны из базы данных. Должно быть ">=" чем "bantime".
# nano /etc/fail2ban/fail2ban.local
[Definition]
dbpurgeage = 3w
Настройка конфига: jail.local
Если в течении 1 дня будет 3 неудачных попытки, то забанить на 2 недели.
# nano /etc/fail2ban/jail.local
findtime = 1d
bantime = 2w
maxretry = 3
# fail2ban-client reload
- Задаем действие для заблокированных IP в цепочке f2b-chain:
# nano /etc/fail2ban/action.d/nftables.conf
[Init]
blocktype = drop
# systemctl restart fail2ban.service
Проверка работы:
# systemctl status nftables.service
# systemctl status fail2ban.service
- nft:
# nft list ruleset
# nft list table inet f2b-table
- fail2ban: разблокировка ip-адреса fail2ban:
# fail2ban-client status
# fail2ban-client status postfix-pregreet
# fail2ban-client set postfix-pregreet unbanip 1.2.3.4 | banip - забанить
# fail2ban-client unban --all
- проверка regex:
# fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/postfix.iredmail.conf
Отключение ClamAV + SpamAssassin: [link]
Таким способом можно сократить использование RAM и CPU.
- Отключаем проверку на вирусы и спам, но оставляем подпись и проверку DKIM:
# nano /etc/amavis/conf.d/50-user
# controls running of anti-virus/spam code: 0 -> enabled, 1 -> disabled.
@bypass_virus_checks_maps = (1);
@bypass_spam_checks_maps = (1);
- Отключаем зауск служб:
# systemctl mask clamav-daemon clamav-freshclam
# systemctl disable --now clamav-daemon
# systemctl disable --now clamav-freshclam
Изменить размер прикрепляемого вложения:
При отправке письма из Roundcube.
- После сохранения фала настроек config.inc.php - именения применятся сразу;
# nano /opt/www/roundcubemail/config/config.inc.php
$config['max_message_size'] = '15M';
# nano /etc/php/7.4/fpm/php.ini
upload_max_filesize = 10M;
post_max_size = 12M;
# /etc/init.d/php7.4-fpm restart
Настройка dNAT на MikroTik:
Необходимые TCP порты для работы:
25 - Используется для связи между почтовыми серверами. Должен быть открыт, иначе вы не сможете получать электронную почту, отправленную другими почтовыми серверами.
143 - Используется конечными пользователями для получения электронной почты по протоколу IMAP.
587 - Используется конечными пользователями для отправки электронной почты SMTPS.
/ ip firewall nat add chain=dstnat protocol=tcp dst-port=25,143,587 in-interface-list=ISP action=dst-nat to-addresses=ip-address
Другие проекты:
OpenSource - Список почтовых серверов:
| Modoboa | MailCow | Mail-in-a-Box |