Почтовый linux-сервер
Установка и настройка почтового сервера.
Описание
Документ описывает установку и настройку почтового сервера со следующими компонентами:
- Postfix - отвечает за отправку сообщений по протоколу SMTP
- Dovecot - предоставляет доступ для пользователей к почте по протоколу IMAP и отвечает за авторизацию
- Spamassassin - спам-фильтр
- Postfix Admin - web-интерфейс для управления учетными данными пользователей
- Roundcube - почтовый web-клиент
- Nginx, PHP, Mysql - компоненты для обеспечения работы веб-интерфейсов и хранения учетных данных.
Определения
В данной документации используется последняя LTS-версия Ubuntu - 16.04
Для обозначений переменных условимся, что:
example.com - домен, почту которого мы будем обрабатывать
mail.example.com - имя сервера, на котором производится настройка
172.32.254.2 - ip-адрес сервера, на котором производится настройка.
Базовая настройка
Поскольку стандратная установка Ubuntu подразумевает работу от пользователя и выполнение команд, требующих root-прав, через sudo, то, чтобы не вводить ее перед каждой командой, запустите команду sudo один раз с параметром -s,
~$ sudo -s ~#
Необходимо установить корректное имя сервера, для этого запишем его в соответствующий файл
echo "mail.example.com" > /etc/hostname hostname `cat /etc/hostname`
Так же необходимо указать имя и ip-адрес сервера в файле /etc/hosts
172.32.254.2 mail.example.com mail
Далее сгенерируем SSL-сертификаты сервера с новым доменным именем
apt-get install -y ssl-cert make-ssl-cert generate-default-snakeoil --force-overwrite
Если у вас нет приобретенных сертификатов для вашего домена, вы можете, например, получить сертификаты в сервисе Let's Encrypt
Создадим ключ Диффи-Хелмана
openssl dhparam -out /etc/ssl/private/dhparams.pem 2048 chmod 600 /etc/ssl/private/dhparams.pem
Веб-сервер
Установим Web-сервер - nginx, php, mysql.
apt-get install nginx php7.0 php7.0-cli php7.0-fpm php7.0-mysql \
php7.0-curl php7.0-gd php7.0-gmp php7.0-imap php7.0-intl php7.0-json \
php7.0-mcrypt php7.0-readline php7.0-sqlite3 php7.0-xml php7.0-xsl \
php7.0-mbstring php7.0-zip mysql-server
Другие необходимые пакеты установятся по зависимостям. В процессе установки вам будет предложено установить пароль root-пользователя в БД MySql. Установите его и надежно сохраните.
Создадим файл конфигурации для нашего домена в web-сервере Nginx
Каталог, в котором мы разместим файлы сайта - /var/www/mail.example.com/. Создайте его
mkdir /var/www/mail.example.com/
Вы можете выполнить команду nano -w /etc/apache2/sites-available/010-mail.example.com.conf для открытия пустого файла и вставить в него нижеприведенную конфигурацию.
Не забудьте верно указать пути к вашим SSL-сертификатам
- /etc/nginx/sites-available/mail.example.com
# http всегда будет переадресовываться на https. server { listen 80; server_name mail.example.com; rewrite ^ https://$server_name$request_uri? permanent; } server { listen 443 ssl; server_name mail.example.com; root /var/www/mail.example.com; ssl on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # Путь до файла с SSL-сертификатом ssl_certificate /etc/ssl/mail_example_com.crt; # Путь до файла с закрытым ключем ssl_certificate_key /etc/ssl/mail_example_com.key; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; keepalive_timeout 70; client_max_body_size 10G; fastcgi_buffers 64 4K; gzip off; index index.php; location / { try_files $uri $uri/ =404; } location ~ \.php(?:$|/) { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; include fastcgi_params; fastcgi_param HTTP_PROXY ""; fastcgi_param HTTPS on; fastcgi_intercept_errors on; } location ~ /\.ht { deny all; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|swf)$ { access_log off; } }
Включаем наш сайт в конфигурации Nginx (чтобы Nginx при запуске учитывал вышеприведенную конфигурацию). Скорректируйте имя файла в соответствии с вашими настройками.
ln -sf /etc/nginx/sites-available/mail.example.com /etc/nginx/sites-enabled/mail.example.com
Почтовый сервер
- Установка самого основного - Postfix и Dovecot:
apt-get install -y postfix postfix-mysql postfix-pcre dovecot-core dovecot-imapd dovecot-mysql dovecot-common dovecot-sieve
При установке postfix будут запрошены конфигурационные параметры - их можно оставить по умолчанию, т.к. в дальнейшем конфигурационный файл будет целиком изменен.
Создадим в MySQL БД для почтового сервера
(если вдруг вы установили mysql без пароля root, то параметр -p нужно убрать)
mysql -p -Bse "create database mail;" mysql -p -Bse "grant all on mail.* to 'mail'@'localhost' identified by 'mailpassword';"
Пользователь для хранения почты
useradd -r -g mail -d /var/vmail -s /sbin/nologin -c "Virtual maildir handler" vmail mkdir /var/vmail chmod 770 /var/vmail chown vmail:mail /var/vmail
- Установка PostfixAdmin - интерфейса управления учетными записями
Скачайте последнюю версию PostfixAdmin по адресу https://sourceforge.net/projects/postfixadmin/ (на момент написания этого документа актуальная версия 3.0.2), затем распакуйте полученный архив в каталог /var/www/mail.example.com/mailadmin/ чтобы PostfixAdmin был вам доступен по адресу https://mail.example.com/mailadmin/
Создайте в каталоге с PostfixAdmin файл с именем config.local.php следующего содержания:
<?php $CONF['database_type'] = 'mysqli'; $CONF['database_user'] = 'mail'; $CONF['database_password'] = 'mailpassword'; $CONF['database_name'] = 'mail'; $CONF['configured'] = true; ?>
Установите права на один из каталогов PostfixAdmin:
chown www-data:www-data templates_c
Затем перейдите по адресу https://mail.example.com/mailadmin/setup.php Будет создана структура базы данных и появится возможность создать супер-администратора и задать пароль для управления PostfixAdmin.