ПОЧТОВЫЙ СЕРВЕР IREDMAIL

Редакция 2024

Обожаю такие продукты. Они как будто специально разработаны заботливыми людьми для самых маленьких и тупых. Я раньше думал, что почтовый сервер - это невероятно-сложная штука, как в Винде, так и в Linux. Теперь оказывается что его может установить практически любая обезьяна, причем весь процесс займет около пяти минут. Примечательно, я как-то ввставлял заказ на фрилансе на решение этой задачи на Odroid XU-4, а это было в довоенные времена, и там большинство ответивших чуваков хотели 2 килорубля. Уже не помню, почему, но тогда мне это показалось слишком много. Держу пари, они не учитывали того маленького нюанса, что на компьютерах с arm-архитектурой  iRedMail  не работает, однако, если вручную с нуля поднимать Postfix, Dovecot, fail2ban, Roundcube и прочие компоненты сервиса, то это, пожалуй, даже маловато. Теперь у меня таких проблем нет, мне повезло урвать по-дешевке несколько материнских плат intel nuc core i5  и похоже, что корейский одноплатник скоро отправится на покой.

 

Итак, приступим.

Во-первых, для работы с внешним миром, нам нужно правильно прописать DNS записи. В моем случае это выглядит так:

mail.madmentat.ru. 	A 	31.134.139.98
mail.madmentat.ru. 	MX 	10 mail.madmentat.ru.
mail.madmentat.ru. 	PTR 	31.134.139.98

Еще нужно подправить имя хоста, чтобы оно соответствовало опредеенному стандарту.

sudo nano /etc/hostname

mail

Еще надо подправить

sudo nano /etc/hosts

127.0.0.1 localhost
127.0.1.1 mail

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Здесь исходная строка "127.0.0.1 localhost" заменена на "127.0.0.1 mail.madmentat.ru mail localhost". Все что касается ipv6, можно нахуй удалить.

Теперь не помешает убедиться, что у нас хватит оперативки и объема файла подкачки.

sudo apt install htop

sudo htop

Если все оперативки больше 2 Гб и файл подкачки больше 1 Гб, тогда все ок. Для машины с 2-мя абонентами хватит. Однако для большего количества следует руководствоваться следующими рекомендциями:

Оперативная память:

  • Минимальный объем: 4 Гб для небольшого сервера с 100-200 абонентами.
  • Рекомендованный объем: 8 Гб для средних серверов с 500-1000 абонентами.
  • Для крупных серверов: Рекомендуется 16 Гб и выше, в зависимости от нагрузки.


Своп-файл:

  • Размер своп-файла: В идеале, размер своп-файла должен быть равен объему оперативной памяти или даже в 2 раза больше.

 

Кроме того, есть условная формула:

Объем оперативной памяти (Гб) = (количество абонентов / 100) *2

То есть,

Для 500 абонентов: (500 / 100) * 2 = 10 Гб
Для 1000 абонентов: (1000 / 100) * 2 = 20 Гб

О том, как настроить своп-файл, можно прочитать здесь.

 

Наконец, займемся непосредственно установкой iRedMail. На сегодня актуальная версия 1.7.1. И устанавливается она на самую свежую Убунту. То есть, 24.04 в нашем случае.

wget -O iRedMail-1.7.1.tar.gz https://github.com/iredmail/iRedMail/archive/refs/tags/1.7.1.tar.gz

Далее переходим в папку Downloads

cd ~/Downloads

tar -zxvf iRedMail-1.7.1.tar.gz

cd iRedMail-1.7.1

chmod +x iRedMail.sh

sudo ./iRedMail.sh

Имеем в виду, что для веб-морды нужен веб-сервер и тут главное не запутаться. Если вы собираетесь делать веб-морду на nginx, а на компе установлен, например, Апач, то Апач надо остановить или вовсе деинсталировать. Я лично предпочел установить iRedMail на отдельный комп, без всяких лишних сервисов, на nginx. В ходе установки особых сложностей возникнуть не должно, там все предельно ясно.

iredmail2

iredmail03

iredmail04

iredmail05

iredmail06

iredmail07

iredmail08

iredmail09

iredmail10

Чтобы лыжи поехали, надо пробросить порты и ребутнуться.

25, 110, 80

sudo reboot now

Затем мы можем войти в админку

https://mail.madmentat.ru/iredadmin

iredmail11

Интерфейс настолько прост, что в нем разберется даже самый тугой дурак. Тут можно добавить пользователей.

iredmail12

Веб-интерфейс расположен по адресу https://mail.madmentat.ru/mail

iredmail13

iredmail14

Еще добавлю, что тут по умолчанию какие-то сложности с паролем, требуется обязательное наличие специальных символов. Так-то оно и хорошо, но лично я не такой параноик и предпочел бы иметь в этом отношении побольше свободы. Поэтому лично у себя решил подправить конфиг.

Настройки по умолчанию хранятся в файле default-settings.py

sudo cat /opt/www/iredadmin/libs/default_settings.py | grep PASSWORD_HAS

PASSWORD_HAS_LETTER = True
PASSWORD_HAS_UPPERCASE = True
PASSWORD_HAS_NUMBER = True
PASSWORD_HAS_SPECIAL_CHAR = False

меняем "PASSWORD_HAS_SPECIAL_CHAR = True" на "PASSWORD_HAS_SPECIAL_CHAR = False"

sudo nano /opt/www/iredadmin/libs/default_settings.py

В конец файла добавим пару строк:

min_passwd_length = 3
max_passwd_length = 30

Теперь перезагрузим сервер.

sudo service uwsgi restart

sudo systemctl restart nginx

После установки iRedMail зачастую приходится поебать мозги с сертефикатам. Для этого мы обычно пользуемся услугами бесплатного сервиса Let's Encrypt. Для этого переходим в директорию "/etc/nginx/sites-enabled". Создаем там файл mail.conf

cd /etc/nginx/sites-enabled

sudo nano mail.conf

#
# Note: This file must be loaded before other virtual host config files,
#
# HTTPS
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    # Указываем server_name с нужными доменами
    server_name mail.madmentat.ru www.mail.madmentat.ru madmentat.ru www.madmentat.ru;

    root /var/www/html;
    index index.php index.html;

    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;
}

Далее устанавливаем cerbot

sudo apt install certbot python3-certbot-nginx

Запускаем скрипт:

sudo certbot --nginx -d mail.madmentat.ru -d www.mail.madmentat.ru

Далее на всякий случай перезагружаемся.

sudo reboot now

Ну вот и все! )