Сервер: Настройка сервера 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 localhost
	
		
		ServerAdmin [email protected]
		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

// Готово.
Сервер 7.7 г. Просмотров: 21k
Оценить код:

Код был обновлён. Предыдущий рейтинг:

  • Бесполезный код - 0 голосов
  • Костыль - 0 голосов
  • Полезный код - 1 голос

Комментарии

Ваш комментарий будет первым.
Войдите, чтобы оставить комментарий.