Придерживайтесь этого человека и самостоятельно разместите свой собственный почтовый сервер

Придерживайтесь этого человека и самостоятельно разместите свой собственный почтовый сервер

3 февраля 2023 г.

Для кого это

Автономный хостинг электронной почты для малых и средних компаний, владельцев бизнеса, некоммерческих организаций и частных лиц. Реальных ограничений для тех, кто может размещать самостоятельно, нет, но 2023">группы, заботящиеся о конфиденциальности, получат прямую выгоду и увидят немедленные результаты. Малые и средние компании получат полностью функционирующую систему, которая поддерживает все текущие протоколы шифрования и безопасности, особенно спецификацию PCI.

Зачем хостинг

Существует множество причин, по которым самостоятельный хостинг выгоден, вот некоторые из них:

* Конфиденциальность * Повышенная безопасность * Настройка * Снижение затрат

Конфиденциальность

Хостинг у основных известных провайдеров, на первый взгляд, бесплатный. Еще раз взглянув на их методы ведения бизнеса, вы поймете, что ничего бесплатного не бывает, поскольку ВЫ являетесь продуктом. Ваша информация анализируется, классифицируется, передается в ИИ, передается рекламодателям и другим третьим сторонам.

Повышенная безопасность

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

Настройка

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

Снижение затрат

Самостоятельный хостинг можно реализовать с помощью инструменты с открытым исходным кодом, огромная экономия по сравнению с коммерческими панелями управления и корпоративными решениями.

Предпосылки

  • Новый сервер, выделенный или виртуальный, с доступом в Интернет.
  • Распределение Linux на базе RHEL: Alma, Rocky, Oracle или Fedora Server
  • Корневой доступ

Имя хоста сервера

Убедитесь, что ваш сервер имеет полное доменное имя (FQDN), а в файле /etc/hosts IP-адрес сервера указывает на полное доменное имя, а не на короткое имя. Это требование для некоторых инструментов, таких как OpenDKIM, которые не будут работать без полного доменного имени.

Чтобы проверить, правильно ли настроено ваше полное доменное имя, выполните:

# hostname -f
server.example.tld

Если вы видите только имя сервера, а не полное доменное имя, используйте команду systemd hostnamectl, чтобы установить свое полное доменное имя:

# hostnamectl set-hostname server.example.tld

Шаг 1. Необходимые пакеты

Первый шаг — установить несколько базовых пакетов, используя менеджер пакетов:

dnf для новых версий EL8/EL9:

# dnf install php php-cli php-pdo php-mbstring epel-release unzip wget

ням для EL7:

# yum install php php-cli php-pdo php-mbstring epel-release unzip wget

для Fedora пакеты немного отличаются:

# dnf install php php-cli php-pdo php-mbstring unzip wget

Шаг 2. Установите Aetolos

На втором этапе мы установим панель управления виртуальным хостингом Aetolos, которая только генерирует файлы конфигурации и не вносит никаких других изменений в систему:

# wget -O /root/master.zip 'https://gitlab.com/noumenia/aetolos/-/archive/master/aetolos-master.zip'
# unzip /root/master.zip -d /root/
# mv /root/aetolos-master /root/aetolos
# rm -rf /root/master.zip

:::подсказка Последний код разработки можно загрузить из репозитория git:

git clone 'https://gitlab.com/noumenia/aetolos.git'

:::

Шаг 3. Включите службы

Теперь пришло время выбрать, какие услуги будет предоставлять сервер. Запустите Aetolos с параметром состояния, чтобы получить представление обо всех доступных службах:

# ~/aetolos/aetolos --status
+---------+--------------+---------+------------+--------------+
| Enabled | Module       | SystemD | Repository | Dependencies |
+---------+--------------+---------+------------+--------------+
| [ ]     | apache       |         |            |              |
| [ ]     | clamav       |         | epel       | postfix      |
| [ ]     | dehydrated   |         |            |              |
| [ ]     | dovecot      |         |            |              |
| [ ]     | haproxy      |         |            |              |
| [ ]     | mariadb      |         |            |              |
| [ ]     | mtasts       |         |            | apache       |
| [ ]     | nsd          |         | epel       |              |
| [ ]     | opendkim     |         | epel       | postfix      |
| [ ]     | opendmarc    |         | epel       | postfix      |
| [✓]     | php          |         |            |              |
| [ ]     | postfix      |         |            |              |
| [ ]     | postgrey     |         | epel       | postfix      |
| [ ]     | spamassassin |         |            | postfix      |
| [✓]     | virtualhost  |         |            |              |
+---------+--------------+---------+------------+--------------+

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

