Run the following commands in terminal to install and configure iRedMail # set/verify the hostname sudo hostnamectl set-hostname nettools.i12bretro.local # update software repositories sudo apt update # install available software updates sudo apt upgrade # install prerequisites sudo apt install gzip # download iRedMail install scripts wget https://github.com/iredmail/iRedMail/archive/1.3.2.tar.gz # extract the archive sudo tar zxf ./1.3.2.tar.gz cd ./iRedMail* # make the install script executable sudo chmod +x ./iRedMail.sh # run the install script sudo ./iRedMail.sh
At the Welcome to iRedMail screen, select Yes > Press Enter
Enter the default /var/vmail/ for the location to store mailboxes > Press Enter
On the Backend selection screen, arrow down to MySQL > Press spacebar to select it > Press Enter
Enter the email domain name to be used > Press Enter
Enter a password for the mail administrator > Press Enter
Arrow down and select the optional components to install by press spacebar > Pres Enter
Review the installation summary > Type Y to accept > Press Enter
Wait for the installation to complete
Once completed, the optional software will be available at the following URLs
WARNING: THIS IS A BETA EDITION AND NOT ALWAYS STABLE, DO NOT TRY IT IN PRODUCTION (YET).
Source code is hosted on GitHub. Bug report, feedback, patches are always welcome.
Base image is Ubuntu 22.04 (jammy).
Dockerized iRedMail follows the Best Practice of iRedMail Easy platform.
2 tags are available:
iredmail/mariadb:stable: Stable version.
iredmail/mariadb:nightly: Triggered by EACH GitHub commit.
Quick start
Create a docker environment file used to store custom settings:
mkdir /iredmail # Create a new directory or use any directory # you prefer. `/iredmail/` is just an example
cd /iredmail
touch iredmail-docker.conf
echo HOSTNAME=mail.mydomain.com >> iredmail-docker.conf
echo FIRST_MAIL_DOMAIN=mydomain.com >> iredmail-docker.conf
echo FIRST_MAIL_DOMAIN_ADMIN_PASSWORD=my-secret-password >> iredmail-docker.conf
echo MLMMJADMIN_API_TOKEN=$(openssl rand -base64 32) >> iredmail-docker.conf
echo ROUNDCUBE_DES_KEY=$(openssl rand -base64 24) >> iredmail-docker.conf
Create required directories to store application data:
cd /iredmail
mkdir -p data/{backup-mysql,clamav,custom,imapsieve_copy,mailboxes,mlmmj,mlmmj-archive,mysql,sa_rules,ssl,postfix_queue}
On first run, it will generate a self-signed ssl cert, this may take a long time, please be patient.
Each time you run the container, few tasks will be ran:
Update SpamAssassin rules.
Update ClamAV virus signature database.
FIRST_MAIL_DOMAIN_ADMIN_PASSWORD is only set/reset on first run, not each run.
All SQL passwords are randomly set/reset by default each time you launch or relaunch the container. If you don’t like this, please set fixed passwords in iredmail-docker.conf, e.g. MYSQL_ROOT_PASSWORD=<your-password>.
Do not forget to setup DNS records for your server hostname and email domain names.
If you’re running Docker on Windows and macOS, container will fail to launch and you must switch to docker volumes as described below.
If you’re running Docker on Windows and macOS, or you just prefer storing persistent data in Docker volumes, please create required volumes:
Only one config file iredmail-docker.conf on Docker host.
This file is optional if you prefer overwriting parameters with the -e argument while launching container. For example:
docker run -e HOSTNAME=mail.mydomain.com -e FIRST_MAIL_DOMAIN=mydomain.com ...
We recommend storing them in an env file (iredmail-docker.conf in our example) to save some typing each time you launch the container.
Required parameters
There’re few REQUIRED parameters you MUST set in iredmail-docker.conf:
<div data-snippet-clipboard-copy-content="# Server hostname. Must be a FQDN. For example, mail.mydomain.com HOSTNAME=
# First mail domain name. For example, mydomain.com. FIRST_MAIL_DOMAIN=
# (Plain) password of mail user `postmaster@`. FIRST_MAIL_DOMAIN_ADMIN_PASSWORD=
# A secret token used for accessing mlmmjadmin API. MLMMJADMIN_API_TOKEN=
# The secret string used to encrypt/decrypt Roundcube session data. # Required if you need to run Roundcube webmail. # You can generate random string with command `openssl rand -base64 24` as the # des key. # Every time this key changed, all Roundcube session data becomes invalid and # users will be forced to re-login. ROUNDCUBE_DES_KEY=»>
# Server hostname. Must be a FQDN. For example, mail.mydomain.com
HOSTNAME=
# First mail domain name. For example, mydomain.com.
FIRST_MAIL_DOMAIN=
# (Plain) password of mail user `postmaster@<FIRST_MAIL_DOMAIN>`.
FIRST_MAIL_DOMAIN_ADMIN_PASSWORD=
# A secret token used for accessing mlmmjadmin API.
MLMMJADMIN_API_TOKEN=
# The secret string used to encrypt/decrypt Roundcube session data.
# Required if you need to run Roundcube webmail.
# You can generate random string with command `openssl rand -base64 24` as the
# des key.
# Every time this key changed, all Roundcube session data becomes invalid and
# users will be forced to re-login.
ROUNDCUBE_DES_KEY=
iredmail-docker.conf will be read by Docker as an environment file, any single quote or double quote will be treated as part of the value. Do not use any whitespace, tab in value, and no single or double quotes.
It will be imported as bash shell script too.
There’re many OPTIONAL settings defined in file /docker/entrypoints/settings.conf inside docker container, you’d like to change any of them, please write the same parameter name with your custom value in iredmail-docker.conf to override it.
Optional parameters
# Define your custom https port if you don't want to the default one (443).
PORT_HTTPS=4443
Hardware requirements
At least 4GB RAM is required for a low traffic production mail server.
Installed softwares
Postfix: SMTP server.
Dovecot: POP3/IMAP/LMTP/Sieve server, also offers SASL AUTH service for Postfix.
mlmmj: mailing list manager.
mlmmjadmin: RESTful API server used to manage (mlmmj) mailing lists.
Amavisd-new + ClamAV + SpamAssassin: anti-spam and anti-virus, DKIM signing and verification, etc.
iRedAPD: Postfix policy server. Developed by iRedMail team.
Fail2ban: scans log files and bans bad clients.
Roundcube: webmail.
iRedAdmin: web-based admin panel, open source edition.
You may want to check this tutorial to figure out the mapping of softwares and network ports.
Exposed network ports
80: HTTP
443: HTTPS
25: SMTP
465: SMTPS (SMTP over SSL)
587: SUBMISSION (SMTP over TLS)
143: IMAP over TLS
993: IMAP over SSL
110: POP3 over TLS
995: POP3 over SSL
4190: Managesieve service
Links
Check out the lightweight on-premises email archiving software developed by iRedMail team: [Spider Email Archiver](https://spiderd.io/).
It's recommended to use the new __iRedMail Easy__ deployment and support
platform to deploy and keep your mail server up to date, technical support
is available through the ticket system.
Read more: [iRedMail Easy - Meet our new deployment and support platform](./iredmail-easy.getting.start.html)
System Requirements
* iRedMail is designed to be deployed on a __FRESH__ server system, which means your server does __NOT__ have mail related components installed, e.g. MySQL, OpenLDAP, Postfix, Dovecot, Amavisd, etc. iRedMail will install and configure them for you automatically. Otherwise it may override your existing files/configurations although it will backup files before modifying, and it may not be working as expected.
* __Port 25 is required__ by mail server but many ISPs block it by default. Port 25 is used for communication between mail servers, __it must be open__, otherwise your mail server won't be able to receive and send emails. Please contact your ISP to make sure it's not blocked, or ask them to unblock it. - Linode. Explained in the [blog post](https://www.linode.com/blog/linode/a-new-policy-to-help-fight-spam/), you can open a support ticket to ask the Linode team to open it. If you [sign up to Linode with our reference](https://www.linode.com/?r=b4d04083428fb99ce452d84b57253d11692a0850), iRedMail Team's Linode account will receive a credit of $15-20.00. Thanks. - Amazon AWS EC2. Request to [remove the throttle on port 25](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-port-25-throttle/). - Google Cloud Platform. - Microsoft Azure. - DigitalOcean. According to [a post in their community](https://www.digitalocean.com/community/questions/port-25-465-is-blocked-how-can-i-enable-it), __SEEMS__ impossible to unblock port 25, that means you can __NOT__ run mail server on DigitalOcean VPS.
To install iRedMail on Debian or Ubuntu Linux, you need:
A FRESH, working Debian/Ubuntu Linux. Supported releases are listed on Download page.
At least 4 GB memory is required for a low traffic production mail server with spam/virus scanning enabled.
Make sure 3 UID/GID are not used by other user/group: 2000, 2001, 2002.
All binary packages will be installed from Debian/Ubuntu official apt repositories.
If you choose Ubuntu Linux, it’s recommended to use the latest Ubuntu LTS (Long Term Support) release for production use.
Set a fully qualified domain name (FQDN) hostname on your server
No matter your server is a testing machine or production server, it’s strongly recommended to set a fully qualified domain name (FQDN) hostname.
Enter command hostname -f to view the current hostname:
$ hostname -f
mx.example.com
On Debian/Ubuntu Linux, hostname is set in two files: /etc/hostname and /etc/hosts.
/etc/hostname: short hostname, not FQDN.
/etc/hosts: static table lookup for hostnames. Warning: Please list the FQDN hostname as first item.
# Part of file: /etc/hosts
127.0.0.1 mx.example.com mx localhost localhost.localdomain
Verify the FQDN hostname. If it wasn’t changed after updating above two files, please reboot server to make it work.
$ hostname -f
mx.example.com
Enable default official Debian/Ubuntu apt repositories
iRedMail needs official Debian/Ubuntu apt repositories, please enable them in /etc/apt/sources.list.
Install packages required by iRedMail installer:
sudo apt-get install gzip dialog
Download the latest release of iRedMail
Visit Download page to get the latest stable release of iRedMail.
Upload iRedMail to your mail server via ftp or scp or whatever method you can use, login to the server to install iRedMail. We assume you uploaded it to /root/iRedMail-x.y.z.tar.gz (replace x.y.z by the real version number).
Uncompress iRedMail tarball:
cd /root/
tar zxf iRedMail-x.y.z.tar.gz
Start iRedMail installer
It’s now ready to start iRedMail installer, it will ask you several simple questions, that’s all required to setup a full-featured mail server.
cd /root/iRedMail-x.y.z/
bash iRedMail.sh
Screenshots of installation:
Welcome and thanks for your use
Specify location to store all mailboxes. Default is /var/vmail/.
Choose backend used to store mail accounts. You can manage mail accounts with iRedAdmin, our web-based iRedMail admin panel.
There's no big difference between available backends, so
it's strongly recommended to choose the one you're familiar with for easier
management and maintenance after installation.
If you choose to store mail accounts in OpenLDAP, iRedMail installer will ask to set the LDAP suffix.
If you choose to store mail accounts in MySQL/MariaDB/PostgreSQL, iRedMail
installer will generate a random, strong password for you. You can find it
in file `iRedMail.tips`.
Add your first mail domain name
Set password of admin account of your first mail domain.
Choose optional components
__Which webmail should you choose?__ Roundcube or SOGo? - Roundcube is a fast and lightweight webmail, and webmail only. If all you need is a webmail to access mailbox and manage mail filters, then Roundcube is the best option. - SOGo offers webmail, calendar (CalDAV), contacts (CardDAV) and ActiveSync. If you need calendar and contacts support, also syncing them to mobile or PC mail client applications, then SOGo is the one to go. Note: If you have many ActiveSync clients, it requires a lot RAM. - It's ok to install both, but you can only manage mail filters with Roundcube in this case, because the filter rules generated by Roundcube and SOGo are not compatible. You can [force to enable it in SOGo](./why.no.sieve.support.in.sogo.html), but please inform end users and ask them to stick to one of them for managing mail filters.
After answered above questions, iRedMail installer will ask you to review and confirm to start installation. It will install and configure required packages automatically. Type y or Y and press Enter to start.
Important things you MUST know after installation
The weakest part of a mail server is user's weak password. Spammers don't
want to hack your server, they just want to send spam from your server.
Please __ALWAYS ALWAYS ALWAYS__ force users to use a strong password.
Read file /root/iRedMail-x.y.z/iRedMail.tips first, it contains:
URLs, usernames and passwords of web-based applications
Location of mail service related software configuration files. You can also check this tutorial instead: Locations of configuration and log files of major components.
Some other important and sensitive information
Setup DNS records for your mail server
How to configure your mail clients
Locations of configuration and log files of major components
It’s highly recommended to get a SSL cert to avoid annonying warning message in web browser or mail clients when accessing mailbox via HTTPS/IMAPS/POP3/SMTPS. Let’s Encrypt offers FREE SSL certificate. We have a document for you to use a SSL certificate.
If you’re running a busy mail server, we have some suggestions for better performance.
Access webmail and other web applications
After installation successfully completed, you can access web-based programs if you choose to install them. Replace your_server below by your real server hostname or IP address.
Roundcube webmail: https://your_server/mail/
SOGo Groupware: https://your_server/SOGo
Web admin panel (iRedAdmin): https://your_server/iredadmin/
Get technical support
В данном руководстве собраны шаги по обновлению почтового сервера iRedMail с версии 0.9.2 до актуальной на момент выхода статьи 0.9.5-1. Как оказалось соблюдать строгий порядок обновления не обязательно, и можно обновлять компоненты системы сразу перепрыгивая несколько промежуточных версий. В данной заметке, будем рассматривать версию сервера, где в качестве backend’а базы данных используется MySQL, а в качестве операционной системы Debian. Как показывает практика и уже более 4-х летний опыт использования данного сервера, данная связка (debian + mysql) требует наименьшего количества обновлений и соответственно отнимает гораздо меньше времени затрачиваемого админом на поддержание системы в актуальном состоянии. Поэтому, если вы собираетесь разворачивать сервер впервые, рекомендую использовать именно этот вариант.
На данный момент проект iRedMail продолжает активно развиваться, исправлены разные баги, в том числе и связанные с безопасностью, включена поддержка HSTS, вебсервера Nginx, баз данных MariaDB, опционально SOGo как cервера групповой работы (аналога Microsoft Exchange) с красивым веб-интерфейсом и др. плюшками. Одним словом, если вы ищите надежный и самое главное бесплатный вариант по организации почтовой системы и при этом не боитесь Linux, то данный вариант несомненно вам подойдет 🙂
Инструкции по обновлению предыдущей версии на новую обычно выкладываются по следующему адресу и довольно хорошо описаны, но на практике как это нередко случается, возникают нюансы. Вот об этом подробнее:
В самом начале откроем на редактирование текстовый файл где записан номер текущей версии сборки, меняем ее на последнюю.
nano /etc/iredmail-release
1) Обновление iRedAPD:
Выполняем последовательно шаги по обновлению iRedAPD:
cd /root
wget http://www.iredmail.org/yum/misc/iRedAPD-1.9.1.tar.bz2
tar xjf iRedAPD*.bz2
cd iRedAPD*/tools/
bash upgrade_iredapd.sh
Начиная с версии 0.9.3 функции по борьбе со спамом на основе серых списков (greylisting), которые ранее были возложены на PolicyD v2 (кодовое имя «cluebringer») теперь выполняет iRedAPD. Поэтому нам необходимо выполнить ряд шагов по переносу конфигурации с cluebringer на iRedAPD. Подробнее о новом функционале грейлистинга читаем здесь. Авторизуемся в MySQL и добавим в таблицу greylisting, базы iredapd несколько новых значений.
mysql -uroot -p
USE iredapd;
INSERT INTO greylisting (priority, sender, sender_priority, active) VALUES (0, '@.', 0, 1);
\q
Затем выполняем непосредственно шаги по миграции. Открываем последовательно следующие файлы скриптов (/opt/iredapd/tools/migrate_cluebringer_greylisting.py и /opt/iredapd/tools/migrate_cluebringer_throttle.py) на редактирование и задаем параметры подключения к mysql базе clubringer.
Параметры берем в /etc/cluebringer/cluebringer.conf
Открываем на редактирование фаил конфигурации postfix.
nano /etc/postfix/main.cf
и меняем значения триггеров: smtpd_recipient_restrictions и smtpd_end_of_data_restrictions на check_policy_service inet:127.0.0.1:7777 т.е. по сути порт с 10031 на 7777 с добавлением permit_mynetworks. В результате приводим к следующему виду:
service postfix-cluebringer stop && apt-get remove --purge postfix-cluebringer
Удаляем лишние каталоги:
rm -rf /usr/share/postfix-cluebringer-webui
Удаляем базу clubringer и пользователя cluebringer из mysql:
mysql -uroot -p
DROP DATABASE cluebringer;
DROP USER 'cluebringer'@'localhost';
\q
cd /root/
wget http://www.iredmail.org/yum/misc/iRedAdmin-0.6.3.tar.bz2
tar xjf iRedAdmin*.tar.bz2
cd iRedAdmin*/tools/
bash upgrade_iredadmin.sh
3) Обновление Roundcube.
Обновляем существующую сборку с версии 1.1.1 до 1.2.2.
cd /root
wget https://github.com/roundcube/roundcubemail/releases/download/1.2.2/roundcubemail-1.2.2-complete.tar.gz
tar xf roundcubemail*.tar.gz
cd roundcubemail*
bin/installto.sh /usr/share/apache2/roundcubemail-1.1.1
Нажимаем Yes. Если видим что:
This instance of Roundcube is up-to-date.
Have fun!
All done.
То процесс обновления прошел успешно.
Поправим имя директории roundcubemail на актуальную с правкой ярлыка (smlinks):
Добавляем в cron скрипт очистки sql базы roundcubemail:
4) Включаем поддержку HSTS — HTTP Strict Transport Security в Apache.
Данный механизм включает форсированное защищённое соединение через протокол HTTPS.
Для начала активируем модуль «header» командой:
Затем, открываем на редактирование файл /etc/apache2/sites-enabled/default-ssl Добавляем следующий код:
# Use HTTP Strict Transport Security to force client to use secure connections only.
# Reference:
# https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security
# Module mod_headers is required. 15768000 seconds = 6 months.
Header always set Strict-Transport-Security "max-age=15768000"
5) Вносим изменения в Dovecot:
Исправляем известные проблемы с неправильным оповещением локальных пользователей о превышением квоты. Открываем на редактирование файл /etc/dovecot/dovecot.conf и находим следующие строки:
Невозможность доставить письмо до системной учетной записи. Если речь идет о postmaster то на текущей сборке лично я не сталкивался с таким, но поверим разработчикам и внесем следующие изменения. Открываем на редактирование /etc/postfix/main.cf. Находим и удаляем следующие строки:
Оставим значение как есть (У меня в файле это 278 строка):
Затем закоментим или полностью удалим блоки:
Теперь открываем конфиг Postfix /etc/postfix/master.cf Раскомментируем строку:
# -o content_filter=smtp-amavis:[127.0.0.1]:10026
8) Изменения в Fail2ban:
Приводим конфиг /etc/fail2ban/filter.d/postfix.iredmail.conf к следующему виду:
[Definition]
failregex = \[<HOST>\]: SASL (PLAIN|LOGIN) authentication failed
reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
reject: RCPT from (.*)\[<HOST>\]:([0-9]{4,5}:)? 550
ignoreregex =
Добавление ssh портов в конфиг Fail2ban.
Я просто скопировал кусок кода из последней сборки iRedMail на своем тестовом сервере и получилось что нужно привести начальную часть конфига /etc/fail2ban/jail.conf к следующему виду:
Добавление новой колонки delete_date в SQL таблице vmail.deleted_mailboxes базы vmail;
mysql -uroot -p
USE vmail;
ALTER TABLE deleted_mailboxes ADD COLUMN delete_date DATE DEFAULT NULL;
CREATE INDEX idx_delete_date ON deleted_mailboxes (delete_date);
\q
PHP 5.5+ is required. Currently installed version is: 5.4.45-0+deb7u5
cd /tmp
cp -a /usr/share/phpmyadmin /tmp
cp /usr/share/phpmyadmin/config.inc.php /tmp
rm -rf /usr/share/phpmyadmin
wget https://files.phpmyadmin.net/phpMyAdmin/4.6.4/phpMyAdmin-4.6.4-all-languages.tar.bz2
tar xjf /tmp/phpMyAdmin-4.6.4-all-languages.tar.bz2 -C /usr/share
mv /usr/share/phpMyAdmin-4.6.4-all-languages /usr/share/phpmyadmin
cp /tmp/config.inc.php /usr/share/phpmyadmin
service apache2 restar
Обновление php до версии 5.5 (Debian 7 Wheezy);
Открываем на редактирование /etc/apt/sources.list и добавляем туда следующие строки:
deb http://packages.dotdeb.org wheezy-php55 all
Запускаем команду на обновление пакета php5:
apt-get update
apt-get install php5
Либо обновляем всю систему целиком:
apt-get update && upgrade
Проверить версию php после установки:
Сохраняем, перезапускаем вебсервер:
11) Обновление антивируса clamav:
Если возникает ошибка во время запуска freshclam, «ERROR: /var/log/clamav/freshclam.log is locked by another process» то делаем слудующее:
Прошло уже почти два года с момента последнего обновления почтового сервера iRedMail до версии 0.9.5-1. а значит имеет смысл актуализировать нашу почтовую систему до последней на момент выхода статьи версии — 0.9.7. Пошаговый процесс установки iRedMail (MySQL Backend) и различные проблемы возникающие в процессе обслуживания сервера описаны в главной статье. В текущей сборке произошли некоторые изменения по части безопасности таких компонентов как Postfix, Amavis, Fail2ban + небольшие правки по части интерфейса в том же Roundcube, iRedAPD.
Если ставить новую версию на новый сервер, не OpenLDAP, то можно заметить что в качестве СУБД, вместо MySQL теперь MarinaDB, что на самом деле, абсолютно не страшно, поскольку MarinaDB это клон MySQL с тем же набором команд и инструкций от тех же разработчиков, только более свободный и независимый 🙂
Итак приступим. Для начала обновим саму ось выполнив всем известный набор команд:
apt-get update && apt-get upgrade
aptitude update && aptitude upgrade
Если, что-то пошло не так. У меня например в начале обновления на моем Debian 7 (Wheezy) вылезло информационное окошко PostgreSQL (С чего это вдруг, ведь данный пакет в системе не установлен?!), где в конце для выхода предлагают нажать quit (q), но при нажатии данной клавиши ничего не происходит. Следовательно приходится прерывать процесс при помощи ctrl+c. А вот если обновлять систему при помощи aptitude то нажатие «q» отрабатывает корректно.
Теперь перейдем к обновлению основных компонентов сервера.
Меняем текущий номер версии iRedMail на последнюю, открыв на изменение файлик /etc/iredmail-release
1) Обновление iRedAPD:
cd /root
wget http://www.iredmail.org/yum/misc/iRedAPD-2.1.tar.bz2
tar xjf iRedAPD*.bz2
cd iRedAPD*/tools/
sh upgrade_iredapd.sh
Скрипт ругнулся на отсутствующий файлик .my.cnf, где записана инфа о подключении к MySQL-серверу. Дадим ему такой файлик и снова запустим скрипт: sh upgrade_iredapd.sh
Если видим в конце, что «Upgrade completed», то все ОК, переходим к следующему компоненту.
cd /root/
wget https://dl.iredmail.org/yum/misc/iRedAdmin-0.8.tar.bz2
tar xjf iRedAdmin*.tar.bz2
cd iRedAdmin*/tools/
shell upgrade_iredadmin.sh
3) Обновление Roundcube:
cd /root
wget https://dl.iredmail.org/yum/misc/roundcubemail-1.3.3-complete.tar.gz
tar xf roundcubemail*.tar.gz
cd roundcubemail*
bin/installto.sh /usr/share/apache2/roundcubemail-1.2.2
Нажимаем Yes. Если видим что:
This instance of Roundcube is up-to-date. Have fun! All done.
То процесс обновления прошел успешно.
Поправим имя директории roundcubemail на актуальную с правкой ярлыка (smlinks):
Открываем на редактирование cron (crontab -e -u root) и вставляем туда следующую строчку:
# Roundcube: Удаляем временные файлы.
# По умолчанию файлы хранятся два дня и контролируются в Roundcube параметром: $config['temp_dir_ttl']
2 2 * * * php /usr/share/apache2/roundcubemail/bin/gc.sh >/dev/null
Но тогда не понятно, если существует данный параметр и файлы хранятся два дня, то зачем задание в cron очищающие данную папку или они хранятся где-то еще?! Надо будет понаблюдать! К слову сказать у меня за последние 2 года использования таких файлов набралось аж 5 мб 🙂
4) Обновление Apache:
Исправляем уязвимость HTTProxy добавлением параметра в файл /etc/apache2/apache2.conf
RequestHeader unset Proxy early
Перезапускаем Apache командой:
Версия iRedMail-0.9.5-1 и более ранние позволяют доверенным клиентам (указанным в параметре mynetworks) отправлять электронную почту через порт 587 без проверки подлинности smtp, что недостаточно строго и может использоваться спамерами. Для того что бы сконфигурировать механизм отправки почты через 587 порт с проверкой подлинности smtp для всех пользователей, поменяем значения параметра smtpd_client_restrictions в файле /etc/postfix/master.cf.
Открываем master.cf. на редактирование и находим строки:
submission inet n - n - - smtpd.
-o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
Удаляем «permit_mynetworks». Должно получится:
submission inet n - n - - smtpd.
o smtpd_client_restrictions=permit_sasl_authenticated,reject
Так же в версии iRedMail-0.9.5-1 и более ранних не было поддержки безопасного соединения через TLS, что приводило к тому что другие серверы не могли передавать электронные сообщения через безопасное соединение. Добавим данную поддержку командой и обновим настройки postfix:
Одно неправильное или дополнительное ограничение в файле etc/postfix/helo_access.pcre. Убрать строку:
/(\d{1,3}[\.-]\d{1,3}[\.-]\d{1,3}[\.-]\d{1,3})/ REJECT ACCESS DENIED.
Your email was rejected because the sending mail server appears to be on a dynamic IP
address that should not be doing direct mail delivery (${1}
и поставить вместо нее следующее регулярное выражение:
^(\d{1,3}[\.-]\d{1,3}[\.-]\d{1,3}[\.-]\d{1,3})$/ REJECT ACCESS DENIED.
Your email was rejected because the sending mail server appears to be on a dynamic IP
address that should not be doing direct mail delivery (${1})
В моем файле ошибок нет, но такой строки тоже, поэтому просто добавил себе как доп. опцию.
5) Изменения в Amavis:
Добавлены новые правила фильтрации вложений по имени файла, расширению, а так же mime-заголовкам. К слову данная фича у меня уже была реализована изначально, смотрим первую статью, хотя кое что я все таки у себя подправил:
Улучшаем регулярные выражение фильтра Fail2ban, чтобы поймать больше спама POP3 / IMAP и добавляем правильный фильтр для файла журнала Dovecot:
cd /etc/fail2ban/filter.d/ rm -f dovecot.iredmail.conf roundcube.iredmail.conf wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/fail2ban/filter.d/dovecot.iredmail.conf wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/samples/fail2ban/filter.d/roundcube.iredmail.conf service fail2ban reload
7) Изменения в Awstat:
В iRedMail-0.9.5-1 и более ранних выпусках, Awstats была неправильно настроена и доступна без аутентификации. Что бы это исправить, открываем конфиг /etc/apache2/conf.d/awstats.conf на редактирование и добавляем две строки:
Require all granted
Require valid-user
8) Изменения в Dovecot:
Фиксим неправильный параметр logrotate для файла журнала Dovecot, из-за которого все файлы журнала Dovecot пусты, в ввиду отсутствия необходимых разрешений для открытия файлов журнала. Что бы поправить, открываем файл на редактирование и удаляем следующую сроку:
cd /tmp
cp -a /usr/share/phpmyadmin /tmp
cp /usr/share/phpmyadmin/config.inc.php /tmp
rm -rf /usr/share/phpmyadmin
wget https://files.phpmyadmin.net/phpMyAdmin/4.7.7/phpMyAdmin-4.7.7-all-languages.tar.gz
tar xf /tmp/phpMyAdmin-4.6.4-all-languages.tar.gz -C /usr/share
mv /usr/share/phpMyAdmin-4.6.4-all-languages /usr/share/phpmyadmin
cp /tmp/config.inc.php /usr/share/phpmyadmin
service apache2 restart
10) Изменения в MySQL:
Скорректируем значения (datetime) для некоторых столбцов SQL в базе данных «vmail»:
cd /tmp
cp -a /usr/share/phpmyadmin /tmp
cp /usr/share/phpmyadmin/config.inc.php /tmp
rm -rf /usr/share/phpmyadmin
wget https://files.phpmyadmin.net/phpMyAdmin/4.7.7/phpMyAdmin-4.7.7-all-languages.tar.gz
tar xf /tmp/phpMyAdmin-4.6.4-all-languages.tar.gz -C /usr/share
mv /usr/share/phpMyAdmin-4.6.4-all-languages /usr/share/phpmyadmin
cp /tmp/config.inc.php /usr/share/phpmyadmin
service apache2 restart
Добавим новые таблицы forwardings,
CREATE TABLE IF NOT EXISTS forwardings (
id BIGINT(20) UNSIGNED AUTO_INCREMENT,
address VARCHAR(255) NOT NULL DEFAULT '',
forwarding VARCHAR(255) NOT NULL DEFAULT '',
domain VARCHAR(255) NOT NULL DEFAULT '',
dest_domain VARCHAR(255) NOT NULL DEFAULT '',
is_list TINYINT(1) NOT NULL DEFAULT 0,
is_forwarding TINYINT(1) NOT NULL DEFAULT 0,
is_alias TINYINT(1) NOT NULL DEFAULT 0,
active TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (id),
UNIQUE INDEX (address, forwarding),
INDEX (domain),
INDEX (dest_domain),
INDEX (is_list),
INDEX (is_alias)
) ENGINE=InnoDB;
и alias_moderators в базу vmail (опционально):
mysql -uroot -p
use vmail;
CREATE TABLE IF NOT EXISTS alias_moderators (
id BIGINT(20) UNSIGNED AUTO_INCREMENT,
address VARCHAR(255) NOT NULL DEFAULT '',
moderator VARCHAR(255) NOT NULL DEFAULT '',
domain VARCHAR(255) NOT NULL DEFAULT '',
dest_domain VARCHAR(255) NOT NULL DEFAULT '',
PRIMARY KEY (id),
UNIQUE INDEX (address, moderator),
INDEX (domain),
INDEX (dest_domain)
) ENGINE=InnoDB;
Затем закачаем скрипт по миграции пользовательских аккаунтов и запустим его. Данный скрипт делает запрос к MySQL базе «vmail» и производит миграцию (копирование) почтовых акаунтов из основной таблицы mailbox в таблицу псевдонимов — alias:
cd /root/
wget https://bitbucket.org/zhb/iredmail/raw/default/iRedMail/tools/migrate_sql_alias_table.py
python migrate_sql_alias_table.py
Но миграция не происходит т.к. скрипт ругается на отсутствующие поля в таблице alias, а именно: islist, is_alias.
python migrate_sql_alias_table.py
* Read SQL username/password from iRedAdmin config file: /usr/share/apache2/iredadmin/settings.pyc
* Backend: mysql
Traceback (most recent call last):
File "migrate_sql_alias_table.py", line 65, in <module>
records = db.select('alias', what='address,goto,moderators,domain,active,islist,is_alias')
File "/usr/lib/python2.7/dist-packages/web/db.py", line 682, in select
return self.query(qout, processed=True)
File "/usr/lib/python2.7/dist-packages/web/db.py", line 644, in query
self._db_execute(db_cursor, sql_query)
File "/usr/lib/python2.7/dist-packages/web/db.py", line 587, in _db_execute
out = cur.execute(query, params)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 'islist' in 'field list'")
Почему данных полей у меня нет, сказать сложно, возможно версия старая или в предыдущих обновлениях что-то где-то не дописал. Тем не менее не сложно добавить эти поля вручную:
mysql -uroot -p
USE vmail;
ALTER TABLE `alias` ADD `islist` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `alias` ADD `is_alias` TINYINT(1) NOT NULL DEFAULT 0;
\q
И повторно запустить скрипт:
python migrate_sql_alias_table.py
И вуаля, надпись «Done», говорит о том, что миграция завершилась успешно.
И напоследок грохнем ранее созданные и неиспользуемые столбцы SQL в таблице alias, базе vmail:
mysql -uroot -p
USE vmail;
DELETE FROM alias WHERE islist <> 1;
DELETE FROM alias WHERE address=domain;
ALTER TABLE alias DROP COLUMN goto;
ALTER TABLE alias DROP COLUMN moderators;
ALTER TABLE alias DROP COLUMN islist;
ALTER TABLE alias DROP COLUMN is_alias;
\q
Как видим процесс обновления почтового сервера iRedMail, не самая простая и тривиальная задача, требующая внимательности и глубокого понимания работы всей системы в целом 🙂 Особенно актуально, когда после N-го количества обновлений по инструкции должен быть один результат, а у тебя может быть совершенно другой. Поэтому при выходе последующих новых версий я решил более не заниматься апгрейдом системы, а сразу переносить конфигурацию со старого сервера на новый, как это было ранее описано в заметке. Возможно так будет быстрее и точнее в плане соответствия конфигурации от разработчиков.
Установка iRedMail.
Заходим на официальный сайт, копируем ссылку для скачивания пакета (на текущий момент актуальной является версия 0.9.5–1), скачиваем и распаковываем его в папку /home/src и запускаем установщик.
# mkdir /home/src && cd /home/src # wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.5-1.tar.bz2 # tar xjf iRedMail-0.9.5-1.tar.bz2 && cd iRedMail-0.9.5-1 # bash iRedMail.sh
# mkdir /home/src && cd /home/src # wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.5-1.tar.bz2 --no-check-certificate # tar xjf iRedMail-0.9.5-1.tar.bz2 && cd iRedMail-0.9.5-1 # bash iRedMail.sh
Дальнейшая установка идентична, как для Debian, так и для FreeBSD (разве что для для FreeBSD времени для установку требуется на порядок больше ввиду того, что пакеты собираются из “портов”). Весь процесс настройки iRedMail производится по принципу “Next>Next>Next”:
Задаем папку, где будут хранится данные пользовательских почтовых ящиков (user mailboxes). По умолчанию: /var/mail
Выбираем, какой веб-сервер будет использоватьcя для доступа к почтовым web-интерфейсам: nginx, или apache. По умолчанию стоит nginx, но я выберу apache.
Задаем в каком виде будут храниться пользовательские почтовые аккаунты: OpenLDAP, базы данных MySQL, MariaDB, или PostgreSQL. Выбор не влечет за собой существенных различий с точки зрения использования почтового сервера, но, поскольку для работы web-сервера apache все равно потребуется MySQL, то выбираем её.
Далее указываем домен, который будет использоваться для почтового сервера: mail.domain.com
Указываем пароль для администратора почтового сервера postmaster@domain.com
И выбираем устанавливаемые компоненты:
iRedAdmin — web-интерфейс для администрирования почтового сервера);
Rouncubemail— пользовательский web-интерфейс для доступа к электронной почте;
SOGo — пользовательский web-интерфейс для доступа к электронной почте с календарем и адресной книгой (актуально, если вы планируете пользоваться почтой только через web-интерфейc);
AWstats — инструмент для анализа web, mail-логов и создания графических отчетов;
Fail2ban — пакет позволяющий блокировать IP-адреса при неудачной аутентификации (актуален, если почтовый сервер является интернет-шлюзом, или напрямую имеет доступ в интернет) При установке iRedMail на FreeBSD устанавливается и настраивается отдельно.
Оставляем все значения по умолчанию (выбрано все, кроме SOGo). После чего сверяем заданные параметры, подтверждаем их и ждем окончания установки. Отвечаем “Y”, чтобы добавить предоставленные iRedMail’ом правила фаервола (iptables) и аналогично подтверждаем его перезапуск с разрешенным для SSH портом 22.
Далее можно перезагрузить систему, или вручную запустить необходимые службы.
# service mysql restart # service postfix restart # service dovecot restart # /etc/init.d/clamav-daemon start
Eсли вы устанавливали apache:
# service apache2 restart
Если установлен nginx:
# service nginx restart
# cat /home/src/iRedMail-0.9.5–1/iRedMail.tips
На этом настройка почтового сервера (его серверной части) для Debian завершена. Eсли вы устанавливали iRedMail на FreeBSD по необходимости нужно отдельно установить и настроить fail2ban, а так же включить и сконфигурировать фаервол ip: скрипт iRedMail не содержит конфигураций для связки fail2ban + ip под FreeBSD. Сам по себе процесс довольно емкий и это тема для отдельной статьи.
Требования к серверу
ОЗУ: от 2 Гб, рекомендуется 4 Гб.
ОС: Ubuntu 20.04; Debian 11; CentOS Stream 8.
Установку необходимо выполнять на «чистый» сервер.
Установка на Debian / Ubuntu
1. Установить FQDN hostname для сервера.
FQDN — Fully Qualified Domain Name, имя домена, не имеющее неоднозначностей в определении. Включает в себя имена всех родительских доменов иерархии DNS.
Проверить текущее значение hostname вы можете командой:
hostname -f
Ответом может быть:
mx.example.com
Значение hostname устанавливается в файлах /etc/hostname и /etc/hosts. В /etc/hostname нужно прописать короткий hostname — при mx.example.com в качестве FQDN следует указать:
mx
В файле /etc/hosts указываем FQDN hostname первым в списке:
Повторно проверяем значение FQDN hostname командой:
hostname -f
Если значение mx.example.com не было получено, необходимо перезагрузить сервер.
2. Обновить Ubuntu:
apt-get update -y
3. Изменить имя хоста сервера на домен электронной почты.
4. Загрузить архив с актуальной версией iRedMail с сайта проекта.
5. Разархивировать полученный архив командой:
tar -xvzf 1.6.0.tar.gz
6. Перейти в каталог с файлами и запустить скрипт iRedMail.sh:
cd iRedMail-1.6.0 chmod +x iRedMail.sh ./iRedMail.sh
Далее запустится мастер установки, где будет возможность выбрать необходимые параметры либо оставить стандартные значения почтового сервера, а также установить дополнительное ПО в случае необходимости.
7. В первую очередь нужно согласиться с установкой:
8. Выбрать место хранения почтовых ящиков пользователей:
9. Выбрать бэкенд по своему усмотрению:
Если вы выбираете OpenLDAP, будет запрошен LDAP-суффикс:
При выборе MySQL, MariaDB или PostgreSQL будет создан надёжный пароль, который можно найти в файле /root/iRedMail-x.y.z/iRedMail.tips.
10. В следующем окне появится мастер установки доменного имени электронной почты. Помните, что вы не можете установить имя хоста сервера в качестве домена электронной почты:
11. Установить пароль для администратора:
12. Выбрать дополнительные компоненты:
13. Согласиться с предложенной для установки конфигурацией, введя y:
14. После завершения установки выполнить перезагрузку сервера.
После установки вся необходимая информация (пароли пользователей, пути к конфигурационным файлам) доступна в файле /root/iRedMail-x.y.z/iRedMail.tips.
Дополнительные компоненты будут доступны по следующим адресам:
Чтобы обновить сетевые настройки необходимо перезапустить службы:
# service netif restart && service routing restart
Для обновлении имени хоста:
# /etc/rc.d/hostname restart
или перезагрузить систему по команде reboot. Проверяем:
Если вы еще не производили обновление системы, то необходимо произвести следующие действия. Для начала обновим “дерево портов”:
# portsnap extract update # portsnap fetch update
Или, если по каким-то причинам дерево “портов” не было установлено, то предварительно ставим:
# portsnap fetch extract update
Теперь, если в дальнейшем вы предпочтете ставить пакеты с помощью package manager’а (для FreeBSD 10.x), а не из “портов”, то:
# cd /usr/ports/ports-mgmt/pkg # make # make install clean
Для установки iRedMail аналогично потребуются пакет wget. Можно собрать из “портов”:
# cd /usr/ports/ftp/wget # make install clean
и в открывающихся диалоговых окнах оставляем все параметры по умолчанию. Или ставим с помощью package manager’а (для FreeBSD 10.x):
# pkg install wget
Для FreeBSD 9 используйте команду:
# pkg_add -r wget
Так же для установки потребуется пакет bash-static. Собрать из “портов” можно:
# cd /usr/ports/shells/bash-static/ && make install clean
Все параметры оставляем по умолчанию. Или:
# pkg install bash-static
Обновляем данные об установленных пакетах командой:
Debian.
Для Debian настройки сети будут выглядеть следующим образом:
# nano /etc/network/interfaces# internet interface config auto eth1 iface eth1 inet static address 10.1.0.31 netmask 255.255.255.0 gateway 10.1.0.1 dns-nameservers 10.1.0.1# LAN interface config auto eth0 iface eth0 inet static address 192.168.1.1 netmask 255.255.255.0
Для того, чтобы внесенные настройки обновились:
# service networking restart
Теперь необходимо задать hostname. Для Debian/Ubuntu имя хоста (hostname) хранится в файлах: /etc/hostname и /etc/hosts. Открываем их на редактирование и конфигурируем почтовый сервер для домена domain.com:
Если имя хоста по прежнему не изменилось, то перезагружаем систему командой “reboot”.
Теперь когда произведены настройки сети необходимо обновить систему и установленные пакеты. Убедимся, что добавлены необходимые репозитории — для Debian Jessie конфиг будет выглядеть следующим образом:
# cat /etc/apt/sources.listdeb http://mirror.mephi.ru/debian/ jessie main deb-src http://mirror.mephi.ru/debian/ jessie maindeb http://security.debian.org/ jessie/updates main deb-src http://security.debian.org/ jessie/updates main# jessie-updates, previously known as 'volatile' deb http://mirror.mephi.ru/debian/ jessie-updates main deb-src http://mirror.mephi.ru/debian/ jessie-updates main
И производим обновления:
# apt-get update && apt-get dist-upgrade
# aptitude update && aptitude full-upgrade
Вероятно, в вашей системе могут быть не установлены требуемые пакеты, которые потребуются для установки iRedMail:
# apt-get install bzip2 wget
Установка на CentOS / RHEL
1. Установить FQDN hostname для сервера.
FQDN — Fully Qualified Domain Name, имя домена, не имеющее неоднозначностей в определении. Включает в себя имена всех родительских доменов иерархии DNS.
Проверить текущее значение hostname вы можете командой:
hostname -f
Ответом может быть:
mx.example.com
Значение hostname устанавливается в файлах /etc/hostname и /etc/hosts. В /etc/hostname нужно прописать короткий hostname — при mx.example.com в качестве FQDN следует указать:
mx
В файле /etc/hosts указываем FQDN hostname первым в списке: