Estou executando alguns servidores de hospedagem na Web com o Directadmin. Estou executando o Apache como servidor web principal com o Nginx funcionando como um proxy na frente dele.
Para manter o Nginx "invisível" no Directadmin, executo o Nginx na porta 81 e encaminha todas as conexões que chegam à porta 80 para a porta 81 e, em seguida, deixo o Nginx funcionar como um proxy (baseei minha configuração em esta postagem ). Isso vem funcionando perfeitamente há mais de um ano.
A coisa é que ontem começamos a notar um ataque em alguns de nossos servidores. Nós recebemos pedidos como este (obtidos do mod_status do Apache):
11-2 29087 0/17/17 W 1.88 19 0 0.0 0.07 0.07 31.7.58.56 www.somedomain.com GET http://124.108.121.178/?.src=pop&.intl=e1&.help=1&.v=0&.u=c
12-2 29105 0/5/5 W 0.02 42 0 0.0 0.06 0.06 95.79.20.72 www.somedomain.com GET http://chek.zennolab.com/proxy.php HTTP/1.1
13-2 29111 0/14/14 W 0.29 26 0 0.0 0.07 0.07 87.227.9.151 www.somedomain.com POST http://arhack.net/vb/index.php HTTP/1.1
14-2 29113 0/5/5 W 0.80 35 0 0.0 0.00 0.00 94.153.69.101 www.somedomain.com GET http://72.14.203.105/search?as_q=%22/yybbs53a/yybbs.cgi%22+
15-2 29117 0/12/12 W 1.16 19 0 0.0 0.06 0.06 27.159.254.158 www.somedomain.com GET http://search.sky.com/web?term=chiropractic+seattle+%22Rece
16-2 29118 0/5/5 W 0.61 36 0 0.0 0.30 0.30 31.7.58.56 www.somedomain.com GET http://217.146.187.123/?.src=pop&.intl=e1&.help=1&.v=0&.u=c
17-2 29119 0/3/3 W 0.71 38 0 0.0 3.95 3.95 203.116.85.147 www.somedomain.com GET http://119.160.247.158/?.src=pop&.intl=e1&.help=1&.v=0&.u=c
18-2 29120 0/4/4 W 0.52 36 0 0.0 0.06 0.06 176.9.25.25 www.somedomain.com GET http://www.bing.com/search?q=link%3Arapidvisa.com&setplang=
19-2 29132 0/12/12 W 1.75 25 0 0.0 0.08 0.08 176.31.122.7 www.somedomain.com GET http://www.baidu.com/%22>Inicio</a>+|+<a+href=%22/webmail%2
20-2 29142 0/11/11 W 1.48 20 0 0.0 0.58 0.58 87.245.203.22 www.somedomain.com GET http://www.baidu.com/ HTTP/1.1
O problema é que, se eu deixar as solicitações chegarem ao Apache, a média de carga começará a aumentar. Se eu suspender o domínio (o que faz com que o Apache simplesmente retorne uma página de erro, sem muito processamento), ele ficará muito melhor. Então, o que eu gostaria de fazer é fazer com que o Nginx negue esse tipo de requisição para que eles nem cheguem ao Apache.
Como devo fazer isso?
Eu tentei adicionar isso, mas não funcionou (talvez o regexp esteja errado).
location ~* ^http.* {
deny all;
}
Aqui está meu nginx.conf
( X.X.X.X
é o IP público do meu servidor):
user apache;
worker_processes 4;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
## Size Limits
client_body_buffer_size 128K;
client_header_buffer_size 128K;
client_max_body_size 1M;
large_client_header_buffers 1 1k;
## Timeouts
client_body_timeout 60;
client_header_timeout 60;
keepalive_timeout 60 60;
send_timeout 60;
## General Options
ignore_invalid_headers on;
keepalive_requests 100;
limit_zone gulag $binary_remote_addr 5m;
limit_rate 512k;
recursive_error_pages on;
sendfile on;
server_name_in_redirect off;
server_tokens off;
## TCP options
tcp_nodelay on;
tcp_nopush on;
## Compression
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types text/plain text/css image/x-icon application/x-perl application/x-httpd-cgi;
gzip_vary on;
server_names_hash_bucket_size 64;
reset_timedout_connection on;
server {
listen 0.0.0.0:81;
server_name myserver.fqdn.com _;
charset off;
access_log off;
limit_conn gulag 20;
# Main reverse proxy for most requests
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://X.X.X.X; # apache here
client_max_body_size 16m;
client_body_buffer_size 128k;
proxy_buffering on;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 120;
proxy_buffer_size 8k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
error_page 502 503 /50x.html;
}
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location ~* ^http.* {
deny all;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/html;
}
}
Tags nginx reverse-proxy apache-2.2 ddos