« Назад

Настройка почтового сервера на Linux Debian 10 Buster (postfix, dovecot, clamav, spamassassin, roundcube) используя панель управления хостингом ISPConfig 3.1. является главной целью данной статьи. Создание удобного, функционального и безопасного корпоративного почтового сервера с использованием бесплатного ПО на базе операционной системы Linux Debian 10 (Buster).

Инструкция по настройке почтового сервера на базе ОС Linux Debian 10 (Buster)

 

Исходные данные

Сервер, желательно из RAID-1, с установленной операционной системой Linux Debian 10 (Buster).

Все команды будут производиться от имени пользователя root.

В качестве примера будем использовать доменное имя mail.example.com, IP-адрес сервера – 192.168.1.100. Не забывайте изменять их, настраивая почтовый сервер.

Текстовый редактор – nano.

 

1. Hostname

Приведем файл /etc/hosts к следующему виду:

#nano /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.100 mail.example.com mail
#
# IPv6
#::1    ip6-localhost ip6-loopback
#fe00::0 ip6-localnet

IP-адрес, пробел полное доменное имя, пробел имя поддомена. Все ipv6 адреса лучше закомментировать.

И пропишем имя поддомена в /etc/hostname:

#nano /etc/hostname
mail

Перезагрузим сервер:

#shutdown -r now

После перезагрузки проверяем корректность наших настроек:

root@mail~#hostname
mail
root@mail~#hostname-f
mail.example.com

2.Обновление сервера

Обновим базу данных пакетов apt:

#apt update

Установим последние обновления:

#apt upgrade

Перезагрузим сервер:

#shutdown -r now

3. Безопасность

Для правильного функционирования почтового сервера необходимо открыть следующие порты (tcp):

25- smtp
110- pop
995- pop-ssl
143- imap
993- imap-ssl
465- smtps
587- msa
80- http
443- https

Закройте все остальное.

4. Замена по умолчанию оболочки

Для корректной установки ISPConfig необходимо заменить по умолчанию оболочку /bin/sh, которая является символической ссылкой на /bin/dash, на /bin/bash:

#dpkg-reconfigure dash
Поменять шрифт, как default system shell (/bin/sh)? <-- No

5. Синхронизация системного времени

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

#apt install ntp

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

#mv /etc/localtime  /etc/localtime-old
#ln -sf /usr/share/zoneinfo/Europe/Kiev /etc/localtime

6. Установка Postfix, Dovecot, MariaDB, rkhunter, and Binutils

#apt-get -y install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo
На вопросы отвечаем следующим образом:
General type of mail configuration: <-- Internet Site
System mail name: <-- mail.example.com

Сделаем базовые настройки MariaDB:

#mysql_secure_installation
Set the root password? [Y/n] <-- y
New password: <-- Введите новый пароль для root MariaDB
Re-enter new password: <-- Повторите пароль
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Remove test database and access to it? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

Откроем порты 465 и 587 в Postfix:

#nano /etc/postfix/master.cf

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

[...]
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
#-o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[…]

Перезагрузим Postfix:

#systemctl restart postfix

Проверьте загрузку загрузочного файла /var/log/syslog.

Разрешим MariaDB слушать на всех интерфейсах. Для этого закомментируем строку bind-address = 127.0.0.1 в файле /etc/mysql/mariadb.conf.d/50-server.cnf:

#nano /etc/mysql/mariadb.conf.d/50-server.cnf
[…]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
[…]

Добавим пароль root MariaDB в файл /etc/mysql/debian.cnf:

#nano /etc/mysql/debian.cnf
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host=localhost
user=root
password = пароль root MariaDB
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host=localhost
user=root
password = пароль root MariaDB
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Для предупреждения ошибки ‘Error in accept: Too many open files’ в MariaDB, необходимо выполнить следующие шаги:

Редактировать файл /etc/security/limits.conf, добавив две строки в конец файла:

#nano /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535

Создадим новый каталог:

#mkdir -p /etc/systemd/system/mysql.service.d/

Создадим новый файл следующего содержимого:

#nano /etc/systemd/system/mysql.service.d/limits.conf
[Service]
LimitNOFILE=infinity

Перезагрузим Systemd и MariaDB:

#systemctl daemon-reload
#systemctl restart mariadb

Проверяем работоспособность:

#netstat-tap | grep mysql

Вывод должен быть примерно следующим:

root@mail~#netstat-tap | grep mysql
tcp6 0 0 [::]:mysql [::]:* LISTEN 26428/mysqld

7. Установка Amavisd-new, SpamAssassin и ClamAV

#apt install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract p7zip p7zip-full unrar lrzip apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs socket-ssl-perl libnet-ident-perl zip libnet-dns-perl libdbd-mysql-perl postgrey

ISPConfig использует amavis, имеющий встроенную библиотеку spamassassin, так что можем отключить сервис Spamassassin:

#systemctl stop spamassassin
#systemctl disable spamassassin

8. Установка веб-сервера Apache2 и php

#apt -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.3 php7.3-common php7.3-gd php7.3-mysql php7.3-imap php7.3-cli php7. 3-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear mcrypt imagemagick libruby libapache2-mod-python .3-tidy php7.3-xmlrpc php7.3-xsl memcached php-memcache php-imagick php-gettext php7.3-zip php7.3-mbstring memcached libapache2-mod-passenger php7.3-soap php php7.3-opcache php-apcu

Включим некоторые дополнительные модули:

