DoS attack to Apache. Part2

В первом методе я настроил защиту апача через модули. Это конечно работает. Но есть еще один способ и как по мне, лучше первого. Ставим NGINX как прокси для веб-сервера Apache.

Полностью описывать установку  и настройку Apache+NGINX нет смысла, так как информации в сети полно мануалов. Смысл в том, что apache переносится на порт, например, 8080, а nginx слушает порт 80 и все запросы проксирует на апач. Можно также настроить, чтобы nginx отдавал только статику (jpg, gif. png например) , а остальное перебрасывал на апач.

Тогда все становится проще. Вот конфиг, который у меня получился.
/etc/nginx/nginx.conf

user  nginx;
worker_processes  4;
error_log  /var/log/nginx/error.log debug;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
limit_zone   one  $binary_remote_addr  4m;
     limit_conn   one  8;
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;
}
}
}

Ключевые строки я выделил.
Чтобы не прокатывали slow-http атаки, достаточно увеличить worker_connections (максимальное число соединений для одного процесса, по-умолчанию 512) и поставить параметр limit_conn   one  X – где Х  – число подключений с одного адреса.
Также рубим большие запросы client_max_body_size 10m (по-умолчанию 1m), это тело запроса, что содержится в Content-Lenght.
Ну и таймауты:
    proxy_send_timeout         90; – таймаут при передаче через прокси запроса
proxy_read_timeout         90;  – таймаут при чтении ответа от веб-сервера
 
 
Итого: После этого проверял все той же утилитой HttpDosTool и сервак положить не удалось.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *