X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Рекомендации по настройке сервера и системы управления контентом DataLife Engine.
Сергуня
Сергуня
Topic Starter сообщение 21.12.2011, 16:41; Ответить: Сергуня
Сообщение #1


Бывалый
****

Группа: User
Сообщений: 284
Регистрация: 13.4.2008
Из: Подгорица
Поблагодарили: 48 раз
Репутация:   11  


Приветствую всех, кто посвящает этим строкам свое драгоценное время.

В этой статье я хочу рассказать о способах оптимально настроить сервер и систему управления контентом DataLife Engine. За 4 года работы с интернет сайтами и серверами я усвоил, что безопасность превыше удобства и что ей нужно уделять внимание. Оговорка: я не претендую на авторство чьей-либо интеллектуальной собственности! Весь материал собран на просторах интернета.

Ниже будут описаны действия, которые помогут распределить нагрузку сервера, обезопасить его от DOS атак, ограничить доступ к FTP протоколу и правильно сконфигурировать систему DataLife Engine.

Защита и конфигурация вашего сервера.

1. Настройка конфигурации сервера с использованием связки front-end Nginx к Apache.


Преимущества подобной схемы можно понять на небольшом примере. Представьте себе, что вашему веб серверу Apache необходимо обслужить порядка 1000 запросов одновременно, причем многие из них подключены к медленным каналам связи. В случае использования Apache мы получим 1000 процессов httpd, на каждый из которых будет выделена оперативная память, и эта память не освободится до тех пор, пока клиент не получит запрошенный контент.

В случае схемы с применением front-end сервера получим значительную экономию ресурсов за счет того, что после поступления запроса, nginx передает запрос Apache и быстро получает ответ. В итоге, Apache, после того как отдал ответ nginx, освобождает память. Далее с клиентом взаимодействует веб-сервер nginx, который как раз и написан для раздачи статического контента большому количеству клиентов при незначительном потреблении системных ресурсов.

Для корректной работы нашей связки понадобиться модуль mod_rpaf для Apache. Возникает такая необходимость по следующей причине: запросы к Apache приходят с IP-адреса, на котором работает nginx, соответственно, в журнальных файлах Apache будет фигурировать только IP-адрес nginx сервера. Также без использования данного модуля начнутся проблемы со скриптами, в которых используется IP-адрес посетителя и перестанет правильно работать механизм ограничения доступа по IP-адресам с помощью .htaccess.

Установка NGINX на популярные ОС.

Red Hat Enterprise Linux 4 / CentOS 4
Для установки nginx в этих операционных системах вам необходимо подключить дополнительный репозиторий пакетов.

Red Hat Enterprise Linux 5 / CentOS 5
Для установки nginx в этих операционных системах вам необходимо подключить дополнительный репозиторий пакетов EPEL.

ASPLinux Server 5 / Fedora
nginx присутствует в стандартной поставке дистрибутива.

Если репозитории подключены или просто не требуются, выполняем: yum install nginx

Установка Apache.

Чтобы установить Apache веб-сервер достаточно выполнить: yum install httpd

Установка mod_rpaf.

1. Устанавливаем пакет httpd-devel:
yum -y install httpd-devel

2. Скачиваем и устанавливаем mod_rpaf:
Входим в директорию /usr/local/src
cd /usr/local/src

Загружаем в /usr/local/src файл mod_rpaf-0.6.tar.gz
wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz

Распаковываем mod_rpaf-0.6.tar.gz
tar xzf mod_rpaf-0.6.tar.gz

Переходим в каталог в который распаковали
cd mod_rpaf-0.6

Ставим модуль в систему
apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

3. Далее нужно создать файл конфигурации mod_rpaf - /etc/httpd/conf.d/rpaf.conf и добавить в него следующие строки:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFproxy_ips 127.0.0.1 xx.xx.xx.xx yy.yy.yy.yy

где xx.xx.xx.xx и yy.yy.yy.yy - IP адреса вашего сервера. Если на сервере более двух IP, добавьте их по той же аналогии.

Далее требуется перезапустить Apache, для этого выполните команду
service httpd restart

4. В nginx внутри блока http {} должны быть указаны строки:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Если данные строки указаны, дописывать не нужно.

Если модифицируется nginx.conf, следует перезапустить nginx:
/etc/init.d/nginx stop
/etc/init.d/nginx start

5. Как проверить, работает ли установленный модуль?
На любом из доменов, которые расположены на Вашем сервере, разместите файл test.php с содержимым:
"<? echo $_SERVER['REMOTE_ADDR']; ?>"

Далее зайдите по ссылке http://domain.com/test.php, где domain.tcom - имя вашего домена. Если отображается IP, отличающийся от IP вашего сервера, модуль работает корректно.

Настройка NGINX.

Ниже приведен конфигурационный файл nginx для работы в качестве front-end сервера. Подразумевается, что nginx будет работать на всех интерфейсах на 80 порту, а Apache будет работать на интерфейсе 127.0.0.1 и порту 8080. Сохраните данный конфигурационный файл в каталоге /etc/nginx/ с именем nginx.conf.