#a2enmod suexec rewrite ssl actions include cgi headers actions proxy_fcgi alias

Перезагрузим apache:

#systemctl restart apache2

9. Установка fail2ban

#apt install fail2ban

Создадим файл /etc/fail2ban/jail.local:

#nano /etc/fail2ban/jail.local

И добавим следующее содержимое:

[dovecot]
enabled = true
filter = dovecot
logpath = /var/log/mail.log
maxretry = 5
[postfix-sasl]
enabled = true
port = smtp
filter = postfix[mode=auth]
logpath = /var/log/mail.log
maxretry = 3

Перезагрузим fail2ban:

#systemctl restart fail2ban

10. Установка Roundcube Webmail

В этом разделе установим почтовый клиент, работающий через веб-интерфейс. Для начала необходимо создать новую базу данных для Roundcube, поскольку установщик почему-то не создает ее автоматически:

#echo "CREATE DATABASE roundcube;" | mysql --defaults-file=/etc/mysql/debian.cnf

Установим необходимые пакеты:

#apt install roundcube roundcube-core roundcube-mysql roundcube-plugins

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

Configure database for roundcube with dbconfig-common? <-- yes
MySQL application password for roundcube: <-- жмем enter
Administrative password: <--пароль root MariaDB

Редактируем файл /etc/roundcube/config.inc.php:

#nano /etc/roundcube/config.inc.php

Отредактируем два параметра default_host и smtp_server:

$config['default_host'] = 'localhost';
$config['smtp_server'] = 'localhost';

Выключим в apache конфигурацию roundcube:

#a2disconf roundcube.conf

Перезагружаем apache:

#systemctl restart apache2

Создаем файл /etc/apache2/sites-available/roundcube.conf:

#nano /etc/apache2/sites-available/roundcube.conf

Со следующим содержимым:

<VirtualHost *:80>
# Those aliases do not work properly with several hosts on ваш apache server
# Нет комментариев для использования или адаптации для использования настройки
# Alias ​​/roundcube /var/lib/roundcube
ServerAdmin webmaster@localhost
ServerName mail.example.com
DocumentRoot /var/lib/roundcube
<Directory /var/lib/roundcube/>
Options +FollowSymLinks
# Это требуется в /var/lib/roundcube/.htaccess. See its
# content before setting AllowOverride to None.
AllowOverride All
<IfVersion >= 2.3>
Require all granted
</IfVersion>
<IfVersion < 2.3>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
# Protecting basic directories:
<Directory /var/lib/roundcube/config>
Options -FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/lib/roundcube/temp>
Options -FollowSymLinks
AllowOverride None
<IfVersion >= 2.3>
Требуется все денид
</IfVersion>
<IfVersion < 2.3>
Order allow,deny
Deny from all
</IfVersion>
</Directory>
<Directory /var/lib/roundcube/logs>
Options -FollowSymLinks
AllowOverride None
<IfVersion >= 2.3>
Требуется все денид
</IfVersion>
<IfVersion < 2.3>
Order allow,deny
Deny from all
</IfVersion>
</Directory>
#RewriteEngine On
#RewriteCond %{HTTP:X-HTTPS} !1
#RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

Отключаем сайт по умолчанию и добавляем сайт rouncube:

#a2dissite 000-default.conf
#a2ensite roundcube.conf

Перезагружаем apache:

#systemctl reload apache2

Если у вас есть прописанная А-запись на NS-сервере, в браузере можно скачать стартовую страницу:

http://mail.examlpe.com

 

Roundcube

 

11. Установка ISPConfig 3

Загружаем последнюю стабильную версию ISPConfig:

#cd /tmp
#wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
#tar xfz ISPConfig-3-stable.tar.gz
#cd ispconfig3_install/install/

Устанавливаем пакет patch:

#apt install patch

И вот, наконец, устанавливаем ISPConfig:

#php -q install.php
Select language (en,de) [en]: <-- жмем Enter
Installation mode (standard,expert) [standard]: <-- жмем Enter
Full qualified hostname (FQDN) of server, eg server1.domain.tld [mail.example.com]: <-- жмем Enter
MySQL server hostname [localhost]: <-- жмем Enter
MySQL server port [3306]: <-- жмем Enter
MySQL root username [root]: <-- жмем Enter
MySQL root password []:<-- вводим пароль root MariaDB
MySQL database to create [dbispconfig]: <-- жмем Enter
MySQL charset [utf8]: <-- жмем Enter
Country Name (2-летний код) [AU]: <--код страны
State или Province Name (Full name) [Some-State]: <-- область
Locality Name (eg, city) []:<--город
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- название предприятия
Organizational Unit Name (eg, section) []:<--жмем Enter
Common Name (e.g. server FQDN или YOUR name) []:<-- mail.example.com
Email Address []: <-- жмем Enter
ISPConfig Port [8080]: <-- жмем Enter
Admin password [admin]: <-- вводим пароль администратор ISPConfig
Re-enter admin password []:<-- повторяем пароль
У вас есть возможность (SSL) подключиться к ISPConfig web interface (y,n) [y]: <-- жмем Enter
Country Name (2-летний код) [AU]: <--код страны
State или Province Name (Full name) [Some-State]: <-- область
Locality Name (eg, city) []:<--город
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- название предприятия
Organizational Unit Name (eg, секция) []:

21 августа, 2019

Если у вас возникли вопросы

СВЯЖИТЕСЬ С НАМИ!

Оставьте свои данные и мы свяжемся
с вами ближайшее время