RedMail — это скрипт оболочки, который автоматически устанавливает и настраивает все необходимые компоненты почтового сервера на вашем сервере Linux, что само-собой исключает ручную установку и настройку.
Исходные требования:
Новые версии iRedMail не поддерживают интеграцию с PostfixAdmin. То есть установить iRedMail и поверх него PostfixAdmin не получится.
Настрой A запись, и, если VPS провайдер поддерживает IPv6, AAAA запись
A mail.your-domain.com IPv4-server
AAAA mail.your-domain.com IPv6-server
MX @ mail.your-domain.com 10
Залогиньтесь через SSH, а далее выполните:
apt update && apt upgrade -y
Установите FQDN — имя вашей системы:
hostnamectl set-hostname mail.your-domain.com
Отредактируем hosts-файл:
nano /etc/hosts
В файле редактируем:
127.0.0.1 mail.your-domain.com localhost
Проверим:
hostname -f
Заходим на сайт iRedMail и копируем ссылку на актуальную версию установщика.
На сервере выполняем
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz
Извлечем файлы из архива:
tar xvf 1.6.2.tar.gz
Перейдем в только что полученную папку:
cd iRedMail-1.6.2
Добавим права на исполнение и запустим скрипт:
chmod +x iRedMail.sh && bash iRedMail.sh
После выполнения вышеуказанных команд запустится мастер настройки, отвечаем на вопросы. Я отвечал так:
«YES», на первый вопрос.
На следующем экране вам будет предложено выбрать путь хранения почты. Используем тот, что указан по умолчанию — поэтому просто нажмите Enter.
По умолчанию выбран nginx. Просто нажмите «Enter».
Выбираем БД для хранения почты, я остановился на MariaDB.
Укажем пароль для root пользователя.
Затем введите свой первый почтовый домен.
Задайте пароль для администратора почтового домена.
Оставляем по умолчанию — 4 компонента.
Ответьте «YES» (сейчас и в дальнейшем), когда система спросить о том продолжать ли ей.
Перезагрузим систему:
shutdown -r now
После установки iRedMail сохраняет в своей папке файл iRedMail.tips в котором сохранены все пароли, крайне рекомендую создать копию файла в надежном месте, а из папки iRedMail его удалить.
Проверяй актуальную инструкцию по установке certbot на сайте https://certbot.eff.org
Устанавливаем snapd
sudo apt update
sudo apt install snapd
Обновляем snap
sudo snap install core; sudo snap refresh core
Если до этого устанавливался certbot из других источников - удаляем, пробуем выполнять
sudo apt-get remove certbot
sudo dnf remove certbot
sudo yum remove certbot
Устанавливаем certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Затем выполним запрос сертификата, где your-email-address указываем Email, где mail.your-domain.com указываем домен.
certbot certonly --webroot --agree-tos --email your-email-address -d mail.your-domain.com -w /var/www/html/
Откроем /etc/nginx/templates/ssl.tmpl
nano /etc/nginx/templates/ssl.tmpl
Найдем две строки:
ssl_certificate /etc/ssl/certs/iRedMail.crt;
ssl_certificate_key /etc/ssl/private/iRedMail.key;
Поменяем путь:
ssl_certificate /etc/letsencrypt/live/mail.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.your-domain.com/privkey.pem;
Сохраняем изменения. Затем проверим конфигурацию и перезапустим службу:
nginx -t
systemctl reload nginx
Открываем браузер и переходим в веб-интерфейс https://your-domain.com/iredadmin теперь он должен открываться без предупреждений.
Отредактируем конфигурационный файл Postfix
nano /etc/postfix/main.cf
Найдем строки (начиная с 95):
smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt
Исправим путь на:
smtpd_tls_key_file = /etc/letsencrypt/live/mail.your-domain.com/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.your-domain.com/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.your-domain.com/chain.pem
Сохраним файл и перезапустим Postfix:
systemctl reload postfix
Отредактируем конфигурационный файл Dovecot:
nano /etc/dovecot/dovecot.conf
Найдем строки (начиная с 47):
ssl_cert = </etc/ssl/certs/iRedMail.crt
ssl_key = </etc/ssl/private/iRedMail.key
Заменим:
ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem
Сохраним изменения и перезапустим службу:
systemctl reload dovecot
certbot может автоматически добавить задание на обновление сертификата, если это не произошло, поспользуйся инструкцией ниже
Для обновления сертификата, который мы сгенерировали ранее выполним команду:
certbot renew
А теперь автоматизируем этот процесс с помощью crontab:
crontab -e
В файл добавить
@daily certbot renew --quiet && systemctl reload postfix dovecot nginx
Чтобы ваши письма не помечались как спам, в популярных паблик сервисах эл. почты, вы должны установить PTRSPF, DKIMи DMARCзаписи.
PTR-запись сопоставляет IP-адрес вашего сервера с доменным именем, в случае если это не так, вероятнее всего ваши письма будут попадать в спам.
Чтобы проверить выполните следующую команду:
dig -x IP-address-VPS +short
В ответ вы должны получать адрес вашего поддомена:
mail.your-domain.com
Если это не так, необходимо указать этот адрес в настройках DNS вашего хостиг провайдера. Нужный вам пункт имеет имя «reverse DNS» или «Обратный DNS».
SPF (Sender Policy Framework) указывает, какие хосты или IP-адрес разрешены для отправки сообщений электронной почты от имени домена. Там должен быть указан только адрес вашего VPS.
Эта запись создается в настройках домена, в панели вашего регистратора.
Создайте там TXT-запись со следующим содержанием:
Record - TXT
Name - @
Value - v=spf1 mx ~all
TTL - 90 sec
DKIM (DomainKeys Identified Mail) использует закрытый ключ для подписи исходящих сообщений, отправленных с вашего домена. Получающие SMTP-серверы проверяют эту подпись с помощью открытого ключа, который публикуется в DNS-записи DKIM.
Скрипт iRedMail автоматически создает DKIM для вашего сервера. Единственное, что осталось сделать, это создать DKIM запись.
Быстрее всего выполнить команду:
amavisd-new showkeys
Либо перейдем в папку с распакованным архивом iRedMail. Откроем файл и скопируем открытый ключ:
cd ~/iRedMail-1.6.2
nano iRedMail.tips
Выполним поиск, либо сами найдите строку:
DNS record for DKIM support: копируем блок, который начинается на — «v=DKIM1; p=».
Теперь создадим еще одну запись в панели регистратора предварительно удалив все кавычки из только что скопированного блока текста.
Record type - TXT
Name - dkim._domainkey
Value - v=DKIM1; p= ваш ключ....
TTL - 90 sec
Проверим, что все правильно сделали:
amavisd-new testkeys
В ответ должны получить что-то вроде этого:
TESTING#1 your-doman-name.com: dkim._domainkey.your-doman-name.com => pass
DMARC запись отвечает за проверку подлинности отправителя.
В настройках регистратора создадим новую запись:
DNS record - TXT
Name - _dmarc
Value - v=DMARC1; p=none; pct=100; rua=mailto:dmarc-reports@your-domain.com
TTL - 5 min
После выполнения всех действий, которые указаны выше перейдем на сайт https://www.mail-tester.com. Скопируем адрес эл. почты, который сгенерирует для нас, затем отправим на него письмо, после чего увидим результат оценки нашего почтового сервера.
В Fail2ban по умолчанию активированы несколько шаблонов, которые должны защищать ваш сервер от всякого рода зловредов. Но может быть такое, что какой-то адрес был добавлен в списки блокировки, но вам бы этого не хотелось.
Посмотрим список заблокированных IP:
iptables -L -n
В случае, если надо разблокировать:
fail2ban-client unban ip-address
Устанавливаем PhpMyAdmin
apt -y install phpmyadmin
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
Создаем ссылку в директории web-сервера
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
Теперь phpmyadmin доступен по адресу https://mail.your-domain.com/phpmyadmin
Пригодится для саморегистрации и для создания пользователей из сторонних скриптов.
Пароли пользователей в БД хранятся в шифрованном виде, подробнее о типах шифрования описано в инструкциях iRedMail и Dovecot
Полезные скрипты - они генирируют SQL запросы
wget https://github.com/chernenkiyvy/iRedMail-scripts/archive/refs/heads/master.zip
unzip master.zip
chmod -x -R ~/iRedMail/iRedMail-scripts-master/Scripts/
cd ~/iRedMail/iRedMail-scripts-master/Scripts/
Для добавления пользователя подключись к БД vmail и выполни скрипт
INSERT INTO mailbox (username, password, name, storagebasedirectory,storagenode, maildir, quota, domain, active, passwordlastchange, created)
VALUES ('new_user@domain.com', '', 'new_user', '/var/vmail','vmail1', 'domain.com/t/e/s/new_user-ГГГГ.ММ.ДД.чч.мм.сс/', '1024', 'domain.com', '1', NOW(), NOW());
INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_forwarding)
VALUES ('new_user@domain.com', 'new_user@domain.com','domain.com', 'domain.com', 1);
Для установки пароля пользователя можно воспользоватся скриптом iRedMail
Переходим в папку скриптов iRedMail
cd /opt/www/iredadmin/tools/
Выполняем
python3 reset_user_password.py user@domain.com 'new_password'
Можно сгенирировать хэш, например в PHP, для SSHA512-CRYPT (Salted) будет выглядеть так
$password = "PlainTextPassword";
$salt = substr(sha1(rand()), 0, 16);
$hashedPassword = "{SSHA512}" . base64_encode(hash('sha512', $password . $salt, true) . $salt);
Больше примеров тут.
Важно: Обязательно измени соль на что-то с большей энтропийой, либо с другой функцией по желанию.
Проверить можно выполнив команду (подставь нужные значения).
doveadm pw -t 'HASHED Password From Function' -p $password
В бесплатной версии iRedAdmin нет возможности добавить пользователю алиас, но это можно сделать через SQL-запросы, для этого подключись к БД vmail и выполни скрипт
INSERT INTO alias (address, domain, active) VALUES ('alias@domain.com', 'domain.com', 1);
UPDATE domain SET aliases = aliases + 1 WHERE domain = 'domain.com';
INSERT INTO forwardings (address, forwarding, domain, dest_domain, is_list, active, is_forwarding, is_alias) VALUES ('alias@domain.com', 'user@domain.com', 'domain.com', 'domain.com', 0, 1, 1, 1);
Алиас можно создать и в другом домене, главное чтобы домен был добавлен на mail-сервер.
Это не обязательно, но с готовыми профилями проще ореинтироватся какие алиасы есть у ящика.
Для добавления профиля подключись к БД roundcubemail и выполни скрипт
INSERT INTO identities (user_id, email, name) VALUES (2, 'alias@domain.com', '');
По умолчанию отправлять почту пожно только с основного ящика (по которому пользователь авторизуется), чтобы дать возможность отправки почты с алиасов нужно разрешить это в iRedAPD и Postfix.
Открой файл конфигурации Postfix
nano /etc/postfix/main.cf
Удали из файла упоминания настройки reject_sender_login_mismatch
Открой файл настройки iRedAPD
nano /opt/iredapd/settings.py
Добавь в плагины (plugin) reject_sender_login_mismatch
Добавь в конце файла ALLOWED_LOGIN_MISMATCH_LIST_MEMBER = True
Перезагрузи iRedAPD и Postfix
systemctl restart iredapd
systemctl reload postfix
Подробная инструкция как произвести настройку Ubuntu для установки SOGo есть на сайте SOGo
Добавь репозитории SOGo
sudo wget -O- "http://pgp.mit.edu/pks/lookup?op=get&search=0xCB2D3A2AA0030E2C" | sudo gpg --dearmor | sudo apt-key add -
sudo wget -O- "https://keys.openpgp.org/vks/v1/by-fingerprint/74FFC6D72B925A34B5D356BDF8A27B36A6E2EAE9" | sudo gpg --dearmor | sudo apt-key add -
sudo apt-get update
Установи пакет для поддержки https в apt-get
sudo apt-get install apt-transport-https
Открой конфиг-файл iRedMail
cd ~/iRedMail-1.6.2
nano config
Добавь строчку (или измени значение)
export USE_SOGO='YES'
Проверь заполнены ли пароли, если нет, создай любые стойкие пароли и внеси в строчки
export SOGO_DB_PASSWD=
export SOGO_SIEVE_MASTER_PASSWD=
Запусти скрипт установки iRedMail
bash iRedMail.sh
При вопросе использовать найденый конфиг ответь y
[ INFO ] Checking configuration file: /root/iRedMail/iRedMail-1.6.2/config ... [FOUND]
< Question > Use it for mail server setting? [y|N]y
После выполнения скрипта конец вывода должен быть примерно таким
********************************************************************
* Start iRedMail Configurations
********************************************************************
< SKIP > Function: generate_ssl_keys.
[ INFO ] Create required system accounts.
< SKIP > Function: add_user_vmail.
< SKIP > Function: add_user_mlmmj.
< SKIP > Function: add_user_iredadmin.
< SKIP > Function: add_user_iredapd.
< SKIP > Function: add_user_netdata.
< SKIP > Function: mysql_setup.
< SKIP > Function: postfix_setup.
< SKIP > Function: dovecot_setup.
< SKIP > Function: web_server_config.
< SKIP > Function: mlmmj_config.
< SKIP > Function: mlmmjadmin_config.
< SKIP > Function: clamav_config.
< SKIP > Function: amavisd_config.
< SKIP > Function: sa_config.
< SKIP > Function: iredapd_setup.
< SKIP > Function: iredadmin_setup.
< SKIP > Function: rcm_setup.
[ INFO ] Configure SOGo Groupware (Webmail, Calendar, Address Book, ActiveSync).
< SKIP > Function: fail2ban_setup.
< SKIP > Function: netdata_setup.
< SKIP > Function: cleanup.
https://<server>/SOGo/dav/<full email address>В версии iRedMail 1.6.2 порт 465 (SMTP over SSL) по умолчанию был открыт.
При установке iRedMail он настраивает правила фильтрации через nftables. Посмотреть правила можно командой
nft list ruleset
Открыты только порты необходимые для работы iRedMail компонентов (список портов)
Если хочешь откртыть какой-то порт внеси его в конфиг файл /etc/nftables.conf, например для порта 6556 добавляем запись tcp dport 6556 accept следом за портами, которые прописал iRedMail.
Перезапускаем службу
systemctl restart nftables.service
На основе инструкций: