Защита друпала от DoS-Атаки

Главные вкладки

Аватар пользователя LEV LEV 10 марта 2007 в 21:56

Я подебаггил код, там прежде чем 404 или 403 страница выдается, столько запросов, столько операций со строками...
По моему скромному мнению 404 и 403 страницы должны быть минимального размера без PHP и MySQL
Что скажете, уважаемые?

Комментарии

Аватар пользователя LEV LEV 10 марта 2007 в 21:58

Вот один хрен нагенерил тучу урлов и запрашивал их с интервалом в пару секунд.
Когда я обнаружил, MySQL уже лежал.

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 10 марта 2007 в 22:11

Можете определить 404-ю страницу с помощью .htaccess

# Customized error messages.
ErrorDocument 404 /index.php


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя LEV LEV 10 марта 2007 в 23:09

Она и определена, но проблема в том, что index.php сильно подгружает сервер, в случае намеренной загрузки сервера хулиганами

Аватар пользователя SadhooKlay SadhooKlay (не проверено) 11 марта 2007 в 4:30

Мы с коллегой для сайта ЗАО Союзгрузпромтранс делали это так:

ErrorDocument 403 http://www.microsoft.com
ErrorDocument 404 http://www.microsoft.com

Очень забавляло : )



----------------------------------------------------------
Локализация некоторых модулей

Аватар пользователя dbzer0 dbzer0 11 марта 2007 в 5:04

Самого атаковали не раз. Средствами друпала защититься не удается. Хотя я писал как-то демон (не было возможности юзать iptables), которая брала данные с netstat по количеству соединений чекала, их проверяла свой список, если ip данного не было то прописывала в .htaccess
deny <тут_ip> (вроде так, не помню точно, но тут есть спецы htaccess)

Реализация этого метода осталась на c+bash, если найду и если надо могу выложить, хотя эт элементарно.
А по хорошему нужно делать эту же связку с фаерволом, чтоб он сам добавил правило (вместо записи в htaccess)

Аватар пользователя LEV LEV 13 марта 2007 в 3:23

Quote: "ErrorDocument 404 /error.html"
При стандартном .htaccess запрос в любом случае пойдет к index.php, даже при определении ErrorDocument.
Лучше вставить в drupal_not_found() в common.inc:

<?php
  drupal_set_header('HTTP/1.0 404 Not Found');
  watchdog('page not found', $_GET['q'], WATCHDOG_WARNING);
  /*!!!*/
  if($_GET['q'])
  {
    print '<title>404 Not Found</title><h1>Not Found</h1><hr><p>Page not found.';
    die;
  }
  /*!!!*/
?>

а в .htaacess можно написать:

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !^.*\.(ico|jpg|png|gif|bmp|css|js)$
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^.*\.(ico|jpg|png|gif|bmp|css|js)$ nothing [L,QSA]

и создать файл nothing в корне сайта, размером в один байт.
тогда по битым урлам с этими расширениями будет выдаваться содержимое файла nothing.

или так:

  ErrorDocument 404 /404.htm
 
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !^.*\.(ico|jpg|png|gif|bmp|css|js)$
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

тогда по битым урлам картинок, стилей и ява-скриптов, будет выдаваться содержимое файла 404.htm.
правда, работает, если это site.ru/bad.css, а если это site.ru/node/bad.css, то не работает, но все равно полезно от генераторов урлов, которые генерируют их для корня сайта.

Quote: "ErrorDocument 403 http://www.microsoft.com"
и впрям забавно Smile бедный майкрософт.ком!

Quote: "deny <тут_ip>"
Спасибо, поробуем.

Аватар пользователя Shedko Shedko 13 марта 2007 в 3:32

А что если через Plesk выключить "настраиваемые странички об ошибках" и просто использовать те которые предоставляет аппач из папки "error_docs".

Может это будет самым простым решением ?
Или я не прав ?

Аватар пользователя LEV LEV 15 марта 2007 в 11:34

чтобы попасть на страничку об ошибке, будь она хоть простая, будь она настраеваемая, сперва на нее человек должен попасть, а он не попадет, если в .htaccess все вызовы идут на index.php, и на страницу ошибок человек попадет, только если не будет найден index.php

Аватар пользователя LEV LEV 15 марта 2007 в 11:40

Странно, у меня на локалхосте и на одном сайте на руцентре такая вставка в функцию drupal_not_found() работает нормально, а на другом выдается пустая страничка. Пока не разобрался почему, возможно из-за модуля mod_expires.