iRedMail: Установка

Привожу свою инструкцию по установке и дополнительной настройке #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}"
  • Перезагрузить систему:
1
shutdown -r now

Установка 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
  • Создать файл config (если не существует) в корневой директории #iRedMail со следующим шаблоном:
irm.config
 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 своими параметрами.
  • Запустить установку #iRedMail:
1
bash ./iRedMail.sh

Дополнительные настройки

В этом разделе собраны дополнительные настройки по различным сервисам #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