・apache + SSL + クライアント証明書 でサーバを構築する(構築済みとする)
・apacheのproxy機能を使って、https://ec2.my.server/webmin/ を localhost:10099にリダイレクトする
・webminはリソース大食いなので、webminはdaemonで常時動かさずxinetd経由で必要時のみ起動させる
・セキュリティ上の観点から webminが待ち受けるポートはデフォルトの10000ではなく、10099(任意)に変更する
・同じく、webminは127.0.0.1からのみの接続を許可する
要は、安全にwebminを使えるようにしましょう、というお話です。
AWS EC2インスタンスで構築したサーバをwebmin経由で操作できるように設定します。webminをデフォルトで起動すると 10000番ポートをLISTENし、基本的にbasic認証になりますが、今回サーバでは既にapacheが起動しており、SSL接続のクライアント認証しているので、アクセスコントロールはこちらに任せることにします。
職場などの環境からは10000番ポートに限らず大方のHigh-Portはブロックされているので、SSL(443)でアクセスする必要がありました。これはapache proxyで解決させます。
webminをapache経由(mod_proxy経由)にする方法は http://www.webmin.com/apache.html に書かれていますが、SSLが絡むと少し追加設定が必要でした。
まずは webminをインストール。
http://webmin.com/download.html から .deb形式のファイルをダウンロード。
2012/1/29時点では http://prdownloads.sourceforge.net/webadmin/webmin_1.580_all.deb でした。
# wget http://prdownloads.sourceforge.net/webadmin/webmin_1.580_all.deb# dpkg -i webmin_1.580_all.deb
libxxxに依存している とエラーが出るので、dependパッケージをインストールします。この追加するパッケージは環境によって異なると思いますので、必要なものをインストールしてください。
# aptitude install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions
apache側の設定。proxy設定をします。
Debianのapacheはproxy(mod_proxy)が使えるようにビルドされているので、モジュールでそれを有効にします。
# a2enmod proxy
# a2enmod proxy_http
SSL接続なので、SSLProxyEngine On にしておきます。これを忘れると 500番台エラーになります。ちょっとハマりました。
/etc/apache2/conf.d/proxy (新規作成)
SSLProxyEngine On
ProxyPass /webmin/ https://localhost:10099/
ProxyPassReverse /webmin/ https://localhost:10099/
/etc/apache2/mods-available/proxy.conf を以下のように書き換えます。
ProxyRequests On
<Proxy *>
# AddDefaultCharset off
# Order deny,allow
# Deny from all
Allow from all
#Allow from .example.com
</Proxy>
webmin側の設定/etc/webmin/config に以下の設定を記述します。(変更点のみ)
webprefix=/webmin
webprefixnoredir=1
referer=***.***.jp # 新規追加行。稼動しているホストのDQDNを記述します。
/etc/webmin/miniserv.conf を編集して xinetd経由にします。(変更箇所のみを記述しています)
#session=1
inetd=1
webmin daemonが動いている場合はそれを停止し、サーバ再起動などでdaemonモードで起動しないようにします。# /etc/init.d/webmin stop
# update-rc.d webmin remove
# webmin
service webmin
{
disable = no
type = UNLISTED
id = webmin
socket_type = stream
protocol = tcp
user = root
wait = no
env = LANG=
port = 10099
server = /usr/share/webmin/miniserv.pl
server_args = /etc/webmin/miniserv.conf
}
# /etc/init.d/xinetd restart
10099番ポートを誰がLISTENしているか、確認します。
無事にxinetdがLISTENしています。# lsof -i:10099
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 18478 root 5u IPv4 5968365 0t0 TCP *:webmin (LISTEN)
apacheをリスタートします。
# /etc/init.d/apache2 restart
クライアント証明書をインストールしてあるwebブラウザから、 https://ec2.my.server/webmin/ にアクセス。
https://ec2.my.server:10099/ のようにポート番号直打ちでアクセスされるとapache proxyを経由せずにbasic認証になるので、ブルートフォース攻撃の対象になるおそれがあります。
対策として、webmin上の設定で、Webmin Configuration の Ports and Addresses にて 127.0.0.1 からの接続のみを受け付ける(apacheでproxyされたものだけを受け付ける)ように変更します。
これでアタックが多い日でも安心。
お楽しみください!
参考URL
webmin公式
http://www.webmin.com/apache.html
ネットワーキングすきま情報
http://last-resort.seesaa.net/article/123147890.html
bushimichiの日記
http://d.hatena.ne.jp/bushimichi/20090417/1239970196