Быстрая настройка web-сервера nginx на базе CentOS

Предполагается, что сама операционная система уже установлена в минимальной конфигурации. Остается настроить сам web-сервер и другие необходимые службы:

Предварительная подготовка

Настройка UTF-локали

Проверить локаль можно командой locale -a | grep ru, в случае отсутствия нужно создать файл /etc/sysconfig/i18n и вставить в него строку LANG="ru_RU.UTF-8".

Подсветка синтаксиса в Midnight Commander

Для подсветки файлов, у которых нет своих цветовых настроек:

# cp /usr/share/mc/syntax/cxx.syntax /usr/share/mc/syntax/unknown.syntax

Отключить SELinux

В файле /etc/sysconfig/selinux должна быть строка SELINUX=disabled (не забудьте перезагрузить сервер). Или примените исключение:

# setenforce 0

Отключить IPv6

Везде где только можно:

# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf # mcedit /etc/sysconfig/network-scripts/ifcfg-eth0 IPV6INIT=no # mcedit /etc/sysconfig/network NETWORKING_IPV6=no # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 #::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

Удаляем NetworkManager в CentOS 7

Это программа, облегчающая определение и конфигурацию средств для автоматического подключения к сети. Полезна она только для домашнего ПК или ноутбука, на сервере же может создавать проблемы с настройкой сети, т.к. может самостоятельно менять настройки.

# systemctl stop NetworkManager && systemctl disable NetworkManager && systemctl restart network

Меняем имя хоста

Для CentOS 6 в файле /etc/sysconfig/network

HOSTNAME=example.com

Для CentOS 7 командой:

# hostnamectl set-hostname новое_имя_хоста

Подключаем дополнительные репозитарии

# yum install epel-release

Установка PHP

# yum install php php-mysql php-fpm php-xml php-mbstring

Настройка времени

Установим нужный часовой пояс:

# yum -y install tzdata # mv /etc/localtime /etc/localtime.bak # ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Синхронизируем время:

Можно запускать синхронизацию времени вручную:

# ntpdate pool.ntp.org

Или установить сервер ntp (настройки в файле /etc/ntp.conf):

# yum install ntp # service ntpd start # chkconfig ntpd on

Установка сервера MariaDB

После установки обязательно заменить стандартный конфиг (как минимум взять из папки /usr/share/mysql): # yum install mariadb-server # cp /usr/share/mysql/my-small.cnf /etc/my.cnf.d # service mariadb start # chkconfig mariadb on

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

Сменить пароль на mysql root можно командой:

# mysqladmin -u root password 'пароль'

Если у вас мало памяти на жестком диске, и не используется репликация, имеет смысл ограничить бинарные логи (например, хранить последние 5 дней), иначе место может быстро закончиться. Для этого в файл my.cnf добавите строки (в секцию [mysqld]):

log-bin=mysql-bin
expire_logs_days = 5

Если не жалко оперативной памяти можно так же расположить в ней временные таблицы

Установка сервера Nginx

Сначала нужно создать файл /etc/yum.repos.d/nginx.repo, с содержимым:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
Вручную заменить $releasever на используемую версию CentOS # yum install nginx

Настройка самого сервера описана в статье

Настройка iptables

Для CentOS 7 сначала удалим пакет firewalld

# yum remove firewalld

Устанавливаем пакеты:

# yum install iptables policycoreutils

Для CentOS 7:

# yum install iptables-services

Очистим цепочки:

# iptables -F INPUT # iptables -F FORWARD # iptables -F OUTPUT

Правила для icmp:

# iptables -N icmp_in # iptables -A icmp_in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT # iptables -A icmp_in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT # iptables -A icmp_in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT # iptables -A icmp_in -p icmp -j ULOG --ulog-prefix "Bad ICMP"

Для защиты по ssh:

# iptables -N sshguard # iptables -A sshguard -m state --state NEW -m recent --name SSH --rcheck --seconds 60 --hitcount 2 -j LOG --log-prefix "SSH-shield" # iptables -A sshguard -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP # iptables -A sshguard -m state --state NEW -m recent --name SSH --set -j ACCEPT # iptables -A sshguard -j ACCEPT

Цепочка INPUT:

# iptables -A INPUT -p icmp -j icmp_in # iptables -A INPUT -p tcp --dport 22 -j sshguard # iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT -m comment --comment "www" # iptables -A INPUT -p tcp -m multiport --dport 10000 -j ACCEPT -m comment --comment "webmin" # iptables -A INPUT -s [ip_адрес] -p tcp --dport 3306 -j ACCEPT -m comment --comment "MySQL" # iptables -A INPUT -s [ip_адрес] -p tcp --dport 873 -j ACCEPT -m comment --comment "rsync" # iptables -A INPUT -i lo -d 127.0.0.0/8 -j ACCEPT # iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Политики по-умолчанию:

# iptables -P INPUT DROP # iptables -P FORWARD DROP # iptables -P OUTPUT ACCEPT

Сохраняем правила и добавляем iptables в автозапуск:

# service iptables save # chkconfig ip6tables off # iptables start # chkconfig iptables on

Настройка rsync

Устанавливаем необходимые пакеты:

# yum install rsync xinetd

В файле /etc/xinetd.d/rsync заменить disable = yes на disable = no

На сервере

Создаем файл конфигурации /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
[www]
    path = /www/var/html
    uid = root
    read only = yes
    list = yes
    comment = var directory
    hosts allow = разрешенный_ip
    hosts deny = *
    auth users = имя_пользователя
    secrets file = /root/rsyncd.scrt

Важно: файл /root/rsyncd.scrt имеет формат имя_пользователя:пароль, владец файла пользователь root, права должны быть 600 (чтение и запись только у пользователя root).

Мы описали только одну секцию [www], на практике их может быть несколько, каждая со своими настройками.

На клиенте

файл /root/rsyncd.scrt содержит только пароль, запускать копирование командой:

# rsync -arPztuv --password-file=/root/rsyncd.scrt имя_пользователя@удаленный_ip::www /backup/www

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

# service xinetd start # chkconfig xinetd on

Добавить комментарий


Защитный код
Обновить