仕事で、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コードまで表示されるので便利。
前提とした条件は
・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コードまで表示されるので便利。