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

Идеальный сервер CentOS 7.6 с Apache, PHP 7.2, 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 ПРИМЕЧАНИЕ: РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ВСЕ ЧАСТИ ЭТОГО СКРИПТА ДЛЯ ВСЕХ СЕРВЕРОВ MariaDB, ИСПОЛЬЗУЕМЫХ В ПРОИЗВОДСТВЕ! ПОЖАЛУЙСТА, ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ КАЖДЫЙ ШАГ!

Чтобы войти в MariaDB для ее защиты, нам нужен текущий пароль для пользователя root. Если вы только что установили MariaDB, и вы еще не установили пароль root, пароль будет пустым, поэтому просто нажмите Enter здесь.

Введите текущий пароль для root (нажмите Enter, если нет): Хорошо, пароль успешно использован, продолжаем...

Установка пароля root гарантирует, что никто не сможет войти в учетную запись root MariaDB без надлежащей авторизации. Установить пароль 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 (закомментировав строки, отмеченные красным):

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 # # 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.0.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, 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 php-intl php-imagick php-pspell 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

Теперь выполните команду certbot-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 = “fatal: Not a git repository (or any of the parent directories): .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-отдел”).
Общее название (например, ваше имя или имя хоста вашего сервера) []: <– Введите полное доменное имя системы (например, “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 для настройки DNS-сервера ISC BIND named(8)\
// как кэшируемого только 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. Его можно установить следующим образом:

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

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 и запускаем его:

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 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.