今回は、この 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通信の暗号強化、ヘッダーに渡す情報なども設定しておくこと。
コメント