携帯電話用webメーラー(mobileimap)

携帯電話に対応したIMAP対応webメーラ(mobileimap)をインストールします。
筆者の環境では、IMAPサーバは稼動中です。
もしあなたの環境にIMAPサーバがインストールされていなければ、IMAPサーバの導入から始める必要があります。

mobileimapのインストール


mobileimapを実行させるためにはRubyが必要です。
筆者の環境にRubyはインストールされていなかったので、いつものコマンドでRubyインストールします。
# apt-get install ruby

mobileimapをここから適当なディレクトリへダウンロードし、展開&makeを実行します。
# tar zxfv mobileimap-2.7.tar.gz.tar
# cd mobileimap-2.7
# make
# make install
これで、mobileimapのインストールは終了です。

mobileimapの動作確認

mobileimapを実行し動作を確認します。

$ mobileimap -a login -u alk -s alk.dip.jp -f "alk <alk@alk.dip.jp>"
alk@alk.dip.jp:143[login]: IMAP Password: ←パスワードの入力
http://alk.dip.jp:8143/
mobileimapのパラメータ説明
IMAP認証方法 -a login(平文のlogin認証)
IMAPユーザ名 -u alk
IMAPホスト名 -s alk.dip.jp
メール送信時のFrom -f "alk <alk@alk.dip.jp>"

ブラウザで、http://alk.dip.jp:8143/ をアクセスすると下記のページを表示します。
画面確認後は、mobileimapを停止(CTL+C)させてください。


このままだと、http://alk.dip.jp:8143/ へアクセスすれば、誰でもメールの送受信ができてしまいます。
ApacheのリバースProxy機能を使い、SSL+Basic認証で安全性を高めます。

Apache ReverseProxyの設定:モジュール

Apacheのリバースプロキシ機能を使うと、他サーバーにあるコンテンツをローカルのサーバーにあるコンテンツのように見せることができます。
リバースプロキシ機能を使ってhttp://alk.dip.jp:8143/へのアクセスは、SSL+Basic認証 になるようにします。

リバースプロキシ機能を使用するには、2つのモジュール mod_proxy、mod_proxy_http が必要です。
debian流にモジュールを追加するには、a2enmod コマンドを使います。
# a2enmod proxy
このコマンドだけで、 mod_proxy、mod_proxy_httpの2つのモジュールが有効になります。
次に、リバースプロキシとしての環境を整えるために /ets/apache2/mods-avaible/proxy.conf ファイルを修正します。

/ets/apache2/mods-avaible/proxy.conf ファイル
修正前 修正後
<IfModule mod_proxy.c>

    #turning ProxyRequests on and allowing proxying from all may allow 
    #spammers to use your proxy to send email.
                
    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Deny from all
        #Allow from .your_domain.com
    </Proxy>

    # Enable/disable the handling of HTTP/1.1 "Via:" headers.
    # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
    # Set to one of: Off | On | Full | Block
    
    ProxyVia On

    # To enable the cache as well, edit and uncomment the following lines:
    # (no cacheing without CacheRoot)
    
    CacheRoot "/var/cache/apache2/proxy"
    CacheSize 5
    CacheGcInterval 4
    CacheMaxExpire 24
    CacheLastModifiedFactor 0.1
    CacheDefaultExpire 1
    # Again, you probably should change this.
    #NoCache a_domain.com another_domain.edu joes.garage_sale.com

</IfModule>
<IfModule mod_proxy.c>

    #turning ProxyRequests on and allowing proxying from all may allow 
    #spammers to use your proxy to send email.
                
    ProxyRequests Off

    <Proxy *>
        Order deny,allow
        Allow from all
        #Allow from .your_domain.com
    </Proxy>

    # Enable/disable the handling of HTTP/1.1 "Via:" headers.
    # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
    # Set to one of: Off | On | Full | Block
    
    #ProxyVia On

    # To enable the cache as well, edit and uncomment the following lines:
    # (no cacheing without CacheRoot)
    
    CacheRoot "/var/cache/apache2/proxy"
    CacheSize 5
    CacheGcInterval 4
    CacheMaxExpire 24
    CacheLastModifiedFactor 0.1
    CacheDefaultExpire 1
    # Again, you probably should change this.
    #NoCache a_domain.com another_domain.edu joes.garage_sale.com

</IfModule>



Apache ReverseProxyの設定:ディレクティブ

メールの操作は、SSL通信を考えています。
リバースプロキシ関連ディレクティブの設定を、/ets/apache2/sites-avaible/sslファイルに追加記述します。

/ets/apache2/sites-avaible/sslへ追加記述
追加記述内容 意味
ProxyRequests Off フォワードプロキシを使用しない
ProxyPass /alk http://localhost:8143/ https://alk.dip.jp/alk→http://localhost:8143/へ転送
ProxyPassReverse /alk http://localhost:8143/ http://localhost:8143/からのリダイレクトの要求を調整する

