« Назад

Налаштування поштового сервера на 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
Use dash as the 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, що Postfix завантажився.

Дозволимо MariaDB слухати на всіх інтерфейсах. Для цього закомментуємо рядок bind-address           = 127.0.0.1:

[...]
# 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:
# 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      26103/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 daemon libio-string-perl libio-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 php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.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 php7.3-fpm 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 your apache server
# Uncomment them to use it or adapt them to your configuration
#    Alias /roundcube /var/lib/roundcube
ServerAdmin webmaster@localhost
ServerName mail.example.com
DocumentRoot /var/lib/roundcube
<Directory /var/lib/roundcube/>
  Options +FollowSymLinks
  # This is needed to parse /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>
          Require all denied
        </IfVersion>
        <IfVersion < 2.3>
          Order allow,deny
          Deny from all
        </IfVersion>
</Directory>
<Directory /var/lib/roundcube/logs>
        Options -FollowSymLinks
        AllowOverride None
        <IfVersion >= 2.3>
          Require all denied
        </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 the 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 letter code) [AU]: <-- код країни
State or 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 or YOUR name) []:<-- mail.example.com
Email Address []: <-- тиснемо Enter
ISPConfig Port [8080]: <-- тиснемо Enter
Admin password [admin]: <-- вводимо пароль адміністратор ISPConfig
Re-enter admin password []:<-- повторюємо пароль
Do you want a secure (SSL) connection to the ISPConfig web interface (y,n) [y]: <-- тиснемо Enter
Country Name (2 letter code) [AU]: <-- код країни
State or 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 or YOUR name) []:<-- mail.example.com
Email Address []: <-- тиснемо Enter
A challenge password []:<--тиснемо Enter
An optional company name []:<--тиснемо Enter

Заходимо в панель управління, використовуючи логін admin і пароль, який ви вводили при встановленні ISPConfig:

https://mail.example.com:8080

ispconfig

12. Додавання поштового домену

Для того щоб розпочати налаштування поштового домену, в систему необхідно додати хоча б одного клієнта. Зробимо це, перейшовши на сторінку clients, кнопка “add new client”:

clients

Заповнюємо поля Company name, Contact firstname, Contact name, username, password, country, email:

clients_info

Перейдемо до додавання нового поштового домену, натиснувши кнопку “add new domain” на сторінці email:

email_domain1

Заповнюємо наступні поля:

Client — обираємо створеного нами клієнта.

Domain — вводимо ім’я домену, в нашому випадку це — example.com.

Spamfilter —  не будемо заглиблюватись у подробиці, оскільки по ISPConfig є файний мануал. Оптимальными значеннями є Normal (при досягненні tag-level більше 5, в тему листа додаємо SPAM —  і лист пересилається користувачу) та Trigger happy (при досягненні tag-level більше 5, лист видаляється).

Потім тиснемо кнопку “DomainKeys Identified Mail (DKIM)”, помічаємо “Enabled DKIM” та тиснемо кнопку “Generate DKIM Private-key”. Пізніше значення поля DNS-record, внесемо в записи нашого DNS-сервера.

Все, тиснемо кнопку “Save”.

email_domain2

13. Додавання поштових скриньок

Далі переходимо на сторінку Email Mailbox та додаємо поштові скриньки для користувачів. Там все зрозуміло та не складно, разписувати детатьно нема потреби. Якщо необхідно зробити переадресацію, скористайтесь сторінкою Email Forward.

14. Додавання DNS-записів

Додайте чи змініть наступні DNS-записи:

example.com.  MX 10 mail.example.com.

mail.example.com. A  192.168.1.100

example.com. TXT v=spf1 +a +mx ~all

default._domainkey.example.com. TXT v=DKIM1; t=s; p=MIIBIjANBgkqhkiG9w0BAQEF….

Значення останнього запису копіюємо з поля DNS-Record налаштування поштового домену.

Змінюємо PTR-запись:

100.1.168.192.in-addr.arpa.      PTR     mail.example.com.

Як правило, для цього необхідно написати відповідного листа інтернет-провайдеру, який надає вам ip-адресу.

15. Створення сертифікатів Letsencrypt для поштового сервера

Скачаємо та встановимо необхідні пакети:

#apt install python-certbot-apache

Тепер згенеруємо сертифікат:

#certbot --authenticator standalone --installer apache -d mail.example.com --pre-hook "systemctl stop apache2" --post-hook "systemctl start apache2"
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration. <-- 1

 

Розкоментуймо наступні рядки у файлі /etc/apache2/sites-available/roundcube.conf, якщо необхідна автоматична переадресація поштового веб-клієнта Roundcube с http на https:

#nano /etc/apache2/sites-available/roundcube.conf
<VirtualHost *:80>
# Those aliases do not work properly with several hosts on your apache server
# Uncomment them to use it or adapt them to your configuration
#    Alias /roundcube /var/lib/roundcube
ServerAdmin webmaster@localhost
ServerName mail.example.com
DocumentRoot /var/lib/roundcube
<Directory /var/lib/roundcube/>
  Options +FollowSymLinks
  # This is needed to parse /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>
          Require all denied
        </IfVersion>
        <IfVersion < 2.3>
          Order allow,deny
          Deny from all
        </IfVersion>
</Directory>
<Directory /var/lib/roundcube/logs>
        Options -FollowSymLinks
        AllowOverride None
        <IfVersion >= 2.3>
          Require all denied
        </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>

Додамо створений сертифікат Letsencrypt в postfix:

#nano /etc/postfix/main.cf
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem

Та в Dovecot:

#nano /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem

Перезапускаємо сервіси:

#systemctl restart postfix
#systemctl restart dovecot

Все, тепер наш поштовий сервер зможе приймати будь-які з’єднання і незахищенні, і захищені-  smtps, pop3-ssl, imap-ssl.

 

Компанія ТОВ «ІНФОТЕК.УА» надає професійні послуги з налаштування та обслуговування серверів

Август 21, 2019

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

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

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