2012/02/18

apache経由でwebminを使う

今回のお話は...

・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
 
/etc/xinetd.d/webmin を新規に作成します。
# 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
}
 
xinetdのリスタート
# /etc/init.d/xinetd restart

10099番ポートを誰がLISTENしているか、確認します。
# lsof -i:10099
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 18478 root 5u IPv4 5968365 0t0 TCP *:webmin (LISTEN)
無事にxinetdが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


2012/02/11

Blogpress had updated.

オンラインに記事が保存出来ないという致命的なバグを含んでいた Blogpressが数週間という緩慢な速度で更新されたので書き込んで見るテスト。

追記。
はい、無事に修正されているようです。
公開出来ないBlog管理/作成アプリではお笑いにしても寒過ぎます。