nginx + eval + memcached : check block id
API認証をどうしようかと
memcachedにブロックidを入れて、チェックしようと思います。
1. nginx でmemcachedからデータを取得
ng => 403
ok => 2
2. アプリケーションサーバーへ
idが正常 => データを返す + ログをfluentdへ流す => 3,
idが不正(桁数や簡単な法則チェックのみ) => memcachedへblockidとして登録。403を返す。
ipチェックもする
3. 正常時
fluentd + redisでidカウンタ
数値が上がったらアラート
→異常値→4
4. 異常値確認
異常値だったらmemachedへblockidとして登録
// 別プロセスで定期的にredisをチェック。
これでいけそうです。
/// インストール
http://blog.bbtune.com/archives/2412/nginx-exchange-header
以前と同じ方法でrpmを作ります。
https://github.com/agentzh/nginx-eval-module
1.0.3を使わせていただきます。
–add-module=/tmp/nginx/nginx-eval-module-1.0.3\
debugバージョンと2つあるので両方入れておきます。
nginx conf
server 127.0.0.1:30101;
}
server {
# underscores_in_headers on;
server_tokens off;
listen 80;
server_name dev.test;
access_log /var/log/nginx/dev.test.access.log main;
error_log /tmp/nginx_debug_log debug;
location / {
eval $var {
set $memcached_key $http_x_auth;
memcached_pass localhost:11211;
}
if ($var != 1) {
proxy_pass http://api_server;
break;
}
return 403;
}
}
Trying 127.0.0.1…
Connected to 127.0.0.1.
set abc 0 0 1
1
STORED
200 OK
403 Forbidden
な感じになりました。登録されいると403を返すようになりました。これでmemcachedに拒否リストを入れます。