この設定では、https://alk.dip.jp/alkへのアクセスは、http://localhost:8143/に転送されます。
ホスト名を alk.dip.jp→localhost に変更していますが、同一サーバ内での転送なのでこのようにしました。

Apache Basic認証の設定

最後にBasic認証の設定を行います。
まず、htpasswdコマンドを使ってパスワードファイルを作成します。

<コマンドの形式>
htpasswd -c ファイル名 ユーザ名 ・・・ -c は初回パスワードファイル作成時に指定
# htpasswd -c /mnt/var/pass/.htpasswd alk
New password: ←Basic認証用のパスワードの入力
Re-type new password: ←同じパスワードを入力
Adding password for user alk

次にBasic認証の制御用設定を/ets/apache2/sites-avaible/sslへ追記します。

/ets/apache2/sites-avaible/sslへ追加記述
追加記述内容 意味
<Location /alk> https://alk.dip.jp/alkの設定開始
AuthType Basic 認証方式:Basic
AuthName "Secret Area"
AuthUserFile /mnt/var/pass/.htpasswd パスワードファイルの指定
AuthGroupFile /dev/null グループでの認証許可は行わない
require user alk ユーザalkのみ認証を許可
</Location> 設定終了

変更を有効にするためにApacheを再起動させます。
# /etc/init.d/apache2 restart

mobileimapの最終確認


mobileipを、次のように起動させます。
$ mobileimap -a login -u alk -s localhost -f "alk <alk@alk.dip.jp>"
IMAPホスト名がlocalhostに変更されているのは、リバースプロキシの設定でlocalhostへ転送されるようにしたからです。
ブラウザから https://alk.dip.jp/alk へアクセスし mobileimap の画面が表示されることを確認します。
Basic認証のポップアップが表示され、ログイン後mobileimapの画面を表示すればOKです。
問題が無いことが確認できれば、一旦mobileimapを停止(CTL+C)させて、デーモンとして再起動させます。
デーモンとして起動させるにはオプション -d を追加するだけです。
$ mobileimap -a login -u alk -s localhost -f "alk <alk@alk.dip.jp>" -d←デーモンでの実行

参考に今回sslファイルに追加記述した全体を載せておきます。
/ets/apache2/sites-avaible/sslへ追加記述した全体
    ProxyRequests Off
    ProxyPass /alk http://localhost:8143/
    ProxyPassReverse /alk http://localhost:8143/
    <Location /alk>
        AuthType Basic
        AuthName "Secret Area"
        AuthUserFile /mnt/var/pass/.htpasswd
        AuthGroupFile /dev/null
        require user alk
    </Location>

mobileimapのパラメータをファイルで指定

mobileimapを実行させるとき、各種パラメータをファイルから読み込ませることが可能です。
IMAP用パスワードも指定できるので、自動起動を考える場合、有用です。

mobileimapが起動するとき、対象ユーザのホームディレクトリの .mobileimaprc ファイルを探します。
.mobileimaprc が存在すればその内容に従ってmobileimapが、実行されます。
mobileimap に--dump-config のパラメータを追加することで.mobileimaprc の雛形が出力されます。
$ cd ~ ←ホームディレクトリへ移動
$ mobileimap -a login -u alk -s localhost -f "alk <alk@alk.dip.jp>" -d --dump-config > .mobileimaprc
$ chmod 600 .mobileimaprc
作成された .mobileimaprc ファイルをテキストエディッタで開き、次の行を編集します。
:imap_password => "xxxxxx",    ←IMAP用パスワードを設定

こうすることで、パラメータなしで実行させることが可能となります。
$ mobileimap ←パラメータなしで実行(パスワードも聞かれない)

複数ユーザの管理


2人目以降のユーザの管理を考えます。
ユーザ毎に mobileimap を起動させる必要があります。
そのために、各ユーザ毎にポート番号を変えて mobileimap 実行させます
mobileimap は何も指定しないとポート8143を使います。
追加するユーザは、ポート8144を使うように定義します。

具体的次のユーザを追加した場合の対応方法を提示します。
追加ユーザ=hoge
/ets/apache2/sites-avaible/sslへhoge用を追加
    ProxyPass /hoge http://localhost:8144/
    ProxyPassReverse /hoge http://localhost:8144/
    <Location /hoge>
        AuthType Basic
        AuthName "Secret Area"
        AuthUserFile /mnt/var/pass/.htpasswd_hoge
        AuthGroupFile /dev/null
        require user hoge
    </Location>

# /etc/init.d/apache2 restart ←apache2の再起動
# su hoge
$ cd ~ ←hogeホームディレクトリへ移動
$ mobileimap -a login -u hoge -s localhost -p 8144 -f "hoge <hoge@alk.dip.jp>" -d --dump-config > .mobileimaprc
-p パラメータはポート番号を指定しています。
一人目と同じように.mobileimaprcファイルのIMAPパスワードを記述します。
$ mobileimap ←パラメータなしで実行(パスワードも聞かれない)

ブラウザで下記URLをアクセスすると、hoge用webメーラを表示します。
https://alk.dip.jp/hoge