Быстрая настройка web-сервера nginx на базе CentOS
Предполагается, что сама операционная система уже установлена в минимальной конфигурации. Остается настроить сам web-сервер и другие необходимые службы:
- Предварительная подготовка
- Настройка времени
- Установка сервера MariaDB
- Установка сервера Nginx
- Настройка iptables
- Настройка rsync
Предварительная подготовка
Настройка 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