Привожу свою инструкцию по установке и дополнительной настройке #iRedMail на сервере. В статье много терминальных команд и автоматизации.
Экспорт переменных
- Экспортировать заранее подготовленные общие параметры в переменные окружения:
1
| export IRM_DOMAIN='mail.example.org'
|
Параметры
IRM_DOMAIN='mail.example.org' - домен почтового сервера.
Настройка ОС
- Добавить в файл
/etc/hosts строку 127.0.0.1 mail.example.org mail localhost localhost.localdomain:
1
| f='/etc/hosts'; hostnamectl hostname "${IRM_DOMAIN%%.*}" && cp "${f}" "${f}.orig" && sed -i '/^127\.0/d' "${f}" && sed -i "1i 127.0.0.1 ${IRM_DOMAIN} ${IRM_DOMAIN%%.*} localhost localhost.localdomain" "${f}"
|
Установка iRedMail
- Скачать и распаковать последнюю версию #iRedMail:
1
| export GH_NAME='iRedMail'; export GH_API="gh.api.${GH_NAME}.json"; export IRM_DIR="${HOME}/iRM.iRedMail.$( date '+%s' )"; mkdir "${IRM_DIR}" && cd "${IRM_DIR}" && curl -fsSL "https://api.github.com/repos/iredmail/${GH_NAME}/tags" | tee "${GH_API}" > '/dev/null'; url="$( grep '"tarball_url":' < "${GH_API}" | head -n 1 | awk -F '"' '{ print $(NF-1) }' )"; ver="$( echo "${url}" | awk -F '/' '{ print $(NF) }' )"; cid="$( grep '"sha":' < "${GH_API}" | head -n 1 | awk -F '"' '{ print $(NF-1) }' | head -c 7 )"; curl -fSLOJ "${url}" && tar -xzf ./*"${cid}.tar.gz" && mv ./*"${cid}" "${GH_NAME}-${ver}" && cd "${GH_NAME}-${ver}" && curl -fsSLo 'config' 'https://libsys.ru/ru/2026/02/8e0abf88-03dc-5327-b0b8-269f29cebb41/irm.config' || return
|
Если требуется конкретная версия iRedMail, то можно воспользоваться командой:
1
| v='1.7.2'; curl -fSLo "iRedMail-${v}.tar.gz" "https://github.com/iredmail/iRedMail/archive/refs/tags/${v}.tar.gz" && tar -xzf "iRedMail-${v}.tar.gz" && cd "iRedMail-${v}" || exit
|
- Создать файл
config (если не существует) в корневой директории #iRedMail со следующим шаблоном:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
| # -------------------------------------------------------------------------------------------------------------------- #
# GENERAL SETTINGS
# -------------------------------------------------------------------------------------------------------------------- #
# Default mail storage path.
export STORAGE_BASE_DIR='/var/vmail'
# Preferred web server.
export WEB_SERVER='NGINX'
# Preferred backend used to store mail accounts.
export BACKEND_ORIG='MARIADB'
export BACKEND='MYSQL'
# Password for MySQL administrator.
export MYSQL_ROOT_PASSWD='PASSWORD'
# First mail domain name.
export FIRST_DOMAIN='example.org'
# Password for the mail domain administrator.
export DOMAIN_ADMIN_PASSWD_PLAIN='PASSWORD'
# SoGo master password.
export SOGO_SIEVE_MASTER_PASSWD='PASSWORD'
# -------------------------------------------------------------------------------------------------------------------- #
# MLMMJADMIN SETTINGS
# mlmmjadmin is RESTful API server used to manage mlmmj (mailing list manager).
# Generate a long string as API auth token, it will be used by your API client:
# < '/dev/urandom' tr -dc 'a-zA-Z0-9' | head -c ${1:-96} | md5sum
# -------------------------------------------------------------------------------------------------------------------- #
export MLMMJADMIN_API_AUTH_TOKEN=''
# -------------------------------------------------------------------------------------------------------------------- #
# INSTALL APPS
# -------------------------------------------------------------------------------------------------------------------- #
export USE_IREDADMIN='YES'
export USE_ROUNDCUBE='YES'
export USE_FAIL2BAN='YES'
# -------------------------------------------------------------------------------------------------------------------- #
# DATABASE USERS
# -------------------------------------------------------------------------------------------------------------------- #
# Password for user 'amavisd'.
export AMAVISD_DB_PASSWD='PASSWORD'
# Password for user 'fail2ban'.
export FAIL2BAN_DB_PASSWD='PASSWORD'
# Password for user 'iredadmin'.
export IREDADMIN_DB_PASSWD='PASSWORD'
# Password for user 'iredapd'.
export IREDAPD_DB_PASSWD='PASSWORD'
# Password for user 'netdata'.
export NETDATA_DB_PASSWD='PASSWORD'
# Password for user 'roundcube'.
export RCM_DB_PASSWD='PASSWORD'
# Password for user 'sogo'.
export SOGO_DB_PASSWD='PASSWORD'
# Password for user 'vmailadmin'.
export VMAIL_DB_ADMIN_PASSWD='PASSWORD'
# Password for user 'vmail'.
export VMAIL_DB_BIND_PASSWD='PASSWORD'
#EOF
|
- Заполнить шаблон
config своими параметрами.
Для генерации паролей можно воспользоваться командой:
1
| u=('MYSQL_ROOT_PASSWD' 'DOMAIN_ADMIN_PASSWD_PLAIN' 'SOGO_SIEVE_MASTER_PASSWD' 'AMAVISD_DB_PASSWD' 'FAIL2BAN_DB_PASSWD' 'IREDADMIN_DB_PASSWD' 'IREDAPD_DB_PASSWD' 'NETDATA_DB_PASSWD' 'RCM_DB_PASSWD' 'SOGO_DB_PASSWD' 'VMAIL_DB_ADMIN_PASSWD' 'VMAIL_DB_BIND_PASSWD'); for i in "${u[@]}"; do printf "%-25s = %s\n" "${i}" "$( < '/dev/urandom' tr -dc 'a-zA-Z0-9' | head -c "${1:-32}"; echo; )"; done
|
В iRedMail v1.7.4 не работает скрипт fail2ban_banned_db. Исправление:
1
| sed -i 's|#!/usr/local/bin/bash|#!/usr/bin/env bash|g' '/usr/local/bin/fail2ban_banned_db'
|
Дополнительные настройки
В этом разделе собраны дополнительные настройки по различным сервисам #iRedMail.
Amavis
- Установка антивируса и утилит для работы с архивами:
1
| apt install --yes clamav libclamunrar && apt install --yes arj cabextract cpio lhasa lzop nomarch pax unrar unzip
|
- Удаление старого пакета
p7zip и установка нового 7zip:
1
| . '/etc/os-release' && apt purge --yes p7zip && apt install --yes -t "${VERSION_CODENAME}-backports" 7zip 7zip-rar
|
- Генерация DKIM записи (длина ключа
1024):
1
| f="/var/lib/dkim/${IRM_DOMAIN#*.}.1024.pem"; amavisd genrsa "${f}" 1024 && chown amavis:amavis "${f}" && chmod 0400 "${f}"
|
ClamAV
- Настройка российского зеркала обновлений #ClamAV:
1
| sed -i 's|ScriptedUpdates yes|ScriptedUpdates no|g' '/etc/clamav/freshclam.conf' && echo -e 'PrivateMirror https://mirror.sg.gs/clamav\nPrivateMirror https://clamav-mirror.ru\n' | tee -a '/etc/clamav/freshclam.conf' > '/dev/null' && rm -rf '/var/lib/clamav/freshclam.dat' && systemctl stop clamav-freshclam.service && freshclam -vvv && systemctl restart clamav-freshclam.service && systemctl restart clamav-daemon.service
|
Fangfrisch
Fangfrisch - это аналог утилиты ClamAV FreshClam. Он позволяет загружать файлы определений вирусов, которые не являются официальными файлами ClamAV, например, от SaneSecurity , URLhaus и других. Fangfrisch был разработан с учетом безопасности и может запускаться только от непривилегированного пользователя.
Установить и настроить Fangfrisch можно по инструкции ClamAV: Установка дополнительных баз данных.
Postfix: Postscreen
- В директиве
postscreen_dnsbl_threshold заменить 2 на 3. - В директиву
postscreen_dnsbl_sites добавить дополнительные спам-фильтры:
1
2
3
4
5
6
7
8
9
| psbl.surriel.com=127.0.0.2*2
dnsbl-3.uceprotect.net=127.0.0.2*2
all.spamrats.com=127.0.0.[2..43]*2
bl.mailspike.net=127.0.0.[2..13]*2
all.s5h.net=127.0.0.2*2
multi.surbl.org=127.0.0.[2..254]*1
list.dnswl.org=127.0.[0..255].1*-2
list.dnswl.org=127.0.[0..255].2*-10
list.dnswl.org=127.0.[0..255].3*-100
|