Мои заметки Найденное в интернете и не только

Заметки

Установка и настройка почтового сервера

Устарело
Установка и настройка почтового сервера

В данной инструкции выполнена настройка полноценного почтового сервера на Linux Ubuntu Server (протестирована для версий 24.04). Список всех особенностей и возможностей:

  • Поддержка шифрования;
  • Хранение почты на сервере;
  • Защита от СПАМа и вирусов;
  • Почтовая система на базе Postfix;
  • Поддержка виртуальных доменов;
  • Хранение части настроек в MariaDB;
  • Доступ к почте с помощью веб-интерфейса (Roundcube);
  • Подключение к почтовым ящикам по POP3 и IMAP (Dovecot);
  • Возможность управления почтовыми ящиками с помощью PostfixAdmin.

Источники и дистрибутивы

Ubuntu Server 24.04

1. Подготовка системы

И так, данная инструкция написана под систему Linux Ubuntu Server. Предварительно, выполним следующие действия.

Общие настройки

Авторизируемся под администратором:

sudo -i

Обновляем систему:

apt update && apt upgrade -y

Задаем правильное имя серверу — это важный шаг, так как большинство антиспам систем выполняют проверки, обращаясь к серверу по имени в ожидании ответа:

hostnamectl set-hostname mail.alfafenix.ru

* необходимо указать FQDN-имя, которое будет доступно из глобальной сети. В данном примере указано mail.alfafenix.ru.

Устанавливаем пакет для синхронизации времени:

apt install chrony

Задаем временную зону (в данном примере Томское время):

timedatectl set-timezone Asia/Tomsk

* чтобы получить список всех возможных зон, вводим timedatectl list-timezones.

Разрешаем сервис для обновления времени:

systemctl enable chrony

Настройка безопасности

Заранее открываем порты на брандмауэре с помощью iptables:

iptables -I INPUT -p tcp --match multiport --dports 25,465,587 -j ACCEPT

iptables -I INPUT -p tcp --match multiport --dports 143,993 -j ACCEPT 

iptables -I INPUT -p tcp --match multiport --dports 80,443 -j ACCEPT

* где мы откроем следующие порты:

  • 25 — стандартный SMTP;
  • 143 — стандартный IMAP (незащищенный или через STARTTLS);
  • 465 — защищенный SMTP через SSL/TLS;
  • 587 — защищенный SMTP через STARTTLS;
  • 993 — защищенный IMAP через SSL/TLS;
  • 80 — HTTP для порталов Postfixadmin и Roundcube;
  • 443 — защищенный HTTPS для порталов Postfixadmin и Roundcube;
При необходимости, также можно открыть порты для pop3: (Нажми чтобы раскрыть блок)

iptables -I INPUT -p tcp --match multiport --dports 110,995 -j ACCEPT

* где:

  • 110 — стандартный POP3 (незащищенный или через STARTTLS);
  • 995 — защищенный POP3 через SSL/TLS.

Для сохранения правил установим пакет:

apt install iptables-persistent

И выполняем команду:

netfilter-persistent save

2. Настройка веб-сервера: NGINX + PHP + MariaDB

Система управления PostfixAdmin работает как веб-приложение, разработанное на PHP, а информацию хранит в базе данных. В нашем примере будет использоваться веб-сервер на NGINX, а база данных — MariaDB.

Установка NGINX

Устанавливаем nginx командой:

apt install nginx -y

Разрешаем автозапуск сервиса:

systemctl enable nginx

Проверяем работоспособность веб-сервера, обратившись к нему в браузере по адресу http://<IP-адрес сервера>. Если видим заголовок «Welcome to nginx!», NGINX настроен верно.

Image

PHP + PHP-FPM

Устанавливаем php и php-fpm:

apt install php php-fpm -y

* в данном примере будет установлена нативная версия php, например, для Ubuntu 20.04 это php 7.4, для Ubuntu 22.04 — 8.1, для Ubuntu 24.04 — 8.3. Если необходимо установить конкретную версию, смотрим инструкцию Установка разных версий PHP на Linux Ubuntu.

Посмотрим версию установленной php:

php -v

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

export PHP_VER=8.3

* где 8.3 — версия установленного в системе PHP.

Настраиваем NGINX:

vi /etc/nginx/sites-enabled/default

В разделах http - server указываем, чтобы первым индексным файлом был index.php, а также добавляем настройку для обработки запросов php (location):

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        ...

        index index.php ...
        ...

        location ~ \.php$ {
            set $root_path /var/www/html;
            fastcgi_pass unix:/run/php/php8.3-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param DOCUMENT_ROOT $root_path;
        }
}

* где /var/www/html — каталог для размещения данных nginx по умолчанию; /run/php/php8.3-fpm.sock — путь до сокет-файла php-fpm (обратите внимание, что точное значение зависит от используемой вервии php).

Разрешаем автозапуск php-fpm:

systemctl enable php${PHP_VER}-fpm

Перезапускаем nginx: 

nginx -t && nginx -s reload

Для проверки, создаем индексный файл в директории сайта со следующим содержимым:

vi /var/www/html/index.php

<?php phpinfo(); ?>

Открываем сайт в браузере по его IP-адресу. На открывшейся странице мы должны увидеть подробную информацию по php:

Image

* на странице будет версия PHP, которая соответствует установленному интерпретатору вашей системы.

MariaDB

Устанавливаем сервер баз данных следующей командой:

apt install mariadb-server -y

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

systemctl enable mariadb

Задаем пароль для пользователя sql root:

mysqladmin -u root password

3. Установка и настройка PostfixAdmin

Устанавливаем дополнительные компоненты для PHP:

apt install php-mysql php-mbstring php-imap -y

Если версия PHP отличается от встроенной в репозиторий системы, то используем команду: (Нажми чтобы раскрыть блок)

apt install php${PHP_VER}-mysql php${PHP_VER}-mbstring php${PHP_VER}-imap -y

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

systemctl restart php${PHP_VER}-fpm

Заходим на страницу релизов проекта PostfixAdmin в Github и смотрим последнюю версию программного обеспечения. На момент обновления инструкции это было 3.3.13. Для ее загрузки выполняем команду:

wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.13.tar.gz

В директории сайтов nginx создаем каталог для postfixadmin и распаковываем в него архив:

mkdir /var/www/html/postfixadmin

tar -C /var/www/html/postfixadmin -xf postfixadmin-*.tar.gz --strip-components 1

Создаем каталог templates_c внутри папки портала (без него не запустится установка):

mkdir /var/www/html/postfixadmin/templates_c

* в противном случае, при попытке зайти в панель управления после ее установки мы получим ошибку: ERROR: the templates_c directory doesn't exist or isn't writeable for the webserver.

Задаем права на каталог:

chown -R www-data:www-data /var/www/html/postfixadmin

* несмотря на то, что мы используем веб-сервер nginx, php-fpm по умолчанию, запускается от пользователя www-data.

Подключаемся к СУБД MySQL:

mysql -u root -p

Создаем базу данных postfix: 

CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* где postfix — имя базы.

Создаем учетную запись в mariadb и даем ей доступ к созданной базе:

CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfix123';

GRANT ALL ON postfix.* TO 'postfix'@'localhost';

* где postfix — имя учетной записи; postfix123 — пароль; localhost разрешает подключение только с локального сервера.

Если мы получим ошибку: (Нажми чтобы раскрыть блок)

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

... нужно сделать более сложный пароль (добавить большую букву и спецсимвол).

Выходим из командной оболочки MariaDB:

quit

Создаем конфигурационный файл postfixadmin:

vi /var/www/html/postfixadmin/config.local.php

* в предыдущих версиях использовался файл config.inc.php. В новых версиях его не рекомендуется править, а использовать config.local.php, который переопределяет настройки.

И добавляем следующее:

<?php

$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_password'] = 'postfix123';
$CONF['emailcheck_resolve_domain']='NO';

?>

* где configured говорит приложению, что администратор закончил его конфигурирование; 
default_language — используемый язык по умолчанию; 
database_password — пароль для базы данных, который мы задали на предыдущем шаге; 
emailcheck_resolve_domain — задает необходимость проверки домена при создании ящиков и псевдонимов.

Запускаем браузер и вводим адрес http://<IP-адрес сервера>/postfixadmin/public/setup.php — откроется страница для установки PostfixAdmin. 

Задаем дважды пароль установки и генерируем хэш, кликнув по Generate setup_password hash:

Image

После копируем хэш, который появится под кнопкой:

Image

Открываем конфигурационный файл:

vi /var/www/html/postfixadmin/config.local.php

И добавляем строчку:

<?php

$CONF['configured'] = true;
$CONF['default_language'] = 'ru';
$CONF['database_password'] = 'postfix123';
$CONF['emailcheck_resolve_domain']='NO';
$CONF['setup_password'] = '$2y$10$D...R32';

?>

* где '$2y$10$D...R32' — скопированный хэш.

Перезагружаем страницу http://<IP-адрес сервера>/postfixadmin/public/setup.php — теперь у нас появится форма для ввода нашего пароля, созданного на предыдущем этапе. Вводим его и кликаем по Login with setup_password:

Image

Будет выполнена установка PostfixAdmin.

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

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

Image

После установки в нижней части страницы должна быть форма добавления суперпользователя — вводим данные:

Image

* где Setup password — пароль, который мы ввели на предыдущей странице; 
Админ — учетная запись для входа в панель управления PostfixAdmin; 
Пароль — новый пароль для создаваемой учетной записи.

Пароль установки (Setup password) и пароль администратора (Пароль) должны отличаться. В противном случае, система не будет принимать последний.

Установка завершена. Переходим в браузере на страницу http://<IP-адрес сервера>/postfixadmin/public/login.php

Вводим логин и пароль для созданного пользователя. Мы должны войти в postfixadmin.

Получите бесплатную консультацию!

Please fill the required field.

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

г. Томск, Зеленые Горки

© 2019 JoomShaper, All Right Reserved