* Apache, веб-сервер для ответов на запросы ACME. * Dehydrated, bash-скрипт для сертификатов Let’s Encrypt * Dovecot, почтовый сервер POP3/IMAP * OpenDKIM, средство проверки и подписания DKIM * OpenDMARC, валидатор DMARC * Postfix, SMTP-сервер * Spamassassin, защита от спама

:::предупреждение Мы не будем включать ClamAV, поскольку для этого требуется не менее 4 ГБ памяти. Читатель может включить его в зависимости от ресурсов, доступных на сервере.

:::

Давайте включим эти службы с помощью Aetolos:

# ~/aetolos/aetolos --enable=apache
# ~/aetolos/aetolos --enable=dehydrated
# ~/aetolos/aetolos --enable=dovecot
# ~/aetolos/aetolos --enable=opendkim
# ~/aetolos/aetolos --enable=opendmarc
# ~/aetolos/aetolos --enable=postfix
# ~/aetolos/aetolos --enable=spamassassin

Теперь мы можем повторно запустить Aetolos с параметром состояния, чтобы увидеть следующую таблицу:

# ~/aetolos/aetolos --status
+---------+--------------+---------+------------+--------------+
| Enabled | Module       | SystemD | Repository | Dependencies |
+---------+--------------+---------+------------+--------------+
| [✓]     | apache       | dead    |            |              |
| [ ]     | clamav       |         | epel       | postfix      |
| [✓]     | dehydrated   |         |            |              |
| [✓]     | dovecot      | dead    |            |              |
| [ ]     | haproxy      |         |            |              |
| [ ]     | mariadb      |         |            |              |
| [ ]     | mtasts       |         |            | apache       |
| [ ]     | nsd          |         | epel       |              |
| [✓]     | opendkim     | dead    | epel       | postfix      |
| [✓]     | opendmarc    | dead    | epel       | postfix      |
| [✓]     | php          | dead    |            |              |
| [✓]     | postfix      | dead    |            |              |
| [ ]     | postgrey     |         | epel       | postfix      |
| [✓]     | spamassassin | dead    |            | postfix      |
| [✓]     | virtualhost  |         |            |              |
+---------+--------------+---------+------------+--------------+

Обратите внимание на столбец SystemD, в котором большинство служб показано как dead. Это не проблема, поскольку мы еще не настроили/не запустили эти службы.

Шаг 4. Настройка

Наконец, мы можем запустить программу установки Aetolos, чтобы установить необходимые пакеты RPM и сгенерировать все файлы конфигурации. Мы предпочитаем видеть подробный вывод с дополнительным параметром --verbose.

Вы заметите два предупреждения, первое предупреждение о обезвоженном скрипте, который говорит нам указать регистрационный адрес электронной почты для Let's Encrypt, а второе предупреждение о создании простого числа параметров DH, эта процедура занимает довольно много времени (10 минут на в среднем), поэтому, пожалуйста, найдите время, чтобы прочитать оставшуюся часть этой статьи и подготовиться к тому, что будет дальше.

