Сервер: Настройка сервера centOS 6 + apache + ngnix
Настройка сервера: операционная система 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 сервера, порт - 3301, логин - ftpuser, пароль - %mypassword // ================= 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 localhostServerAdmin 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` mcedit 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 // Готово.
Оценить код:
Код был обновлён. Предыдущий рейтинг:
- Бесполезный код - 0 голосов
- Костыль - 0 голосов
- Полезный код - 1 голос
Комментарии