user  nginx;
worker_processes  10;
error_log  /var/log/nginx/error.log debug;
pid        /var/run/nginx.pid;

events {
worker_connections  20000;
}

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;
sendfile       on;
tcp_nopush     on;
tcp_nodelay    on;
keepalive_timeout  30;
send_timeout       900;
server_tokens      off;
server {
listen       80;
server_name     _;
server_name_in_redirect  off;
access_log  /var/log/nginx/host.access.log  main;
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;
client_body_buffer_size    128k;
proxy_connect_timeout      90;
proxy_send_timeout         90;
proxy_read_timeout         90;
proxy_buffer_size          4k;
proxy_buffers              4 32k;
proxy_busy_buffers_size    64k;
proxy_temp_file_write_size 10m;
}
}

}

Настройка Apache.

В файле конфигурации Apache /etc/httpd/conf/httpd.conf найдите строку:
Listen:80

и замените ее строкой:
Listen 127.0.0.1:8080

Настройка mod_rpaf.

Добавьте модуль mod_rpaf в файл конфигурации Apache. Для этого в файл /etc/httpd/conf/httpd.conf добавьте следующую строку:
LoadModule rpaf_module modules/mod_rpaf-2.0.so

Затем в этот же файл добавьте строки:
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1 192.168.0.1
RPAFheader X-Real-IP

Вместо 192.168.0.1 необходимо поставить IP-адрес сервера.

2. Конфигурация сервера для защиты от dos-атак.

Включаем в nginx кеширование главной страницы для тех у кого нет cookie.

Добавляем ограничения в nginx.conf:
limit_req_zone $binary_remote_addr zone=two:20m rate=2r/s;
server{
location / {
limit_req zone=two burst=5;
}
}
}

Пользуемся tail и awk:
tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1" 503

Подключаем лог:
tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1" 503 | awk '{ print $1 }'

Получаем IP машин:
iptables -A INPUT -p tcp -j DROP -s $IP

Заносим IP в Firewall:
tail -f /var/log/nginx/access.log | grep GET / HTTP/1.1" 503 | awk '{ print $1 }' | xargs -t -l iptables -A INPUT -p tcp -j DROP –s

Теперь установим connlimit для iptables чтобы ограничить подключения ботов. В правилах ставим разрешение на 5 подключений с одного IP, и 25 из подсети класса С.

DDOS атака с 16000 ботов - Load average : 1.4 1.9 2.0

Ограничение доступа по FTP

Для этого нам понадобитсья файл .ftpaccess. Он поможет запретить или разрешить доступ по FTP с указанных IP адресов. Кто-то может задать вопрос: «У меня динамический IP, как мне правильно использовать .ftpaccess?» Ответ я подразумеваю только такой: «Если вам нужна данная надстройка безопасности - приобретите у вашего провайдера статический IP. Много денег у вас за него не попросят.»

Чтобы создать .ftpacces файл нам понадобиться SSH доступ. Можно воспользоваться программой winscp. Настроек в .ftpaccess может быть большое множество, однако нас интересует только один параметр. Прописав эти строки в файле вы закроете полностью доступ от всех:
<Limit ALL>
Deny from all
</Limit>

После написанного выше, никто не сможет зайти на ФТП. Для добавления разрешения доступа определенному IP нужно указать следующие параметры:
<Limit ALL>
Allow from 127.0.0.1
Deny from all
</Limit>

Естественно адрес 127.0.0.1 указан для примера и его нужно заменить на собственный.

Важно! Лучше всего запретить доступ по FTP абсолютно всем и подклчаться только по SSH.

Защита системы управления контентом DataLife Engine.

1. Установите и настройте ZEOS Antivirus.

2. Переименуйте файл админпанели и сделайте фейк по старому адресу (www.sait.com/admin.php) при переходе на который пользователь будет заблокирован посредством запрета его ip в .htaccess.

Переименовали? Теперь создаем в корневом каталоге файл ip.txt для хранения ip-адресов. Даем ему и .htaccess права CHMOD – 777.

Создаем файл admin.php следующего содержания:
<?php

$ip = getenv ("REMOTE_ADDR");
  
$log = fopen("ip.txt", "a+");
fwrite($log, "// ".$ip."\n");
fclose($log);

$f = fopen($_SERVER['DOCUMENT_ROOT'] . '/.htaccess', "a");
fwrite($f, "\ndeny from " . $ip);
fclose($f);

echo <<<HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">

<head>
    <meta http-equiv="content-type" content="text/html; charset=1251" />
    <meta name="author" content="admin" />

    <title>Админ панель DataLife Engine</title>
</head>

<body bgcolor="black" text="white">

<center><img src="тут изображение выводимое на странице"></center>
<center><h1>Текст, например: Твой ip в логах, я найду тебя!</h1></center>

</body>
</html>
HTML;

echo "<center><h1>Бойся, ничтожество, ха-ха!</center></h1>"

?>

3. Добавим дополнительную аутентификацию в админцентре.

Необходимо придумать еще один логин и пароль (не используйте данные вашего административного аккаунта). Второй логин и пароль должен в корне отличаться от первого. Определились? Отлично! Теперь зашифруем наш пароль в md5 (сделать это можно на сайте md5encryption.com).
Далее открываем admin.php (вспомните, ранее мы его переименовали и, по этому, если вы назвали его superadmin.php - вам необходимо открывать именно этот его) и после строки:
<?php

добавляем:
$login="вписываем придуманный логин";
$password="и сгенерированный пароль в md5";
if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER']!==$login ||
md5($_SERVER['PHP_AUTH_PW'])!==$password) {
header('WWW-Authenticate: Basic realm="Admin Panel"');
header('HTTP/1.0 401 Unauthorized');
exit("Access Denied");}

4. Отключим неиспользуемые системой функции php.

Для поиска файла php.ini создаем файл phpinfo.php с текстом:
<? phpinfo() ?>

После поиска обязательно удалить phpinfo.php!

Далее открываем php.ini и выключаем следующие функции:
disable_functions = allow_url_fopen, eval, exec, system, passthru, scandir, popen, shell_exec, proc_open, proc_close, proc_nice, get_current_user, getmyuid, posix_getpwuid, apache_get_modules, virtual, posix_getgrgid, getmyinode, fileowner, filegroup, getmypid, apache_get_version, apache_getenv, apache_note, apache_setenv, disk_free_space, diskfreespace, dl, ini_restore, openlog, syslog, highlight_file, show_source, symlink, disk_total_space, ini_get_all, get_current_user, posix_uname, allow_url_fopen

5. Создаем фильтрацию GET и POST запросов, предотвращаем инъекции в БД и получение из нее данных.

Создаем файл .php с произвольным названием и следующим содержимым:
<?php
//поставить еденицу если хотите включить отладку запросов
$debug = 0;

$bag_req = array("select", "eval", "echo", "UPDATE", "LIMIT", "INSERT", "INTO", "union", "CONCAT", "INFORMATION_SCHEMA", "OUTFILE", "DUMPFILE", "LOAD_FILE", "BENCHMARK", "SUBSTRING", "ASCII", "CHAR", "database", "HEX", "\\.\\/", "%00", "\\.htaccess", "config\\.php", "document\\.cookie");
$request = serialize($_GET);
$urequest = urldecode($request);
$brequest = base64_decode($request);
if($_GET)
{
foreach ($bag_req as $key => $value) {
  if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest))
  {
   if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request";
   die("BAD REQUEST $do_debug");
   }
}
}
if($_POST)
{
$request = str_replace("selected_language", "sl", serialize($_POST));
$urequest = urldecode($request);
$brequest = base64_decode($request);
foreach ($bag_req as $key => $value) {
  if(preg_match("/$value/i", $request) || preg_match("/$value/i", $urequest) || preg_match("/$value/i", $brequest))
   {
   if($debug == "1") $do_debug = "<br>В массиве найден запрос <b>$value</b> , который блокирует правильную работу<br>$request";
   die("BAD REQUEST $do_debug");
   }
}
}
?>

Сохраняем его на сервере в любом каталоге системы DLE. Открываем файл engine/classes/mysql.php и после:
<?php
if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}

подключаем созданный файл:
include_once( ENGINE_DIR."/путь_к_файлу/название.php" );

6. Используя бесплатные компоненты к DLE обязательно узнайте мнение специалиста о их надежности.

При возникновении вопросов обращайтесь к поисковым системам - весь материал в свободном доступе!
Есть что добавить? Милости прошу к обсуждению!

Удачи вам и вашим проектам!


--------------------


Поблагодарили: (1)
5
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВедение групп ВК/ФБ/ОД, администрирование, наполнение контентом, проведение конкурсов...
Качественно
106 Hydra 44210 Вчера, 19:27
автор: Hydra
Открытая тема (нет новых ответов) [РЕКОМЕНДУЮ] >>>Тестирование Вашего сайта, сервера на устойчивость и уязвимость!
17 barbaddos 2293 Вчера, 16:57
автор: barbaddos
Открытая тема (нет новых ответов) SystemIP.ru - VPS и сервера в более чем 50 странах
19 SystemIP 4617 4.12.2017, 21:37
автор: SystemIP
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыОказываю услуги по CMS Datalife Engine
Большой спектр услуг
276 bobur 96271 4.12.2017, 18:41
автор: bobur
Открытая тема (нет новых ответов) Подскажите решение для управления рекламой на сетке сайтов WP и DLE
2 Autorealt 641 25.11.2017, 15:37
автор: Autorealt


 



RSS Текстовая версия Сейчас: 12.12.2017, 13:01
Дизайн