Splunk に Nginx のリバースプロキシで HTTPS 通信する

前回 Splunk の無償版の環境を構築した。

今回は、この Splunk に HTTPS でアクセスするためのリバースプロキシ設定を行う。

公式日本語ドキュメントでは Apache と Squid のみがサポートされている口ぶりだが、公式ブログでは Nginx の例が書かれている。

やりたいこと

以下3つ。

  • Splunk への通信を HTTPS 化したい
  • HTTPS 通信は Nginx を終端としたい( SSL オフロード、SSL アクセラレーション)
  • Nginx は Splunk と同じサーバで起動したい
  • Splunk への直接アクセスを禁止したい

つまり、以下のように Splunk へのアクセスを全てリバースプロキシ経由としたい。

  • HTTPS:ブラウザ <–> Nginx
  • HTTP:Nginx <–> Splunk

Nginx <–> Splunk 間も HTTPS 通信したい場合は、Splunk を SSL 化しておく必要がある。

Nginx インストール

公式を参照。

リポジトリを登録し yum からインストールできるようにする。

sudo vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/
gpgcheck=0
enabled=1

nginx をイントール。

sudo yum install nginx

バージョンを確認。

nginx -v

# 1.15.1 がインストールされた
nginx version: nginx/1.15.1

nginx を起動。

sudo service nginx start
sudo chkconfig nginx on

http://192.168.33.40/ にアクセスすると Nginx の Welcome 画面が表示されることを確認。

自己証明書作成

SELinux無効にしておく。

setenforce 0

オレオレ証明書を作成する。 SSL Encrypt のほうがいいが、ローカルでテスト的に作るだけだなので問題なし。。

sudo su -
openssl genrsa -out SERVER_CERT.key 2048
openssl req -sha256 -new -key SERVER_CERT.key -out SERVER_CERT.csr
openssl x509 -sha256 -req -days 3650 -in SERVER_CERT.csr -signkey SERVER_CERT.key -out SERVER_CERT.crt

3つのファイルが作成されていることを確認。利用するのは crt と key ファイル。

  • SERVER_CERT.crt
  • SERVER_CERT.csr
  • SERVER_CERT.key

key ファイルは権限を厳密にしておく。

chmod 400 SERVER_CERT.key

nginx で作成した証明書を読み込む。

sudo vi /etc/nginx/conf.d/default.conf
server {
    listen 443 ssl;
    server_name 192.168.33.40;

    ssl_certificate /root/SERVER_CERT.crt;
    ssl_certificate_key /root/SERVER_CERT.key;
}

構文チェック。

sudo nginx -t

再起動。

sudo service nginx restart

https://192.168.33.40/ にアクセスすると証明書エラーはでるが、https で 404 Not Found 画面が表示されることを確認できる。

リバースプロキシ設定

nginx 側の設定

location ディレクティブを追加し、HTTPS 通信を全て Spllunk にリバースプロキシする。

sudo vi /etc/nginx/conf.d/default.conf
server {
    listen 443 ssl;
    server_name 192.168.33.40;

    ssl_certificate /root/SERVER_CERT.crt;
    ssl_certificate_key /root/SERVER_CERT.key;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}

再起動。

sudo service nginx restart

この時点で https://192.168.33.40/ にアクセスすると Splunk 画面が表示される。

Splunk 設定

root_endpoint は URL のリダイレクト先を指定できる。※やらなくてもアクセス可能。

sudo su - splunk
vi /opt/splunk/etc/system/local/web.conf
[settings]
root_endpoint = /splunk

Splunk の WebUI を再起動。

splunk restart splunkweb

https://192.168.33.40/ にアクセスすると自動的に https://192.168.33.40/splunk/ にリダイレクトされる。

HTTP通信 を全て HTTPS にリダイレクト

HTTP 通信を全て HTTPS 通信にする。

sudo vi /etc/nginx/conf.d/default.conf

下記を追記する。

server {
    listen 80;
    server_name 192.168.33.40;
    return 301 https://$host$request_uri;
}
sudo service nginx restart

これで http://192.168.33.40/ にアクセスしても https://192.168.33.40/ にリダイレクトされるようになった。

Splunk への直接通信を拒否

このままでは http://192.168.33.40:8000 にアクセスするとリバースプロ機を経由せずに Splunk にアクセスできてしまう。

server.socket_host を設定し、リバースプロキシ以外からのアクセスを除外する。

sudo su - splunk
vi /opt/splunk/etc/system/local/web.conf
[settings]
root_endpoint = /splunk
server.socket_host = 127.0.0.1

今後は HSTS の設定や SSL通信の暗号強化、ヘッダーに渡す情報なども設定しておくこと。

参考

SSL Proxy: Splunk & NGINX

Installing Splunk w/NGINX SSL Reverse Proxy

Splunk ® Enterpr ise 7.0.0 管理マニュアル

コメント

タイトルとURLをコピーしました