gixyでNginxの設定ファイルの脆弱性を検査する

Nginxでは設定に不備があるとSSRFやHTTP Response Splittingなどの脆弱性が生じる。 例えば以下のような感じだとHTTP Response Splittingが生じる。 server { listen 6789 default; location ~ /v1/((?<token>[^.]*)\.json)?$ { add_header X-Action $token; return 200 "OK"; } } $ curl localhost:6789/v1/test%0d%0aCookie:%20test.json HTTP/1.1 200 OK Server: nginx/1.13.12 Date: Sat, 02 Jun 2018 14:42:38 GMT Content-Type: application/json Content-Length: 2 Connection: keep-alive X-Action: test Cookie: test OK gixyを使うとこのような脆弱性を検査してくれる。 $ gixy /path/to/nginx.conf ==================== Results =================== >> Problem: [http_splitting] Possible HTTP-Splitting vulnerability. Severity: HIGH Description: Using variables that can contain "\n" or "\r" may lead to http injection.

Nginxで動的リバースプロキシの設定をするメモ

サブドメインを動的に設定してリバースプロキシとして動作させ、LXCコンテナに振りたいなぁという要望が出たのでメモ。 Cybozuだとデータベースファイルを読み込んでやっているらしいが、ここではRedisを使ってみる。 NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした 動作イメージとしては以下のような感じ。 redisにはコンテナ名をkeyとして値にコンテナのIPアドレスが入っている。 > get container1 10.16.29.10 Nginxの動作としては以下のような感じ。 container1.example.comにアクセス Redisにcontainer1というkeyがあればvalueであるIPアドレスに転送 container1というkeyがなければ404を返す 環境 openresty-1.11.2.4 dnsmasq redis 手順 何はともあれopenrestyをインストールする。 hostsではサブドメインのワイルドカードに対応していないので、dnsmasqを利用した。 dnsmasq.confの設定。本番ではちゃんとDNSの設定をしよう。 address=/example.com/127.0.0.1 nginx.confの設定。 server { listen 80; server_name ~^(?<subdomain>[^\.]+).example.com; location / { set $upstream ""; rewrite_by_lua ' local redis = require "resty.redis" local client = redis:new() client:connect("127.0.0.1", 6379) local result, err = client:get(ngx.var.subdomain) if result == ngx.null then ngx.exit(404) else ngx.var.upstream = result end '; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://$upstream; proxy_redirect ~^(http://[^:]+):\d+(/.