# ~/aetolos/aetolos --verbose --setup
[DEBUG] Check running system
[DEBUG] Detected: AlmaLinux 8.7 (Stone Smilodon)
[DEBUG] Check system memory
[DEBUG] Detected: 460MiB
[DEBUG] Check CPU cores
[DEBUG] Detected: 2
[DEBUG] Check proxy
[DEBUG] Loading Aetolos configuration
[DEBUG] Starting operating system setup
[DEBUG] Checking repository dependencies
[DEBUG] Checking package dependencies
[DEBUG] Checking SELinux requirements
[DEBUG] SELinux: enable dovecot_home_etc_aetolos.pp
[DEBUG] SELinux: enable postfix_socket_clamav_aetolos.pp
[DEBUG] SELinux: enable spamd_resolv_aetolos.pp
[DEBUG] Checking certificate requirements
[DEBUG] Checking ACME client
[DEBUG] Downloading ACME client: dehydrated 0.7.1
[DEBUG] Installing ACME client under: /root/dehydrated/
[WARNING] ACME registration email set to: postmaster
[WARNING] Please change the ACME registration email by executing: '/root/aetolos/aetolos --verbose --module=dehydrated --registration-email=new-email'
[DEBUG] Checking module dependencies
[DEBUG] Save configuration: dehydrated
[DEBUG] Writing to file: /root/dehydrated/config
[DEBUG] Writing to file: /root/dehydrated/hook.sh
[DEBUG] Writing to file: /etc/pki/letsencrypt/domains.txt
[DEBUG] Writing to file: /etc/cron.daily/dehydrated.cron
[DEBUG] Save configuration: dovecot
[WARNING] Generating DH parameters. This is going to take a long time...
[DEBUG] Writing to file: /etc/dovecot/dovecot.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/10-auth.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/10-mail.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/10-master.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/10-ssl.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/15-lda.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/15-mailboxes.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/20-imap.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/20-pop3.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/90-acl.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/90-quota.conf
[DEBUG] Writing to file: /etc/dovecot/conf.d/auth-passwdfile.conf.ext
[DEBUG] Save configuration: opendkim
[DEBUG] Writing to file: /etc/sysconfig/opendkim
[DEBUG] Writing to file: /etc/opendkim.conf
[DEBUG] Save configuration: opendmarc
[DEBUG] Writing to file: /etc/cron.weekly/publicsuffix.cron
[DEBUG] Writing to file: /etc/opendmarc.conf
[DEBUG] Save configuration: php
[DEBUG] Writing to file: /etc/systemd/system/php-fpm.service.d/override.conf
[DEBUG] Writing to file: /etc/php.ini
[DEBUG] Writing to file: /etc/php.d/10-opcache.ini
[DEBUG] Save configuration: postfix
[DEBUG] Writing to file: /etc/postfix/virtual_mailbox_domains
[DEBUG] Writing to file: /etc/postfix/transport
[DEBUG] Writing to file: /etc/postfix/smtp_header_checks
[DEBUG] Writing to file: /etc/postfix/mime_header_checks
[DEBUG] Override template file: /root/aetolos/modules/el8/postfix/templates.d/maincf.tpl
[DEBUG] Writing to file: /etc/postfix/main.cf
[DEBUG] Writing to file: /etc/postfix/master.cf
[DEBUG] Save configuration: spamassassin
[DEBUG] Writing to file: /etc/mail/spamassassin/init.pre
[DEBUG] Writing to file: /etc/sysconfig/spamass-milter
[DEBUG] Writing to file: /etc/mail/spamassassin/local.cf
[DEBUG] Save configuration: virtualhost
[DEBUG] Writing to file: /etc/tmpfiles.d/hometmp.conf

В соответствии с предупреждением мы добавляем адрес электронной почты для Let’s Encrypt:

# ~/aetolos/aetolos --verbose --module=dehydrated --registration-email=postmaster@example.tld

Добавить виртуальные хосты

Теперь мы готовы добавить столько виртуальных хостов, сколько захотим (или столько, сколько может обработать сервер). Прежде чем запускать какие-либо команды, мы можем подумать, какие виртуальные хосты будут иметь субдомен префикса, иногда у нас может быть домен, такой как example.tld, с субдоменом www (www.example.tld), в других случаях мы можем не захотеть используйте префикс, потому что нам нужны адреса электронной почты только в верхнем домене (user@example.tld, а не user@www.example.tld).

В качестве примера добавим три виртуальных хоста, два из них без субдомена:

# ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example1.tld --no-prefix
[DEBUG] Verify domain: example1.tld
[DEBUG] Add virtual host: example1.tld
# ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example2.tld --no-prefix
[DEBUG] Verify domain: example2.tld
[DEBUG] Add virtual host: example2.tld
# ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example3.tld
[DEBUG] Verify domain: example3.tld
[DEBUG] Add virtual host: example3.tld

Теперь мы можем перечислить все виртуальные хосты:

# ~/aetolos/aetolos --module=virtualhost --list-virtualhosts
+----+---------------------+--------------+-------------+----------------+--------+--------------+
| ID | Timestamp           | Virtual host | System user | MariaDB prefix | Parked | Prefix alias |
+----+---------------------+--------------+-------------+----------------+--------+--------------+
| 1  | 2023-01-10 08:51:36 | example1.tld | example1tld | example1       | [ ]    |              |
| 2  | 2023-01-10 08:51:40 | example2.tld | example2tld | example2       | [ ]    |              |
| 3  | 2023-01-10 08:51:45 | example3.tld | example3tld | example3       | [ ]    | www          |
+----+---------------------+--------------+-------------+----------------+--------+--------------+

Каждый виртуальный хост будет «жить» изолированно в своем собственном домашнем каталоге со своим собственным пользователем/группой, поэтому давайте взглянем на наш /home:

