nginx DDOSとDOSの戦い

FreeBSD、ネットワークIntel fxp、ポート100Mbps、ポーリング、http accept-filter

sysctlで:



sysctl kern.maxfiles=90000

sysctl kern.maxfilesperproc=80000

sysctl net.inet.tcp.blackhole=2

sysctl net.inet.udp.blackhole=1

sysctl kern.polling.burst_max=1000

sysctl kern.polling.each_burst=50

sysctl kern.ipc.somaxconn=32768

sysctl net.inet.tcp.msl=3000

sysctl net.inet.tcp.maxtcptw=40960

sysctl net.inet.tcp.nolocaltimewait=1

sysctl net.inet.ip.portrange.first=1024

sysctl net.inet.ip.portrange.last=65535

sysctl net.inet.ip.portrange.randomized=0









nginxの瞬間:



worker_processes 1;

worker_rlimit_nofile 80000;

events {

worker_connections 50000;

}



server_tokens off;

log_format IP '$remote_addr';

reset_timedout_connection on;



listen xx.xx.xx.xx:80 default rcvbuf=8192 sndbuf=16384 backlog=32000 accept_filter=httpready;








たとえば、POST基準によるURLフィルタリングindex.php?action =空のリファラーを使用したログインは、次のように実装できます。

set $add 1;

location /index.php {

limit_except GET POST {

deny all;

}

set $ban “”;

if ($http_referer = “” ) {set $ban $ban$add;}

if ($request_method = POST ) {set $ban $ban$add;}

if ($query_string = “action=login” ){set $ban $ban$add;}

if ($ban = 111 ) {

access_log /var/log/nginx/ban IP;

return 404;

}

proxy_pass 127.0.0.1:8000; #

}









それから彼らはpfレベルでそれをカットしました-あまりにも多くのヒットが来たIPテーブルにロードされました。 テーブルを使用したPFは非常に高速に動作します。 ログパーサーのソースコードはwww.comsys.com.ua/filesにあります。



さて、王冠によると、1分に1回、ログから新しいIPをIPテーブルに追加します。



25Mbps DDoS、ほとんどはIPカット、残りはnginxに送られ、基準に従って、IPをトレーニングし、残りをApacheにプロキシします-LA 0、サイトは動作します。



All Articles