Last Updated on 2021年7月4日 by かんりにん
HAProxyにてSSLリバースプロキシを設定してみるテスト。
設定環境はAWS EC2にてRightImageのCentOS6を使用しました。
HTTP/80については設定済みとなっている前提でメモってます。
参考:お世話になっております。
Ver1.5 マニュアル
SSLに関するパラメータが多数あり、かつ分散しているので要熟読!
Using SSL Certificates with HAProxy
Contents
テスト用SSL証明書
動作確認だけできればオッケーなので、opensslのテスト用証明書を。
/etc/pki/tls/test-certs.crt
テスト設定
1.globalセクションにSSLプロキシ全体の動作の設定を。
global maxsslconn 256 SSLコネクションの接続最大数を指定。 tune.ssl.default-dh-param 2048 公開鍵の鍵長の指定。2048bitで。
2.フロントエンドにssl-proxyのエントリを追加
frontend ssl-proxy bind *:443 ssl crt /etc/pki/tls/test-certs.crt ポート、および証明書の指定 mode http バックエンド側のプロトコルの指定、httpでOK default_backend static デフォルトのバックエンド、こちらはhttpで指定しているエントリと同じでOK
設定適用
– haproxyプロセスの再起動
# /etc/init.d/haproxy restart
– AWS セキュリティグループの設定追加
今回はAWS EC2を使用しているので、該当するセキュリティグループで443を開放しておきます。
動作確認
ポートの確認、およびhaproxy.logの確認
– netstatでの確認
# netstat -ln | grep 443 tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
– ログ確認(haproxy.log)
1.SSLプロキシ有効時のプロセス起動ログ
Jun 10 11:14:06 ip-172-16-3-216 haproxy[1543]: Proxy main started. Jun 10 11:14:06 ip-172-16-3-216 haproxy[1543]: Proxy ssl-proxy started. Jun 10 11:14:06 ip-172-16-3-216 haproxy[1543]: Proxy static started.
2.ログ確認(haproxy.log)アクセスログ
実はアクセスログではソースのポートがhttpかhttpsかを判別する材料がなかった(詳しくログ設定のパラメータを調べればあるのかも?)。
しかしながら、frontendセクションで指定したエントリ名がログに反映されており、このエントリ名でhttpsでのアクセスを確認することができた…
通常のhttpでのアクセスログ
May 14 11:16:31 localhost haproxy[1544]: 198.51.100.216:50831 [14/May/2015:11:16:30.208] main static/dev-web01 77/0/2/1301/1552 200 37258 - - ---- 5/5/1/1/0 0/0 "GET / HTTP/1.1" May 14 11:16:32 localhost haproxy[1544]: 198.51.100.216:50831 [14/May/2015:11:16:31.761] main static/dev-web01 821/0/3/7/831 200 191 - - ---- 5/5/0/0/0 0/0 "GET /favicon.ico HTTP/1.1"
httpsでのアクセスログ
May 14 11:19:12 localhost haproxy[1544]: 198.51.100.216:50880 [14/May/2015:11:19:11.038] ssl-proxy~ static/dev-web01 25/0/3/1286/1476 200 37258 - - ---- 2/1/0/1/0 0/0 "GET / HTTP/1.1" May 14 11:19:12 localhost haproxy[1544]: 198.51.100.216:50880 [14/May/2015:11:19:12.514] ssl-proxy~ static/dev-web01 399/0/3/8/410 200 191 - - ---- 2/1/0/1/0 0/0 "GET /favicon.ico HTTP/1.1"
ということで、課題をいくつか。
- フロントエンド側で接続プロトコルによる判別ができるよう、ログ設定のパラメータを調べてみる。
- しょうもないエラーとして、デフォルト証明書のためブラウザ側で制限がでたためセキュリティ保護されていない画像やファイルにリクエストされない、という初歩的なミスをやらかしてしまったorz
→制限解除を行い、動作確認OK(汗 あたりまえだけど正規の証明書が要りますね。
動かすだけなら割と簡単ながら、SSLに関連したパラメータも多数あるので、機能の詳細についてボチボチやっていこうかなと。