Серверные инструкции · 12 min read · Oct 24, 2025

Идеальный сервер CentOS 7.4 с Apache, Postfix, Dovecot, Pure-FTPD, BIND и ISPConfig 3.1 - Страница 2

7 Установка Dovecot

Dovecot можно установить следующим образом:

yum -y install dovecot dovecot-mysql dovecot-pigeonhole

Создайте пустой файл dovecot-sql.conf и создайте символьные ссылки:

touch /etc/dovecot/dovecot-sql.conf  
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf  
ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf

Теперь создайте ссылки для автозагрузки системы и запустите Dovecot:

systemctl enable dovecot  
systemctl start dovecot

8 Установка Postfix

Postfix можно установить следующим образом:

yum -y install postfix

Затем отключите Sendmail и запустите Postfix и MariaDB (MySQL):

systemctl enable mariadb.service  
systemctl start mariadb.service
systemctl stop sendmail.service  
systemctl disable sendmail.service  
systemctl enable postfix.service  
systemctl restart postfix.service

Мы отключаем sendmail, чтобы убедиться, что он не запустится в случае, если он установлен на вашем сервере. Поэтому сообщение об ошибке “Не удалось выполнить вызов метода: единица sendmail.service не загружена.” можно игнорировать.

9 Установка Getmail

Getmail можно установить следующим образом:

yum -y install getmail

10 Установка паролей MySQL и настройка phpMyAdmin

Установите пароли для учетной записи root MySQL:

mysql_secure_installation
[root@server1 tmp]# mysql_secure_installation  
  
  
NOTE: РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ВСЕ ЧАСТИ ЭТОГО СКРИПТА ДЛЯ ВСЕХ СЕРВЕРОВ MariaDB В ПРОИЗВОДСТВЕ! ПОЖАЛУЙСТА, ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ КАЖДЫЙ ШАГ!
Чтобы войти в MariaDB для ее защиты, нам нужен текущий  
пароль для пользователя root. Если вы только что установили MariaDB, и  
вы еще не установили пароль root, пароль будет пустым,  
поэтому просто нажмите Enter здесь.
Введите текущий пароль для root (нажмите Enter для отсутствия):  
Хорошо, пароль успешно использован, продолжаем...
Установка пароля root гарантирует, что никто не сможет войти в MariaDB  
пользователем root без надлежащей авторизации.  
  
Установить пароль root? [Y/n] <-- ENTER  
Новый пароль: <-- вашпарольrootsql  
Повторите новый пароль: <-- вашпарольrootsql  
Пароль успешно обновлен!  
Перезагрузка таблиц привилегий..  
 ... Успех!  
  
По умолчанию установка MariaDB имеет анонимного пользователя, позволяя любому  
войти в MariaDB без необходимости создания учетной записи пользователя. Это предназначено только для тестирования и для того, чтобы установка  
проходила немного легче. Вы должны удалить их перед переходом в  
производственную среду.  
  
Удалить анонимных пользователей? [Y/n] <-- ENTER  
 ... Успех!  
  
Обычно root  
должен иметь возможность подключаться только с 'localhost'.  Это  
гарантирует, что кто-то не сможет угадать  
пароль root из сети.  
  
Запретить удаленный вход root? [Y/n] <-- ENTER  
 ... Успех!  
  
По умолчанию, MariaDB поставляется с базой данных под названием 'test', к которой любой может  
получить доступ. Это также предназначено только для тестирования и должно быть удалено  
перед переходом в производственную среду.  
  
Удалить тестовую базу данных и доступ к ней? [Y/n] <-- ENTER  
 - Удаление тестовой базы данных...  
 ... Успех!  
 - Удаление привилегий на тестовую базу данных...  
 ... Успех!  
  
Перезагрузка таблиц привилегий гарантирует, что все изменения, сделанные  
до сих пор, вступят в силу немедленно.  
  
Перезагрузить таблицы привилегий сейчас? [Y/n] <-- ENTER  
 ... Успех!  
  
Очистка...  
  
Все готово! Если вы завершили все вышеперечисленные шаги, ваша установка MariaDB  
теперь должна быть защищена.  
  
Спасибо за использование MariaDB!  
  
[root@server1 tmp]#

Теперь мы настраиваем phpMyAdmin. Мы изменяем конфигурацию Apache, чтобы phpMyAdmin разрешал подключения не только с localhost (закомментировав две строки “Require ip” и добавив новую строку “Require all granted” в разделе ):

nano /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Веб-браузер MySQL на основе php
#
# По умолчанию разрешает только localhost
#
# Но разрешение phpMyAdmin для любого, кроме localhost, следует считать
# опасным, если не защищено SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin


   
     # Apache 2.4
     
     #  Require ip 127.0.0.1
     #  Require ip ::1  
        Require all granted
     
   
   
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   

            

