Je possède un site hébergé sur un VPS de 1 Go sous Ubuntu 10.04 LTS. J'utilise nginx comme serveur web. Le site fonctionne dans une configuration relativement stable depuis trois ans, et gère environ 4 millions de pages vues par mois.
Depuis les 16 dernières heures, je pense être victime d'une attaque DDoS "modérée". Le trafic sortant a été multiplié par 5, et l'utilisation du CPU a à peu près triplé. Dans les logs de nginx, je vois une ou deux adresses IP chaque seconde envoyant plusieurs requêtes simultanément (1-10 chacune). Ces requêtes semblent ne pas être dirigées vers mon URL, mais directement vers mon adresse IP. Comme je suis assez à l'aise avec le fichier nginx.conf, j'ai configuré un bloc serveur "par défaut" pour intercepter ce trafic et le journaliser. Je l'ai configuré pour enregistrer ce trafic et lui renvoyer le code d'erreur 444. J'ai également mis en place les directives limit_req_zone et limit_conn_zone pour ce trafic, même si ce sont différentes adresses IP qui envoient les requêtes, ce qui a peu d'impact. Voici la section pertinente du fichier nginx.conf:
limit_req_zone $binary_remote_addr zone=ddos:25m rate=1r/m;
limit_conn_zone $binary_remote_addr zone=blockedfuckers:20m;
server {
listen 80 default_server;
server_name _;
access_log /var/log/nginx/a2.log hackers;
limit_req zone=ddos nodelay;
limit_conn blockedfrakers 1;
return 444;
}
Cela a réduit l'utilisation du CPU d'environ 30%, mais le trafic sortant est toujours élevé, et le CPU est toujours plus de deux fois supérieur à la normale. Pour une raison quelconque, le journal montre que les requêtes renvoient une réponse 400, et non le 444 que j'essaie d'envoyer. Par exemple:
109.198.195.28 [12/Mar/2013:22:49:24 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
107.199.204.111 [12/Mar/2013:22:49:36 -0400], REQLENGTH: 0, STATUS: 400, HTTPHEADER: -
Ces requêtes me semblent "vides", donc j'essaie de configurer iptables pour simplement les bloquer, mais les quelques essais que j'ai faits n'ont pas fonctionné. Des idées sur comment cibler et bloquer ce trafic?