apt update && apt dist-upgrade -y && apt install mc vim curl htop -y && apt autoremove -y && timedatectl set-timezone Europe/Moscow
hostnamectl set-hostname mail.example.ru
FQDN должно стоять первым в файле, это важно.
nano /etc/hosts
127.0.0.1 mail.example.ru
Проверяем, что в системе отсутствует Apache и останавливаем его при наличии
systemctl stop apache2 && systemctl disable apache2
Добавляю отдельный диск для почты /dev/sdb
wipefs /dev/sdb -a
Разбиваю и форматирую
fdisk /dev/sdb
mkfs.ext4 /dev/sdb
Создаю каталог для монтирования
mkdir /var/vmail
Дописываю строку в конце файла /etc/fstab для автоматического монтирования
nano /etc/fstab
/dev/sdb /var/vmail ext4 defaults 1 2
Лучше подключать по UUID.
Проверяю, что ошибок нет
mount -a
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.7.1.tar.gz && \
tar -xzvf 1.7.1.tar.gz && cd iRedMail-1.7.1 && chmod +x iRedMail.sh && ./iRedMail.sh
Указываю для почты папку /var/vmail
Веб-сервер - NginX
БД - MariaDB
Вводим сложный пароль пользователя root для MariaDB, например 2REQoS2mm5S49cwuK
Имя домена example.ru
Пароль для пользователя
Далее в списке устанавливаемого я исключил RoundCube, можно выбрать всё )
На вопрос о FireWall отвечаем Y
Далее ребут и заходим по адресу https://IP-адрес_сервера/iredadmin/
Логин
Отключаю Graylisting:
chmod u+w /opt/iredapd/settings.py && nano /opt/iredapd/settings.py
Нахожу строку plugins = ["reject_null_sender", "reject_sender_login_mismatch", "greylisting", "throttle", "amavisd_wblist", "sql_alias_access_policy"] и вырезаю "greylisting"
chmod u-w /opt/iredapd/settings.py
nano /etc/clamav/freshclam.conf
Комментируем строки, которые начинаются на DatabaseMirror
#DatabaseMirror ...
#DatabaseMirror ...
Добавляем следующую строку:
PrivateMirror https://packages.microsoft.com/clamav/
Далее
systemctl stop clamav-freshclam && rm -f /var/lib/clamav/freshclam.dat && freshclam
Ждем окончания обновления, а затем запускаем службу clamav-freshclam и перезапускаем clamav-daemon, amavis:
systemctl start clamav-freshclam && systemctl restart clamav-daemon amavis
При установке скрипт генерирует DKIM 2048, но я бы рекомендовал перевыпуск в 1024, т.к. могут возникнуть проблемы у некоторых DNS-провайдеров.
Перевыпуск:
amavisd genrsa /var/lib/dkim/example.ru.pem 1024
Этой же командой можно выпустить для дополнительных доменов если у вас их на одном почтовике несколько, т.е.
amavisd genrsa /var/lib/dkim/example2.ru.pem 1024
amavisd genrsa /var/lib/dkim/example3.ru.pem 1024
.....
Присваиваем переменной DOMAIN значение имени вашего домена и назначаем права:
DOMAIN=example.ru && chown amavis:amavis /var/lib/dkim/$DOMAIN.pem && chmod 0400 /var/lib/dkim/$DOMAIN.pem
Далее открываем конфигурационный файл amavisd
nano /etc/amavis/conf.d/50-user
Находим строчку:
dkim_key('example.ru', "dkim", "/var/lib/dkim/example.ru.pem");
И добавляем радом с ней новые, если несколько доменов. Получится так:
....
dkim_key('example.ru', "dkim", "/var/lib/dkim/example.ru.pem");
dkim_key('example2.ru', "dkim", "/var/lib/dkim/example2.ru.pem");
....
Теперь находим строчку:
@dkim_signature_options_bysender_maps = ( {
...
"example.ru" => { d => "example.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
И также после нее добавляем новые. Должно получиться:
"example.ru" => { d => "example.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
"example.ru" => { d => "example2.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
"example.ru" => { d => "example3.ru", a => 'rsa-sha256', ttl => 10*24*3600 },
....
Далее
amavisd restart
Посмотреть новый ключ можно командой:
amavisd showkeys $DOMAIN
Следующим пунктом нам необходимо сделать записи на стороне регистратора домена:
MX 10 mail.example.ru.
mail.example.ru A ВНЕШНИЙ_IP-адрес
example.ru text = "v=spf1 a mx -all"
_dmarc.example.ru. 3600 IN TXT "v=DMARC1; p=quarantine; sp=none; pct=100; fo=0; rua=mailto:Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. "
dkim._domainkey.example.ru text = "v=DKIM1; p=MIGfMA0GCSqGSIb3GNADCBiQKBgQDHNu0ZlYkq.....paUwQIDAQAB"
Значение DKIM можно посмотреть командой:
amavisd showkeys
Когда обновятся DNS-записи необходимо проверить правильность DKIM командой:
amavisd testkeys
Вывод должен быть примерно таким:
dkim._domainkey.example.ru => pass
dkim._domainkey.example2.ru => pass
Удаляю всё из папки /etc/nginx/sites-enabled/ и создаю там файл для нашего почтовика:
nano /etc/nginx/sites-enabled/example.ru.conf
server {
listen 80;
listen [::]:80;
server_name mail.example.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mail.example.ru;
root /var/www/html;
index index.php index.html;
location ~ /.well-known {
root /usr/share/nginx/html;
allow all;
}
include /etc/nginx/templates/misc.tmpl;
include /etc/nginx/templates/ssl.tmpl;
include /etc/nginx/templates/iredadmin.tmpl;
include /etc/nginx/templates/roundcube.tmpl;
include /etc/nginx/templates/sogo.tmpl;
include /etc/nginx/templates/netdata.tmpl;
include /etc/nginx/templates/php-catchall.tmpl;
include /etc/nginx/templates/stub_status.tmpl;
}
Проверка корректности кофигурации NginX:
nginx -t
И если ошибок нет, то:
nginx -s reload
apt install -y certbot
DOMAIN=example.ru
certbot certonly --webroot --agree-tos --email postmaster@$DOMAIN --cert-name mail.$DOMAIN --webroot-path /usr/share/nginx/html/ -d mail.$DOMAIN
При успешном завершении команды удаляем старые сертификаты iRedAdmin:
rm -f /etc/ssl/private/iRedMail.key && rm -f /etc/ssl/certs/iRedMail.crt
И создаем симлинки на полученные:
ln -s /etc/letsencrypt/live/mail.$DOMAIN/fullchain.pem /etc/ssl/certs/iRedMail.crt && \
ln -s /etc/letsencrypt/live/mail.$DOMAIN/privkey.pem /etc/ssl/private/iRedMail.key
Перезапускаем службы nginx, postfix и dovecot:
systemctl reload nginx postfix dovecot
Для автоматического продления сертификата создаем в cron задачу:
crontab -e
Добавляем строку:
0 0 * * 1,4 /usr/bin/certbot renew --noninteractive
Также добавляем настройку для перезапуска сервисов после обновления сертификатов:
nano /etc/letsencrypt/cli.ini
deploy-hook = systemctl reload nginx postfix dovecot
apt update && apt dist-upgrade -y && apt autoremove -y
После апгрейда нужно добавить необходимый параметр в конфигурацию SoGo:
Найти параметр OCSAclURL в конфиге SOGo:
nano /etc/sogo/sogo.conf
Например будет выглядеть так:
OCSAclURL = "mysql://sogo:SOVtHQXsnYOb3CqnYe5sH52fiYTva@127.0.0.1:3306/sogo/sogo_acl";
Добавить новый параметр OCSAdminURL сразу после OCSAclURL с тем же значением, но заменив имя SQL-таблицы sogo_acl на sogo_admin:
OCSAclURL = "mysql://sogo:SOVtHQXsnYOb3CqnYe5sH52fiYTva@127.0.0.1:3306/sogo/sogo_acl";
OCSAdminURL = "mysql://sogo:SOVtHQXsnYOb3CqnYe5sH52fiYTva@127.0.0.1:3306/sogo/sogo_admin";
Сохраняем и рестартим SOGO:
systemctl restart sogo
Апгрейд mlmmjadmin до последней стабильной версии (3.3.0)
cd /root/ && wget https://github.com/iredmail/mlmmjadmin/archive/3.3.0.tar.gz && \
tar zxf 3.3.0.tar.gz && cd mlmmjadmin-3.3.0/tools/ && bash upgrade_mlmmjadmin.sh
Апгрейд iRedAPD (Postfix policy server) до последней стабильной версии (5.6.0)
cd /root && wget -O iRedAPD-5.6.0.tar.gz https://github.com/iredmail/iRedAPD/archive/5.6.0.tar.gz && \
tar zxf iRedAPD-5.6.0.tar.gz && cd iRedAPD-5.6.0/tools/ && bash upgrade_iredapd.sh
Апгрейд iRedAdmin (open source edition) до последней стабильной версии (2.6)
cd /usr/local/src/ && wget https://github.com/iredmail/iRedAdmin/archive/refs/tags/2.6.tar.gz && \
tar -zxf 2.6.tar.gz && cd iRedAdmin-2.6/tools/ && bash upgrade_iredadmin.sh
Отключаем многопоточную базу данных в ClamAV
echo 'ConcurrentDatabaseReload no' >> /etc/clamav/clamd.conf
Апгрейд netdata до последней стабильной версии (1.46.2)
wget https://github.com/netdata/netdata/releases/download/v1.47.1/netdata-latest.gz.run && \
chmod +x netdata-latest.gz.run && ./netdata-latest.gz.run --accept
Запрет отправки анонимной статистики.
Просто создаём пустой файл opt-out-from-anonymous-statistics в Debian/Ubuntu
touch /opt/netdata/etc/netdata/.opt-out-from-anonymous-statistics
Апдейт /etc/iredmail-release версии iRedMail
sed -i 's/1.6.8/1.7.1/' /etc/iredmail-release
Postfix:
postconf -e message_size_limit=104857600 && \
postconf -e mailbox_size_limit=104857600 && \
/etc/init.d/postfix restart
PHP
nano /etc/php/8.2/fpm/php.ini
memory_limit = 200M;
upload_max_filesize = 100M;
post_max_size = 100M;
Roundcube webmail
nano /opt/www/roundcubemail/config/config.inc.php
$config['max_message_size'] = '100M';
Nginx
nano /etc/nginx/conf-enabled/client_max_body_size.conf
client_max_body_size 100m;
nginx -t && nginx -s reload
SOGo
nano /etc/sogo/sogo.conf
WOMaxUploadSize = 102400;
SOGoMaximumMessageSizeLimit = 102400;
iRedAdmin
nano /etc/nginx/templates/iredadmin.tmpl
Здесь раскомментируем следующие строки
allow 127.0.0.1;
allow 192.168.1.10;
allow 192.168.1.0/24;
deny all;
сети после allow меняем на разрешенные или отдельные IP-адреса.
Например, это может выглядеть так
allow 127.0.0.1;
allow 192.168.0.0/16;
allow 10.0.0.0/8;
allow 172.16.0.0/12;
deny all;
Аналогично с netdata
nano /etc/nginx/templates/netdata.tmpl
добавляем в раздел location ~ /netdata/, но перед auth_basic "Authentication Required";
allow 127.0.0.1;
allow 192.168.0.0/16;
allow 10.0.0.0/8;
allow 172.16.0.0/12;
deny all;
nginx -t && nginx -s reload
Настройка workers в Sogo при проблемах с ActiveSync Outlook 2016+
nano /etc/sogo/sogo.conf
WOWorkersCount = 200;
WOWatchDogRequestTimeout = 20;
SxVMemLimit = 1024;
SOGoMaximumSyncWindowSize = 100;
SOGoMaximumSyncResponseSize = 4096;
SOGoInternalSyncInterval = 60;
SOGoLanguage = Russian;
SOGoTimeZone = "Europe/Moscow";
Эта настройка оверрайдит кол-во воркеров:
nano /etc/default/sogo
PREFORK=200
В процессе функционирования почтового сервера iRedMail, можно использовать белые и чёрные списки. В списки могут быть добавлены домены, поддомены, ip-адреса, либо отдельные почтовые аккаунты.
Просмотр содержимого белого и чёрного списков:
python3 /opt/iredapd/tools/wblist_admin.py --list --whitelist
python3 /opt/iredapd/tools/wblist_admin.py --list --blacklist
Команды добавления в белый и чёрный список:
python3 /opt/iredapd/tools/wblist_admin.py --add --whitelist @example.ru
python3 /opt/iredapd/tools/wblist_admin.py --add --blacklist @example.ru
Удаление из белого и чёрного списка:
python3 /opt/iredapd/tools/wblist_admin.py --delete --whitelist @example.ru
python3 /opt/iredapd/tools/wblist_admin.py --delete --blacklist @example.ru
Формат для блокировки/разблокировки доменов:
Не забудьте протестировать почтовый сервер после окончания настройки и устранить ошибки, при их наличии.
Тест можно провести на сайте https://www.mail-tester.com/
Если вы в процессе установки не снимали галочку, то в комплекте идёт чудесная панель мониторинга сервера. Доступна она по адресу:
https://mail.example.ru/netdata
Если при тестировании сервера вы получаете ошибку "SPF: HELO does not publish an SPF Record", то просто добавьте в "/etc/postfix/main.cf"
nano /etc/postfix/main.cf
строку:
smtp_helo_name = $mydomain
Для миграции почтовых ящиков с другого сервиса есть прекрасный скрипт, который полностью справляется с этой задачей.
Скачиваем:
cd ~ && wget -N https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync && chmod +x imapsync
Ставим зависимости:
apt install -y \
libauthen-ntlm-perl \
libcgi-pm-perl \
libcrypt-openssl-rsa-perl \
libdata-uniqid-perl \
libencode-imaputf7-perl \
libfile-copy-recursive-perl \
libfile-tail-perl \
libio-socket-inet6-perl \
libio-socket-ssl-perl \
libio-tee-perl \
libhtml-parser-perl \
libjson-webtoken-perl \
libmail-imapclient-perl \
libparse-recdescent-perl \
libproc-processtable-perl \
libmodule-scandeps-perl \
libreadonly-perl \
libregexp-common-perl \
libsys-meminfo-perl \
libterm-readkey-perl \
libtest-mockobject-perl \
libtest-pod-perl \
libunicode-string-perl \
liburi-perl \
libwww-perl \
libtest-nowarnings-perl \
libtest-deep-perl \
libtest-warn-perl \
make \
time \
cpanminus
В простейшем случае перенос ящика будет выглядеть так:
./imapsync --automap --nofoldersizes --nofoldersizesatend --keepalive1 --keepalive2 --exclude 'Spam|Trash' \
--host1 imap.yandex.ru \
--user1 Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. \
--password1 "Pa$$word1" \
--host2 mail.example.ru \
--user2 Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. \
--password2 "Pa$$word2"
Для пакетной миграции создаем 2 файла:
migrate.sh
{ while IFS=';' read u1 p1 u2 p2; do
imapsync --automap --nofoldersizes --nofoldersizesatend --keepalive1 --keepalive2 --exclude 'Spam|Trash' \
--host1 imap.yandex.ru --user1 "$u1" --password1 "$p1" \
--host2 mail.example.ru --user2 "$u2" --password2 "$p2"
done ; } < file.txt
file.txt
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ;YANDEX_PASSWORD_USER01;Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ;EXAMPLE_PASSWORD_USER01
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ;YANDEX_PASSWORD_USER02;Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript. ;EXAMPLE_PASSWORD_USER02
Присваиваем бит исполнения:
chmod +x migrate.sh
И запускаем процесс:
./migrate.sh
Для тестирования правльности реквизитов авторизации можно добавить ключ --justlogin
Будем использовать сгенерированный пароль приложений.
Чтобы создать пароль приложений без привязки номера, необходимо загрузить в админ панели список пользователей, которым нужно сгенерировать пароль. Потребуется создать CSV-файл. Ознакомиться с созданием CSV-файла можно по ссылке:
https://biz.mail.ru/docs/saas/WorkMail/Manage/users/index.html#csv
Для создания пароля приложения достаточно ввести 4 значения:
username: - название почтового ящика до @,
password: - пароль от почтового ящика,
password_up: - новый пароль от почтового ящика (можно указать текущий, чтобы пароль не изменился),
extpassname: - название приложения (можно указать любое).
Пример, как должна выглядеть таблица:
Для пользователей из списка будет сгенерирован пароль приложения, а им на электронную почту придет ссылка на страницу, где этот пароль можно получить. То есть, пользователям надо будет зайти в свой ящик и перейти по ссылке из письма с темой "Пользователю установлен пароль приложения".