Внимание!!! Все файлы в которых будут меняться настройки обязательно нужно копировать в созданную в корне сервера папку copy.

Новые настройки вступят в силу после рестарта необходимой службы.

Новые настройки, влияние которых на работу сервера в дальнейшем неизвестно, после проведенных работ заменять на исходные (возвращать на старые).

CentOS, связка nginx и Apache

Материал из Справка по MediaWiki
Перейти к: навигация, поиск

Настройка сервера: операционная система CentOS, связка nginx и Apache.


// ================= Подготовка ================= // 0. Установка обновлений безопасноти

yum update

// 0.1. Временно отключим фаервол iptables

service iptables stop

// 1. Устанавливаем редактор Midnight Commander и русифицируем

yum install mc

localedef -i ru_RU -c -f UTF-8 ru_RU
export LANG=ru_RU

// Запуск редактора с русским языком без сохранения

LANG=ru_RU.UTF-8 mc

// русифицируем консоль

mcedit /etc/environment

// Добавляем строки

LANG="ru_RU"
LANGUAGE="ru_RU:ru"

// 2. Установка ftp сервера и настройка подключения по FTP // Загрузка дистрибутива

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

// Установка proftpd

yum install proftpd

// Добавляем в автозагрузку

chkconfig proftpd on

// Запускаем сервис proftpd

proftpd

// Добавляем пользователя ftpuser с назначением домашнего каталога /var/www/html/

useradd -d /var/www/html/ -M -s /bin/bash ftpuser

// Устанавливаем пароль (%mypassword) юзеру ftpuser

passwd ftpuser

// Удаление юзера

userdel user

// Сменим стандартный 21 порт

mcedit /etc/proftpd.conf

// Редактируем `Port 21` или создаем строку `Port 3301`

service proftpd restart

// Для входа используем:

сервер  - ip сервера, 

порт - 21 или 3301, логин - ftpuser, пароль - %mypassword </pre>

// ================= Nginx, Apache, Mysql, PHP, PMA ================= // 1. Установка nginx // для 32-битных ОС

rpm -ihv http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm  
rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm  

// для 64-битных ОС

rpm -ihv http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm  
rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
yum install nginx

// Создать автозагрузку nginx

chkconfig nginx on

// Настройка Nginx // содержимое /etc/nginx/nginx.conf

user www-data;
        error_log /var/log/nginx/error.log debug; 
        pid /var/run/nginx.pid;
        worker_rlimit_nofile 80000;

        events {
          worker_connections 2048;
        }

        http {
          include /etc/nginx/mime.types;
          default_type application/octet-stream;
          
          log_format main       ‘$remote_addr – $remote_user [$time_local] $status ‘
                                                ‘»$request» $body_bytes_sent «$http_referer» ‘
                                                ‘»$http_user_agent» «http_x_forwarded_for»‘;
          
          access_log /var/log/nginx/access.log main;

          server {
                listen    88.88.88.11:80;               
                server_name mysite.ru www.mysite.ru; 
                access_log  /var/log/nginx/host.access.log main;

                server_name_in_redirect off;
                
                # Максимальный размер буфера для хранения тела запроса клиента
                client_body_buffer_size 1K;
                # Максимальный размер буфера для хранения заголовков запроса клиента
                client_header_buffer_size 1k;
                # Максимальный размер тела запроса клиента, прописанный в поле Content-Length заголовка. Если сервер должен поддерживать загрузку файлов, это значение необходимо увеличить
                client_max_body_size 1k;
                # Количество и размер буферов для чтения большого заголовка запроса клиента
                large_client_header_buffers 2 1k;
                
                # Таймаут при чтении тела запроса клиента
                client_body_timeout 10;
                # Таймаут при чтении заголовка запроса клиента
                client_header_timeout 10;
                # Таймаут, по истечению которого keep-alive соединение с клиентом не будет закрыто со стороны сервера
                keepalive_timeout 5 5;
                # Таймаут при передаче ответа клиенту
                send_timeout 10;
                
                # Описываем зону (slimits), в которой будут храниться состояния сессий. Зона размером 1 Мб может хранить около 32000 состояний, мы устанавливаем ее размер равным 5 Мб
                limit_zone slimits $binary_remote_addr 5m;
                
                if ($host !~ ^(mysite.ru|www.mysite.ru)$ ) {
                        return 444;
                }

                if ($request_method !~ ^(GET|HEAD|POST)$ ) {
                        return 444;
                }
                
                # Блокируем менеджеры загрузки
                if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
                        return 403;
                }
                # Блокируем некоторые типы ботов
                if ($http_user_agent ~* msnbot|scrapbot) {
                        return 403;
                }
                                
                if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ){
                return 403;
                }

                # Секция ниже описывает параметры, по которых фронтенд обменевается с бэкендом,
                # такие, как адрес бэкенда, параметры прямого редиректа, параметры передачи заголовков,
                # максимальный размер принимаемых файлов и пр.
                location / {
                        proxy_pass      http://127.0.0.1:8080/;
                        proxy_redirect    off;
                        proxy_set_header  Host $host;
                        proxy_set_header  X-Real-IP $remote_addr;
                        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                        client_max_body_size 10m;
                        proxy_connect_timeout 90;
                        
                        # Задаем максимальное количество одновременных соединений для одной сессии. По сути, это число задает максимальное количество соединений с одного IP
                        limit_conn slimits 5;
                }

                # Эта секция отвечает за местонахождение и типы статичных файлов, обрабатываемых Nginx.
                # Вы можете добавить по аналогии расширения файлов, которые будут отдаваться Nginx'ом.
                # Динамические файлы мы будем отсылать на Apache
                location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|js)$ {
                  root /var/www/html/siteru/public_html;
                }
          }
        }
  

