Серверы · 11 min read · Oct 02, 2025
Идеальный сервер - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)
Идеальный сервер - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)
Версия 1.0
Авторы: Тилл Брем, Сриджан Кишор и Фалко Тимме
Следите за howtoforge в Twitter
Этот учебник показывает, как подготовить сервер CentOS 7 x86_64 для установки ISPConfig 3 и как установить ISPConfig 3 на него. ISPConfig 3 - это панель управления веб-хостингом, которая позволяет вам настраивать следующие службы через веб-браузер: веб-сервер nginx, почтовый сервер Postfix, MySQL, сервер имен BIND, PureFTPd, SpamAssassin, ClamAV, Mailman и многие другие. Начиная с версии 3.0.4, ISPConfig полностью поддерживает веб-сервер nginx в дополнение к Apache; этот учебник охватывает настройку сервера, который использует nginx, а не Apache. Учебник по идеальному серверу ISPConfig 3 для apache доступен здесь.
Руководство по ISPConfig 3
Чтобы узнать, как использовать ISPConfig 3, я настоятельно рекомендую скачать Руководство по ISPConfig 3.
На около 300 страницах оно охватывает концепцию ISPConfig (администраторы, реселлеры, клиенты), объясняет, как установить и обновить ISPConfig 3, включает справочник для всех форм и полей форм в ISPConfig вместе с примерами допустимых вводов и предоставляет учебники для самых распространенных задач в ISPConfig 3. Оно также описывает, как сделать ваш сервер более безопасным и включает раздел по устранению неполадок в конце.
1. Требования
Чтобы установить такую систему, вам понадобятся следующие вещи:
- Скачайте два DVD CentOS 7.0 с зеркала рядом с вами (список зеркал можно найти здесь: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso.
- Быстрое интернет-соединение
2. Предварительная заметка
В этом учебнике я использую имя хоста server1.example.com с IP-адресом 192.168.0.100 и шлюзом 192.168.0.1. Эти настройки могут отличаться у вас, поэтому вам нужно заменить их, где это необходимо. Пожалуйста, установите минимальную установку CentOS 7 из этой ссылки перед тем, как продолжить.
3 Установите редактор nano и настройте /etc/hosts
yum -y install nano wget
Затем мы редактируем /etc/hosts. Сделайте его таким:
nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100 server1.example.com server1
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6и установите имя хоста на server1.example.com:
echo ‘server1.example.com’ > /etc/hostname
4 Настройка брандмауэра и установка базового сетевого программного обеспечения
(Вы можете пропустить эту главу, если вы уже отключили брандмауэр в конце базовой установки системы.)
Я хочу установить ISPConfig в конце этого учебника, который поставляется со своим собственным брандмауэром. Поэтому я сейчас отключаю брандмауэр по умолчанию CentOS. Конечно, вы можете оставить его включенным и настроить его по своим потребностям (но тогда вам не следует использовать какой-либо другой брандмауэр позже, так как он, скорее всего, будет мешать брандмауэру CentOS).
Запустите
systemctl stop firewalld.service
systemctl disable firewalld.service
[root@server1 ~]# systemctl disable firewalld.service
rm ‘/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service’
rm ‘/etc/systemd/system/basic.target.wants/firewalld.service’
[root@server1 ~]#
и отключите брандмауэр.
Чтобы проверить, что брандмауэр действительно был отключен, вы можете запустить
firewall-cmd –state
после этого. Вывод должен выглядеть так:
[root@server1 ~]# firewall-cmd –state
not running
[root@server1 ~]#
yum -y install net-tools NetworkManager-tui
5 Отключите SELinux
SELinux - это расширение безопасности CentOS, которое должно обеспечивать расширенную безопасность. На мой взгляд, вам не нужно это для настройки безопасной системы, и оно обычно вызывает больше проблем, чем преимуществ (подумайте об этом после того, как вы провели неделю, устраняя неполадки, потому что какая-то служба не работала, как ожидалось, и затем вы обнаруживаете, что все было в порядке, только SELinux вызывало проблему). Поэтому я отключаю его (это обязательно, если вы хотите установить ISPConfig позже).
Отредактируйте /etc/selinux/config и установите SELINUX=disabled:
nano /etc/selinux/config
# Этот файл управляет состоянием SELinux в системе.
# SELINUX= может принимать одно из этих трех значений:
# enforcing - Политика безопасности SELinux применяется.
# permissive - SELinux выводит предупреждения вместо применения.
# disabled - Политика SELinux не загружена.
SELINUX=disabled
# SELINUXTYPE= может принимать одно из этих двух значений:
# targeted - Защищены целевые процессы,
# mls - Защита многоуровневой безопасности.
SELINUXTYPE=targeted
После этого мы должны перезагрузить систему:
reboot
6 Включите дополнительные репозитории и установите программное обеспечение
Мы включим репозитории EPEL на нашей системе CentOS, так как многие пакеты, которые мы собираемся установить в ходе этого учебника, недоступны в официальных репозиториях CentOS 7.0:
yum -y install epel-release
yum -y install yum-priorities
Отредактируйте /etc/yum.repos.d/epel.repo…
nano /etc/yum.repos.d/epel.repo
… и добавьте строку priority=10 в раздел [epel]:
[epel]
name=Дополнительные пакеты для Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...] Затем мы обновляем наши существующие пакеты в системе:
yum update
Теперь мы устанавливаем некоторые пакеты программного обеспечения, которые понадобятся позже:
yum -y groupinstall ‘Development Tools’
7 Квота
(Если вы выбрали другую схему разделения, чем я, вам нужно будет настроить эту главу так, чтобы квота применялась к разделам, где она вам нужна.)
Чтобы установить квоту, мы выполняем эту команду:
yum -y install quota
Теперь мы проверяем, включена ли квота уже для файловой системы, где хранятся данные веб-сайта (/var/www) и maildir (var/vmail). В этом примере у меня один большой корневой раздел, поэтому я ищу ‘ / ‘:
mount | grep ‘ / ‘
[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#
Если у вас есть отдельный раздел /var, то используйте:
mount | grep ‘ /var ‘
вместо этого. Если строка содержит слово “ noquota “, то продолжайте с следующими шагами, чтобы включить квоту.
Включение квоты на корневом разделе /
Обычно вы включаете квоту в файле /etc/fstab, но если файловая система является корневой файловой системой “/“, то квота должна быть включена с помощью параметра загрузки ядра Linux.
Отредактируйте файл конфигурации grub:
nano /etc/default/grub
поиск строки, которая начинается с GRUB_CMDLINE_LINUX и добавьте rootflags=uquota,gquota к параметрам командной строки, чтобы получившаяся строка выглядела так:
[...]
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto vconsole.keymap=us rhgb quiet rootflags=uquota,gquota"
[...] и примените изменения, выполнив следующую команду.
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg
и перезагрузите сервер.
reboot
Теперь проверьте, включена ли квота:
mount | grep ‘ / ‘
[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#
Когда квота активна, мы можем видеть “ usrquota,grpquota “ в списке параметров монтирования.
Включение квоты на отдельном разделе /var
Если у вас есть отдельный раздел /var, то отредактируйте /etc/fstab и добавьте,uquota,gquota к разделу / ( /dev/mapper/centos-var):
nano /etc/fstab
#
# /etc/fstab
# Создано anaconda в Вск Сен 21 16:33:45 2014
#
# Доступные файловые системы, по ссылке, поддерживаются под '/dev/disk'
# Смотрите страницы man fstab(5), findfs(8), mount(8) и/или blkid(8) для получения дополнительной информации
#
/dev/mapper/centos-root / xfs defaults 1 1
/dev/mapper/centos-var /var xfs defaults,uquota,gquota 1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot xfs defaults 1 3
/dev/mapper/centos-swap swap swap defaults 0 0Затем выполните
mount -o remount /var
quotacheck -avugm
quotaon -avug
чтобы включить квоту.
8 Синхронизация системных часов
Хорошей идеей будет синхронизировать системные часы с сервером NTP ( n etwork t ime p rotocol) через Интернет. Просто выполните
yum -y install ntp
и ваше системное время всегда будет синхронизировано.
9 Установка MariaDB
Мы установим сервер и клиент MariaDB следующим образом:
yum -y install mariadb mariadb-server
Мы хотим, чтобы служба Mariadb работала при загрузке и после нее, и запустим службу следующим образом:
systemctl enable mariadb.service
systemctl start mariadb.service
Установите пароли для учетной записи root MySQL:
mysql_secure_installation
[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
ПРИМЕЧАНИЕ: РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ВСЕ ЧАСТИ ЭТОГО СКРИПТА ДЛЯ ВСЕХ СЕРВЕРОВ MariaDB В ПРОИЗВОДСТВЕ! ПОЖАЛУЙСТА, ВНИМАТЕЛЬНО ЧИТАЙТЕ КАЖДЫЙ ШАГ!
Чтобы войти в MariaDB и обеспечить ее безопасность, нам понадобится текущий
пароль для пользователя root. Если вы только что установили MariaDB и
вы еще не установили пароль root, пароль будет пустым,
поэтому вам просто нужно нажать Enter здесь. <–ENTER
Введите текущий пароль для root (нажмите Enter для отсутствия): <–ENTER
OK, успешно использован пароль, продолжаем…
Установка пароля root гарантирует, что никто не сможет войти в пользователя root MariaDB без соответствующей авторизации.
Установить пароль root? [Y/n] <–ENTER
Новый пароль: <–yourmariadbpassword
Повторите новый пароль: <–yourmariadbpassword
Пароль успешно обновлен!
Перезагрузка таблиц привилегий..
… Успех!
По умолчанию установка MariaDB имеет анонимного пользователя, позволяя любому
войти в MariaDB без необходимости создания учетной записи пользователя для
них. Это предназначено только для тестирования и для того, чтобы установка
проходила немного легче. Вы должны удалить их перед переходом в
производственную среду.
Удалить анонимных пользователей? [Y/n] <–ENTER
… Успех!
Обычно root должен иметь возможность подключаться только с ‘localhost’. Это
гарантирует, что кто-то не сможет угадать пароль root из сети.
Запретить удаленный вход root? [Y/n] <–ENTER
… Успех!
По умолчанию MariaDB поставляется с базой данных с именем ‘test’, к которой может
доступ иметь любой. Это также предназначено только для тестирования и должно
быть удалено перед переходом в производственную среду.
Удалить тестовую базу данных и доступ к ней? [Y/n] <–ENTER
- Удаление тестовой базы данных…
… Успех! - Удаление привилегий на тестовую базу данных…
… Успех!
Перезагрузка таблиц привилегий гарантирует, что все изменения, сделанные до сих пор,
вступят в силу немедленно.
Перезагрузить таблицы привилегий сейчас? [Y/n] <–ENTER
… Успех!
Очистка…
Все готово! Если вы завершили все вышеперечисленные шаги, ваша установка MariaDB
должна быть теперь безопасной.
Спасибо за использование MariaDB!
[root@server1 ~]#
10 Установка Dovecot
Dovecot можно установить следующим образом:
yum -y install dovecot dovecot-pigeonhole dovecot-mysql
Создайте пустой файл dovecot-sql.conf и символическую ссылку:
touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
Теперь создайте ссылки для запуска системы и запустите Dovecot:
systemctl enable dovecot.service
systemctl start dovecot.service
11 Установка Postfix
Postfix можно установить следующим образом:
yum -y install postfix
Затем отключите Sendmail и запустите Postfix:
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.service
12 Установка Getmail
Getmail можно установить следующим образом:
yum -y install getmail
13 Установка Amavisd-new, SpamAssassin и ClamAV
Чтобы установить amavisd-new, spamassassin и clamav, выполните следующую команду:
yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 unrar perl-DBD-mysql
Отредактируйте файл конфигурации freshclam /etc/freshclam.conf
nano /etc/freshclam.conf
и закомментируйте строку “Пример“
[….]
[….]
Затем мы запускаем freshclam, amavisd и clamd.amavisd:
sa-update
freshclam
systemctl enable amavisd.service
14 Установка Nginx, PHP5 (PHP-FPM) и Fcgiwrap
Nginx доступен как пакет для CentOS 7.0 (из EPEL), который мы можем установить следующим образом:
yum -y install nginx
Если Apache2 уже установлен в системе, остановите его сейчас…
systemctl stop httpd.service
… и удалите системные ссылки запуска Apache:
systemctl disable httpd.service
Затем мы создаем системные ссылки запуска для nginx и запускаем его:
systemctl enable nginx.service
systemctl start nginx.service
(Если и Apache2, и nginx установлены, установщик ISPConfig 3 спросит вас, какой из них вы хотите использовать - ответьте nginx в этом случае. Если только один из этих двух установлен, ISPConfig автоматически выполнит необходимую конфигурацию.)
Мы можем заставить PHP5 работать в nginx через PHP-FPM (PHP-FPM (FastCGI Process Manager) - это альтернативная реализация PHP FastCGI с некоторыми дополнительными функциями, полезными для сайтов любого размера, особенно более загруженных сайтов). Мы можем установить php-fpm вместе с php-cli и некоторыми модулями PHP5, такими как php-mysql, которые вам нужны, если вы хотите использовать MySQL из ваших PHP-скриптов следующим образом:
yum -y install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy
Затем мы открываем /etc/php.ini…
nano /etc/php.ini
… и изменяем отчет об ошибках (чтобы уведомления больше не отображались):
[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]Также установите cgi.fix_pathinfo=0:
nano /etc/php.ini
[...]
; cgi.fix_pathinfo обеспечивает *реальную* поддержку PATH_INFO/PATH_TRANSLATED для CGI. PHP's
; предыдущее поведение заключалось в том, чтобы установить PATH_TRANSLATED в SCRIPT_FILENAME и не понимать, что такое PATH_INFO. Для получения дополнительной информации о PATH_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=0
[...](Пожалуйста, прочитайте http://wiki.nginx.org/Pitfalls, чтобы узнать, почему вы должны это сделать.)
Кроме того, чтобы избежать ошибок, таких как
[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): Небезопасно полагаться на настройки часового пояса системы. Вы обязаны использовать настройку date.timezone или функцию date_default_timezone_set(). Если вы использовали любой из этих методов и все еще получаете это предупреждение, вы, скорее всего, неправильно написали идентификатор часового пояса. Мы выбрали ‘Europe/Berlin’ для ‘CEST/2.0/DST’ вместо этого в /usr/share/nginx/html/info.php на строке 2
… в /var/log/php-fpm/www-error.log, когда вы вызываете PHP-скрипт в своем браузере, вы должны установить date.timezone в /etc/php.ini:
[...]
[Date]
; Определяет часовой пояс по умолчанию, используемый функциями даты
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]Затем создайте системные ссылки запуска для php-fpm и запустите его:
systemctl enable php-fpm
systemctl restart php-fpm
PHP-FPM - это демон-процесс (с init-скриптом /etc/init.d/php-fpm), который запускает сервер FastCGI на порту 9000.
Чтобы получить поддержку CGI в nginx, мы устанавливаем Fcgiwrap.
Fcgiwrap - это обертка CGI, которая также должна работать для сложных CGI-скриптов и может использоваться для сред совместного хостинга, потому что она позволяет каждому виртуальному хосту использовать свой собственный каталог cgi-bin.
Поскольку для CentOS 7.0 нет пакета fcgiwrap, мы должны собрать его сами. Сначала мы установим некоторые предварительные условия:
yum -y install fcgi-devel
Теперь мы можем собрать fcgiwrap следующим образом:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install
Это устанавливает fcgiwrap в /usr/local/sbin/fcgiwrap.
Затем мы устанавливаем пакет spawn-fcgi, который позволяет нам запускать fcgiwrap как демон:
yum -y install spawn-fcgi
Откройте /etc/sysconfig/spawn-fcgi…
nano /etc/sysconfig/spawn-fcgi
… и измените файл следующим образом:
# Вы должны установить некоторые рабочие параметры перед тем, как служба "spawn-fcgi" будет работать.
# Если SOCKET указывает на файл, то этот файл очищается скриптом инициализации.
#
# Смотрите spawn-fcgi(1) для всех возможных параметров.
#
# Пример :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"Теперь добавьте пользователя nginx в группу apache:
usermod -a -G apache nginx
Создайте системные ссылки запуска для spawn-fcgi…
chkconfig spawn-fcgi on
… и запустите его следующим образом:
systemctl start spawn-fcgi
Теперь вы должны найти сокет fcgiwrap в /var/run/fcgiwrap.socket, принадлежащий пользователю и группе apache (некоторые скрипты, например Mailman, ожидают, что будут запущены пользователем/группой apache, поэтому мы не запускаем spawn-fcgi как пользователя/группы nginx, а вместо этого добавляем nginx в группу apache).
14.1 Дополнительные версии PHP
Начиная с ISPConfig 3.0.5, возможно иметь несколько версий PHP на одном сервере (выбор через ISPConfig), которые могут работать через FastCGI и PHP-FPM. Процедура сборки дополнительных версий PHP на CentOS описана в этом учебнике: Как использовать несколько версий PHP (PHP-FPM и FastCGI) с ISPConfig 3 (CentOS 6.3)
Get new posts in your inbox
No spam. Unsubscribe anytime.