Настройка почтового сервера на 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_installationSet 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/mysqld7. Установка 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 postgreyISPConfig использует amavis, имеющий встроенную библиотеку spamassassin, так что можем отключить сервис Spamassassin:
#systemctl stop spamassassin #systemctl disable spamassassin8. Установка веб-сервера 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 apache29. Установка 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 fail2ban10. Установка 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
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.phpSelect 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