// 2. Установка Apache

yum install httpd   

// Настройка Apache // содержимое /etc/httpd/conf/httpd.conf

Listen 127.0.0.1:8080
        NameVirtualHost 127.0.0.1:8080
        ServerName localhost
        
                
                ServerAdmin webmaster@mysite.ru
                DocumentRoot /var/www/html/mysiteru/
                ServerName mysite.ru
                
                ErrorLog logs/mysite.ru-error_log
                CustomLog logs/mysite.ru-access_log common


// 3. Установка модуля RPAF

yum install mod_rpaf

// или

rpm -ivh http://download.ispsystem.com/repo/centos/release/6/x86_64/mod_rpaf-0.8.2-1.el6.x86_64.rpm

// Настройка RPAF /etc/httpd/conf.d/rpaf.conf

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP

// 4. Установка php и расширений

yum -y install php php-common php-gd php-mysql php-xml php-mbstring
yum install php-mcrypt*

// 5. Установка mysql, добавление в автозагрузку, запуск и смена пароля для root пользователя

yum -y install mysql mysql-server
chkconfig mysqld on
service mysqld start
mysqladmin -u root password 'new-password'

// 6. Установка и настройка PhpMyAdmin (PMA) https://www.phpmyadmin.net/downloads/ // Скачиваем архив с нужной версией pma (читай о совместимости на сайте pma). Распаковываем, переименовываем в каталог pma, удаляем архив.

cd /var/www/html/
wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.12/phpMyAdmin-4.0.10.12-all-languages.zip
unzip phpMyAdmin-4.0.10.12-all-languages.zip
mv phpMyAdmin-4.0.10.12-all-languages pma
rm phpMyAdmin-4.0.10.12-all-languages.zip

// 7. Перезагрузка

service mysqld restart
service httpd restart
service nginx restart

// ================= SSH, Iptables ================= // 1. Изменение порта SSH // В конфиге ищем строку `Port 22` и меняем на `Port 3302` m cedit etc/ssh/sshd_config

// Перезагрузка

/etc/init.d/sshd restart

// Проверка

netstat -anp | grep ssh

// 2. Настройка брендмауэра // Сбросим все правила фаервола:

iptables -F

// Блокируем нулевые пакеты

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

// Отражаем атаки syn-flood

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

// Защищаем сервер от разведывательных пакетов XMAS

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

// Вносим выбранные сервисы в фильтр фаервола. Чтобы внести локальный интерфейс

iptables -A INPUT -i lo -j ACCEPT

// Разрешаем трафик веб-сервера (http и https)

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

// Разрешаем пользователям работать с SMTP-сервером

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

// Разрешаем читать электронную почту

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

// Разрешаем доступ по протоколу IMAP

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

// Разрешаем трафик SSH (вместо стандартного 22 используем 3302)

iptables -A INPUT -p tcp -m tcp --dport 3302 -j ACCEPT

// Разрешаем трафик FTP (вместо стандартного 21 используем 3301)

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

// Разрешаем устанавливать исходящие соединения

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

// Блокируем все остальное и разрешаем все исходящие соединения

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

// Смотри список установленных правил, сохраняем, перезагружаем

iptables -L -n
iptables-save
service iptables start