# ls -la /home
total 0
drwxr-xr-x.  5 root        root         63 Jan 20 10:51 .
dr-xr-xr-x. 17 root        root        224 Dec 21  2021 ..
drwx--x--x.  8 example1tld example1tld 159 Jan 10 08:51 example1tld
drwx--x--x.  8 example2tld example2tld 159 Jan 10 08:51 example2tld
drwx--x--x.  8 example3tld example3tld 159 Jan 10 08:51 example3tld

Настройка

После внесения изменений с помощью команды Aetolos нам необходимо создать новые файлы конфигурации для всех соответствующих служб (Apache, Dovecot, Postfix и т. д.). Таким образом, мы выполняем настройку Aetolos в последний раз.

# ~/aetolos/aetolos --setup

Сертификаты TLS

На этом этапе все службы будут использовать один и тот же самозаверяющий сертификат, поэтому сейчас самое время выполнить обезвоживание вручную, чтобы собрать все сертификаты виртуального хоста. Поскольку Aetolos использует протокол ACME с проверкой домена через HTTP-порт 80, мы сначала запускаем наш сервер Apache для обслуживания этих запросов.

# systemctl start httpd
# ~/dehydrated/dehydrated --cron --config /root/dehydrated/config --keep-going
# systemctl stop httpd
# ~/aetolos/aetolos --setup

Услуги

Теперь мы можем включить и запустить все службы.

# systemctl --now enable httpd httpd@example1.tld httpd@example2.tld httpd@example3.tld dovecot opendkim opendmarc postfix spamassassin
Created symlink /etc/systemd/system/multi-user.target.wants/httpd@example1.tld.service → /usr/lib/systemd/system/httpd@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/httpd@example2.tld.service → /usr/lib/systemd/system/httpd@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/httpd@example3.tld.service → /usr/lib/systemd/system/httpd@.service.

Вы заметите, что у каждого виртуального хоста есть собственная служба Apache. Эта функция предоставляется systemd и позволяет нам определять виртуальные хосты как отдельные службы systemd. Параметр --now запустит все службы.

Настройка DNS

Для оптимальной доставки нам необходимо настроить как минимум записи SPF и DKIM. При желании мы также можем настроить DMARC. Хотя настройка этих записей TXT выходит за рамки данного руководства, следует отметить, что ключ DKIM хранится в папке /etc/opendkim/keys/default.txt. У Aetolos есть вики-страницы с дополнительной помощью:

Управление адресами электронной почты

Добавить новый адрес электронной почты

Сначала создайте текстовый файл с паролем. В целях безопасности лучше не передавать пароль в качестве параметра командной строки. Затем добавьте новый адрес электронной почты, при необходимости установите квоту в байтах:

# ~/aetolos/aetolos --module=dovecot --virtualhost=example1.tld --add-email=sales --password-file='password.txt' --quota=5000000000

Изменить пароль

Чтобы изменить пароль существующего адреса электронной почты, достаточно просто:

~/aetolos/aetolos --module=dovecot --virtualhost=example1.tld --modify-email=sales --password-file='password.txt'

Изменить квоту

Чтобы изменить квоту, используйте любое значение больше нуля в байтах, а нулевое значение удалит ограничение квоты:

~/aetolos/aetolos --module=dovecot --virtualhost=example1.tld --modify-email=sales --quota=0

Удалить электронную почту

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

~/aetolos/aetolos --module=dovecot --virtualhost=example1.tld --remove-email=info

Список адресов электронной почты

Можно вывести список всех адресов электронной почты, связанных с виртуальным хостом:

# ~/aetolos/aetolos --module=dovecot --virtualhost=example1.tld --list-emails
+-------+-------+-------+----------------------+
| Email | Quota | Usage | Last password change |
+-------+-------+-------+----------------------+
| sales | 0     |       | 10/10/23             |
+-------+-------+-------+----------------------+

Архитектура

Следует особо упомянуть об архитектуре, используемой для хранения электронных писем в dovecot. Из соображений безопасности каждый виртуальный хост изолирован внутри учетных записей unix, хранящихся в собственном каталоге /home. Учетные записи электронной почты и их пароли находятся в подкаталоге etc, а почта хранится в подкаталоге mail.

/home/example1tld                               -> virtual host home
/home/example1tld/etc                           -> virtual host + parked domains
/home/example1tld/etc/example1.tld/forwarders   -> forwarder addresses
/home/example1tld/etc/example1.tld/passwd       -> email addresses
/home/example1tld/etc/example1.tld/shadow       -> passwords
/home/example1tld/mail/example1.tld             -> email storage

Этолос

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

Кредиты

Фото статьи Мануэля Гайссингера с сайта pexels


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE