Canal'sブログ

http://yachtman.mydns.jp の補助として使用しています。

apacheでSSLリバースプロキシ&2要素認証

2015-07-29 | Linuxメモ
仕事で、2要素認証を提案することになり、勉強のため、apacheを使って検証することにした。

前提とした条件は
・DMZにUserID/PassでサービスしているWebサイトがある
 (検証環境ではnetcommons,pukiwiki)
・Webサイトは2要素認証に対応していない場合を想定

Webサイトにアクセスする前に2要素認証を行い、Webサイトのセキュリティを強化する。

実現手段として選んだのが、apacheのリバースproxyを使用して、Proxyする際に2要素認証を入れる方法。利用者からみれば、手間はかかるが、Webサイトで2要素認証に対応していので仕方がないでしょう...と説明できる(苦笑)

リバースProxyは
OracleLinux7 (RHEL7互換)で構築。

mod_authn_otp-1.1.7.tar.gz は
https://code.google.com/p/mod-authn-otp/wiki/Downloads
からダウンロード

configure;make;make installで導入。コンパイルに足りないものが出てきた場合はyumを使っていれよう。(メモし忘れたので...何いれたか覚えていない)

実際やってはまったこと。

・Digest認証はうまくいかない。
 原因追究できず。

・以下の接続構成では、netcommonsの画面が壊れる。
 pukiwikiも挙動がおかしい。
 PC ---(https)---ReverseProxy---(http)---Webserver

 結局、以下の接続構成にしたらうまくいった。
 PC ---(https)---ReverseProxy---(https)---Webserver
 
httpsに対応していないWebサーバはないだろうし...と言い訳。

■■■■■■■■■
apacheのコンフィグ
■■■■■■■■■

#SSL
SSLPassPhraseDialog exec:/etc/httpd/conf/pass-phrase.sh
#######################
#Proxy and OTP setting#
#######################

ProxyRequests Off
<proxy *>
AuthType Basic
AuthName "Protected Area"
AuthBasicProvider OTP
Require valid-user
OTPAuthUsersFile "/var/www/otp/user.token"
</proxy>

#######################
#Virtual Host Setting #
#######################

<VirtualHost xxx.xxx.xxx.xxx:80>
ServerName yachtman.plala.jp
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</VirtualHost>

<VirtualHost xxx.xxx.xxx.xxx:443>
ServerName yachtman.plala.jp
SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
ProxyPass / https://yachtman.plala.jp/
ProxyPassReverse / https://yachtman.plala.jp/
</VirtualHost>

■■■■■■■■■
ユーザ情報ファイル user.token
■■■■■■■■■
#TokenType Username PIN TokenKey
HOTP/T30 irie-t 1240 5c40f65ddf78488ad366

TokenKeyはこのサイトで作成。QRコードまで表示されるので便利。