Далее мы изменяем аутентификацию в phpMyAdmin с cookie на http:

nano /etc/phpMyAdmin/config.inc.php
[...]
/* Тип аутентификации */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]

Затем мы создаем ссылки для автозагрузки системы для Apache и запускаем его:

systemctl enable  httpd.service  
systemctl restart  httpd.service

Теперь вы можете направить свой браузер на http://server1.example.com/phpmyadmin/ или http://192.168.1.100/phpmyadmin/ и войти с именем пользователя root и вашим новым паролем root MySQL.

11 Установка Amavisd-new, SpamAssassin, ClamAV и Postgrey

Чтобы установить amavisd-new, SpamAssassin и ClamAV, выполните следующую команду:

yum -y install amavisd-new spamassassin clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd unzip bzip2 perl-DBD-mysql postgrey re2c

Отредактируйте файл конфигурации freshclam /etc/freshclam.conf

nano /etc/freshclam.conf

и проверьте, что строка “Example” закомментирована, как показано ниже:

[....]  
# Example  
[....]

Чтобы включить автоматические обновления сигнатур ClamAV с помощью freshclam, отредактируйте файл /etc/sysconfig/freshclam:

nano /etc/sysconfig/freshclam

и поставьте # перед последней строкой, чтобы она выглядела так, если это еще не так:

# FRESHCLAM_DELAY=

Затем мы запускаем freshclam, amavisd и clamd.amavisd:

sa-update  
freshclam  
systemctl enable amavisd.service  
systemctl start amavisd.service  
systemctl start [email protected]  
systemctl enable postgrey.service  
systemctl start postgrey.service

12 Установка Apache с mod_php, mod_fcgi/PHP, PHP-FPM

ISPConfig 3 позволяет использовать mod_php, mod_fcgi/PHP, cgi/PHP и PHP-FPM на основе каждого сайта.

Мы можем установить Apache2 с mod_php, mod_fcgid и PHP следующим образом:

yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel php-fpm wget

Далее мы открываем /etc/php.ini…

nano /etc/php.ini

… и изменяем отчет об ошибках (так, чтобы уведомления больше не отображались), устанавливаем часовой пояс и раскомментируем cgi.fix_pathinfo=1:

[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
[...]
; cgi.fix_pathinfo обеспечивает *реальную* поддержку PATH_INFO/PATH_TRANSLATED для CGI. PHP's
; предыдущее поведение заключалось в том, чтобы установить PATH_TRANSLATED в SCRIPT_FILENAME и не понимать,
; что такое PATH_INFO. Для получения дополнительной информации о PAppp.tldTH_INFO смотрите спецификации cgi. Установка
; этого в 1 заставит PHP CGI исправить свои пути в соответствии со спецификацией. Установка
; нуля заставляет PHP вести себя как раньше. По умолчанию 1. Вы должны исправить свои скрипты
; чтобы использовать SCRIPT_FILENAME вместо PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1  
[...]  
date.timezone = 'Europe/Berlin'
[...]

Включите httpd и PHP-FPM, чтобы они запускались при загрузке, и запустите службу PHP-FPM.

systemctl start php-fpm.service  
systemctl enable php-fpm.service  
systemctl enable httpd.service

Наконец, мы перезапускаем Apache:

systemctl restart httpd.service

Теперь мы добавим поддержку Let’s encrypt.

mkdir /opt/certbot  
cd /opt/certbot  
wget https://dl.eff.org/certbot-auto  
chmod a+x ./certbot-auto

Теперь выполните команду certboot-auto, которая загрузит и установит программное обеспечение и его зависимости.

./certbot-auto

Команда затем сообщит вам, что “в ваших конфигурационных файлах не найдено имен” и спросит, следует ли продолжать, пожалуйста, выберите “c”, чтобы отменить здесь, так как сертификаты будут созданы ispconfig.

Установка certbot на CentOS

13 Установка mod_python

Модуль apache mod_python недоступен в виде RPM-пакета, поэтому мы скомпилируем его из исходников. Первый шаг - установить файлы разработки python и загрузить текущую версию mod_python в виде файла tar.gz

yum -y install python-devel
cd /usr/local/src/  
wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz  
tar xfz mod_python-3.5.0.tgz  
cd mod_python-3.5.0

и затем настроить и скомпилировать модуль.

./configure  
make

В скомпилированном модуле есть ошибка, которая приведет к сбою установки с ошибкой “ version = “фатальная ошибка: не является репозиторием git (или любым из родительских каталогов): .git “. Чтобы исправить это, выполните эту команду sed (команда - одна строка!).

sed -e 's/(git describe --always)/(git describe --always 2>\/dev\/null)/g' -e 's/`git describe --always`/`git describe --always 2>\/dev\/null`/g' -i $( find . -type f -name Makefile\* -o -name version.sh )

Затем установите модуль с помощью этой команды.

make install

и включите модуль в Apache:

echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf  
systemctl restart httpd.service

14 Установка PureFTPd

PureFTPd можно установить с помощью следующей команды:

yum -y install pure-ftpd

Затем создайте ссылки для автозагрузки системы и запустите PureFTPd:

systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

Теперь мы настраиваем PureFTPd для разрешения FTP и TLS-сессий. FTP - это очень небезопасный протокол, так как все пароли и все данные передаются в открытом виде. Используя TLS, всю связь можно зашифровать, что делает FTP гораздо более безопасным.

OpenSSL необходим для TLS; чтобы установить OpenSSL, мы просто выполняем:

yum install openssl

Откройте /etc/pure-ftpd/pure-ftpd.conf…

nano /etc/pure-ftpd/pure-ftpd.conf

Если вы хотите разрешить FTP и TLS-сессии, установите TLS в 1, убрав # перед строкой TLS. Настоятельно рекомендуется включить TLS.

[...]
# Этот параметр может принимать три значения :
# 0 : отключить уровень шифрования SSL/TLS (по умолчанию).
# 1 : принимать как традиционные, так и зашифрованные сессии.
# 2 : отклонять соединения, которые не используют механизмы безопасности SSL/TLS,
# включая анонимные сессии.
# Не раскомментируйте это слепо. Убедитесь, что :
# 1) Ваш сервер был скомпилирован с поддержкой SSL/TLS (--with-tls),
# 2) У вас есть действующий сертификат,
# 3) Только совместимые клиенты смогут войти.

TLS                      1
[...]

Чтобы использовать TLS, мы должны создать SSL-сертификат. Я создаю его в /etc/ssl/private/, поэтому сначала создаю этот каталог:

mkdir -p /etc/ssl/private/

После этого мы можем сгенерировать SSL-сертификат следующим образом:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Название страны (2 буквы) [XX]: <– Введите название вашей страны (например, “DE”).
Название штата или провинции (полное название) []: <– Введите название вашего штата или провинции.
Название населенного пункта (например, город) [Default City]: <– Введите ваш город.
Название организации (например, компания) [Default Company Ltd]: <– Введите название вашей организации (например, название вашей компании).
Название подразделения (например, отдел) []: <– Введите название вашего подразделения (например, “IT Department”).
Общее название (например, ваше имя или имя хоста вашего сервера) []: <– Введите полное доменное имя системы (например, “server1.example.com”).
Адрес электронной почты []: <– Введите ваш адрес электронной почты.

Измените разрешения SSL-сертификата:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Создайте файл DHParam:

openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048

Наконец, перезапустите PureFTPd:

systemctl restart pure-ftpd.service

Вот и все. Теперь вы можете попробовать подключиться с помощью вашего FTP-клиента; однако вы должны настроить ваш FTP-клиент для использования TLS.

15 Установка BIND

Мы можем установить BIND следующим образом:

yum -y install bind bind-utils haveged

Сделайте резервную копию существующего файла /etc/named.conf и создайте новый следующим образом:

cp /etc/named.conf /etc/named.conf_bak  
cat /dev/null > /etc/named.conf  
nano /etc/named.conf
// named.conf
//
// Предоставлено пакетом Red Hat bind для настройки ISC BIND named(8) DNS
// сервера как кэшируемого только nameserver (только как локальный DNS-резолвер).
//
// См. /usr/share/doc/bind*/sample/ для примеров конфигурационных файлов named.
//
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
                allow-recursion {"none";};
        recursion no;
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.conf.local";

Создайте файл /etc/named.conf.local, который включается в конце /etc/named.conf ( /etc/named.conf.local позже будет заполнен ISPConfig, если вы создадите DNS-зоны в ISPConfig):

touch /etc/named.conf.local

Затем создаем ссылки для автозагрузки и запускаем BIND:

systemctl enable named.service  
systemctl start named.service  
systemctl enable haveged.service  
systemctl start haveged.service

16 Установка Webalizer и AWStats

AWStats можно установить следующим образом:

yum -y install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder

Отредактируйте файл /etc/httpd/conf.d/awstats.conf:

nano /etc/httpd/conf.d/awstats.conf

и измените строку:

Require local

на:

Require all granted

И перезапустите apache:

systemctl restart httpd.service

17 Установка Jailkit

Jailkit используется для chroot SSH пользователей и cronjobs. Его можно установить следующим образом (важно: Jailkit должен быть установлен до ISPConfig - его нельзя установить позже!):

cd /tmp  
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz  
tar xvfz jailkit-2.19.tar.gz  
cd jailkit-2.19  
./configure  
make  
make install  
cd ..  
rm -rf jailkit-2.19*

18 Установка Fail2Ban

Это необязательно, но рекомендуется, потому что монитор ISPConfig пытается показать журнал.

yum -y install iptables-services fail2ban fail2ban-systemd  
systemctl stop firewalld.service  
systemctl mask firewalld.service  
systemctl disable firewalld.service  
systemctl stop firewalld.service

Затем создайте файл /etc/fail2ban/jail.local и включите мониторинг для ssh, email и ftp сервиса.

nano /etc/fail2ban/jail.local

Добавьте следующий контент в файл jail.local:

[sshd]  
enabled = true  
action = iptables[name=sshd, port=ssh, protocol=tcp]  
  
[pure-ftpd]  
enabled = true  
action = iptables[name=FTP, port=ftp, protocol=tcp]  
maxretry = 3  
  
[dovecot]  
enabled = true  
action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]  
maxretry = 5  
  
