Налаштування поштового сервера на 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 у файлі /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 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
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
12. Додавання поштового домену
Для того щоб розпочати налаштування поштового домену, в систему необхідно додати хоча б одного клієнта. Зробимо це, перейшовши на сторінку clients, кнопка “add new client”:
Заповнюємо поля Company name, Contact firstname, Contact name, username, password, country, email:
Перейдемо до додавання нового поштового домену, натиснувши кнопку “add new domain” на сторінці email:
Заповнюємо наступні поля:
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”.
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.
Компанія ТОВ “ІНФОТЕК.УА” надає професійні послуги з налаштування та обслуговування серверів
August 21, 2019