[postfix-sasl]  
enabled = true  
action = iptables-multiport[name=postfix-sasl, port="smtp,smtps,submission", protocol=tcp]  
maxretry = 3

Затем создайте ссылки для автозагрузки системы для fail2ban и запустите его:

mkdir /var/run/fail2ban  
systemctl enable fail2ban.service  
systemctl start fail2ban.service

19 Установка rkhunter

rkhunter можно установить следующим образом:

yum -y install rkhunter

20 Установка Mailman

Если вы хотите управлять почтовыми списками с помощью Mailman на вашем сервере, то установите mailman сейчас. Mailman поддерживается ISPConfig, поэтому вы сможете создавать новые почтовые списки через ISPConfig позже.

yum -y install mailman

Перед тем как мы сможем запустить Mailman, должен быть создан первый почтовый список под названием mailman:

touch /var/lib/mailman/data/aliases  
postmap /var/lib/mailman/data/aliases  
/usr/lib/mailman/bin/newlist mailman  
ln -s /usr/lib/mailman/mail/mailman /usr/bin/mailman

[root@server1 tmp]# /usr/lib/mailman/bin/newlist mailman
Введите email человека, управляющего списком: <– адрес электронной почты администратора, например [email protected]
Первоначальный пароль mailman: <– пароль администратора для списка mailman
Чтобы завершить создание вашего почтового списка, вы должны отредактировать ваш файл /etc/aliases (или
эквивалентный) файл, добавив следующие строки, и, возможно, запустив
программу newaliases:

почтовый список mailman

mailman: “|/usr/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/usr/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/usr/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/usr/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/usr/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/usr/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/usr/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/usr/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/usr/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/usr/lib/mailman/mail/mailman unsubscribe mailman”

Нажмите Enter, чтобы уведомить владельца mailman… <– ENTER

[root@server1 tmp]#

Откройте /etc/aliases после этого…

nano /etc/aliases

… и добавьте следующие строки:

[...]
mailman:              "|/usr/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/usr/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/usr/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/usr/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/usr/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/usr/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/usr/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/usr/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/usr/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/usr/lib/mailman/mail/mailman unsubscribe mailman"

Запустите

newaliases

после этого и перезапустите Postfix:

systemctl restart postfix.service

Теперь откройте файл конфигурации Apache Mailman /etc/httpd/conf.d/mailman.conf…

nano /etc/httpd/conf.d/mailman.conf

… и добавьте строку ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/. Закомментируйте Alias /pipermail/ /var/lib/mailman/archives/public/ и добавьте строку Alias /pipermail /var/lib/mailman/archives/public/:

#
#  настройки конфигурации httpd для использования с mailman.
#
ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/

    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all


#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/

    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AddDefaultCharset Off


# Раскомментируйте следующую строку, чтобы перенаправить запросы на /mailman на страницу
# listinfo (рекомендуется).

# RedirectMatch ^/mailman[/]*$ /mailman/listinfo

Перезапустите Apache:

systemctl restart httpd.service

Создайте ссылки для автозагрузки системы для Mailman и запустите его:

systemctl enable mailman.service  
systemctl start mailman.service

После установки ISPConfig 3 вы можете получить доступ к Mailman следующим образом:

Вы можете использовать псевдоним /cgi-bin/mailman для всех виртуальных хостов Apache (пожалуйста, обратите внимание, что suExec и CGI должны быть отключены для всех виртуальных хостов, из которых вы хотите получить доступ к Mailman!), что означает, что вы можете получить доступ к интерфейсу администратора Mailman для списка по адресу http:///cgi-bin/mailman/admin/, а веб-страница для пользователей почтового списка может быть найдена по адресу http:///cgi-bin/mailman/listinfo/.

По адресу http:///pipermail/ вы можете найти архивы почтового списка.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.