XMailCFGをLinuxで動かしまくる!! for Debian
苦労した。文献がぜんぜんないんだもん。 XMailCFGに付属のreadme.htmlの「非 Windows 環境への XMailCFG/K4 の移植について」の項を見ながらとりあえず進めてみました。いろいろ説明不足な文書ですが、ポイントを抑えて書きます。1 XMailをインストールして起動が可能な状態へ XMailのLinux版はこのブログの前回の記事など参考にしてインストールしてください。2 ソースを変更する XMailCFGのperl指定部分を書き換える XMailCFGのCGIファイルの行頭がWindows用のperl指定になっているので、それを#/usr/bin/perl に書き換えます。 cgiディレクトリーの中の setup.pl を使えば自動でやってくれます。cgiディレクトリーへ入って、perlコマンドで指定すればOK。 例 # /XMailCFG/cgi# perl setup.pl 改行コードのチェック windowsで編集でもしない限り付属のcgiの改行コードは気にしなくても構いません。 でも改行コードの調べ方も書いておきます。 # /XMailCFG/cgi# nkf -g ファイル名 これで改行コードが LF CR/LF になっているか確認できます。Windwsでしか使わない設定部分はCR/LFになってると思いますがLinuxでは動かないようになっている仕組みなので、無視して大丈夫でしょう。 もし改行コードが LF でなければperlを使って以下のコマンドで書き換えます。 # /XMailCFG/cgi# perl -pe 's/\r\n/\n/' ファイル名> ファイル名(変更後ファイル名) パス区切り記号のチェック cgiプログラム内部のパスの区切りが¥(バックスラッシュ)でなく、/(スラッシュ)でなければならないそうですので、心当たりのある方は修正してください。たぶんノーチェックで大丈夫でしょう。3 アクセス権の設定 cgiディレクトリーのcgiファイルのパーミッションをすべて755にします。システムによっては655などと設定しなければ動かないかもしれません。ここでは読み取り権限と実行権限をすべてのユーザーに与えて755、もしくは655を設定します。(2016年11月17日追加) 例 # /XMailCFG/cgi# chmod 755 *.cgi 非windows環境ではパーミッションの設定が大切と付属文書にはあります。 ウェブサーバーが動かしているユーザーがアクセスできるようにtabファイルにもパーミッションを設定します。(2016年11月17日更新) ということらしいのですが、結局XMailがroot権限で動作し、パーミッション700のように自分しかアクセスできないファイルを作ってしまうので、ウェブサーバーもRoot権限で動くように細工をしなければなりません(後述)。 最初はパーミッション777などで設定しても、XMailCFGが一見動くように見えるのですが、ユーザーやドメインを追加した場合に新規に作られるtabファイルへアクセスできなくなり、まったく使えないんです。ファイルが増えるごとにパーミッションの設定などできません。 とりあえず、/var/MailRoot/bin と/var/MailRoot/直下のtabファイル群にアクセスできることが条件です。 rootでウェブサーバーを動かすんだから、ファイルの所有者をrootにすればこのままで結構です。4 XMailCFGのファイルをドキュメントルートにコピーする Linuxのコピーコマンドで、XMAILCFGのディレクトリーをそのままドキュメントルートにコピーします。なお、XMailCFGディレクトリーを置くファイルシステムはNTFS(WIndowsのファイルシステム)ではなくLinuxファイルシステムに置いてください。これをしないとパーミッションに問題がでてtabファイル群にアクセスできなくなるようです。5 root権限でスレッドを起動するウェブサーバー いろいろ探したけど結局 Apacheしかないみたいです。 rootでスレッドを起動させるために以下の環境変数を設定してビルドやらコンパイルなどします。 Apacheのコンフィグ時の設定 Apacheの展開したディレクトリーへ入って以下のconfigureを行います。 # env CFLAGS="-DBIG_SECURITY_HOLE" ./configure --enable-so --enable-shared --enable-ssl これで make make install してください。 オプションの詳細は他のサイトを当たってもらうとして、XMailCFGを動かすにはこれで充分かと思います。 ちなみにApacheは外用があるなら、今回の中用とでrootで動くやつと動かないやつと2つ立ち上げたほうが安全みたいです。今回の例では、debian標準でインストールされたApache2が外向きサーバーになりますので、ソースからインストールして2つ並列動作させる細工は行っておりません。追記2015年4月14日 並列動作させました。 http.conf ファイルを名前を変えて用意します。 もうひとつはhttp2.conf とでもしておきましょう。以下に肝心なところを書き出します。 それぞれの設定ファイルで以下の項目が違うものである必要があります。 ・実行ユーザーとグループ( User と Group ) ・待ち受けポート( Listen ) ・ドキュメントルート(ヴァーチャルホストの場合も含む)DocumentRoot ・エラーログファイル( ErrorLog ) ・アクセスログファイル( CustomLog ) ・PidFileの指定(以下の行をServerRoot の次の行にでも挿入してください。 PidFile /usr/local/apache2/logs/任意のファイル名.pid ウェブサーバー起動スクリプトを2つ用意して一方に違う設定ファイルを以下の箇所に指定します。 (起動スクリプトは、/usr/local/apache2/bin/apachectl を/etc/init.d/にコピーして作ります) HTTPD='/usr/local/apache2/bin/httpd' ↓ HTTPD='/usr/local/apache2/bin/httpd -f /usr/local/apache2/conf/httpd2.conf' 自動起動は以下のように # update-rc.d apachectl(名前を変えた場合はその名前で) defaultts6 Apacheの設定 /usr/local/apache2/conf/httpd.conf を編集します。ポート番号の変更 Listen 80のところは #Listen 80 にしてコメントにして無効にします。かわりに Listen 8000 等べつのポート番号にして次の行に書きます(ネットで予約されている25や110は避けます)。 #Listen 80 Listen 8000 ユーザーをROOTにする。 User daemon Group daemon 以上の箇所の部分をコメント化して、User root と Group root を次の行に書きます。#User daemon#Group daemonUser rootGroup rootドキュメントルートの変更XMalCFGのディレクトリーを指定します。# DocumentRoot "/usr/local/apache2/htdocs"DocumentRoot "/XMailCFG/" ← 自分が置いた任意の位置を指定。左は / 直下の場合。 CGIの実行設定 CGIが動くように以下の文字列群を追加。 見やすいようにCGIディレクトリー関係の部分に書いておきましょ。 AllowOverride All Options +ExecCGI AddHandler cgi-script .cgi .pl Order allow,deny Allow from 192.168.1. ← 自分の環境で変更してください。この例では192.168.1.に属する192.168.1.0 から 192.168.1.255 までアクセスを許可します。 Apacheの起動 以下のコマンドでウェブサーバーを起動します。 /usr/local/apache2/bin/apachectl start再起動は start ではなく restart を指定。止めるには stop を指定。 これで、なんとかCGIが動くようになりましたけど…。まだ終わらない。7 いろいろな対処 とりあえずセットアップ的なことを実行していきますが、あれよあれよと文句を言われます。 XMailCFG 「基本認証をやれよ!!」 xmaicgiのフォルダーに .htaccess というファイルを作ります。 AuthUserFile /home/ユーザー名/.htpasswd AuthGroupFile /dev/null AuthName "XMailCFG 設定" AuthType Basic require valid-user deny from all.htaccess の AuthUserFileで指定した場所に.htpasswdというパスワードファイルを作成 # vi /home/.htpasswd ユーザー名:コード化したパスワード で表記して保存します。コード化したパスワードは「htpasswd コード化」などでネット検索すれば、任意のパスワードをコード化した文字列が手に入ることでしょう。.htpasswd ファイルはサーバーの実行ユーザーがアクセスできる場所においてください(今回はrootが実行ユーザーなので気にしないけど)。 これで基本認証はパスできると思います。 でもまだ終わらない。 XMailCFG 「Perlインストールフォルダーへの変更許可くれよ!!」 「問題があります。 WWW サーバの実行ユーザに対して Perl インストールフォルダへの "変更" 権限を許可してください」 この表示も出ると思いますので、@INCという検索パスを格納した変数を調べて、 検索パスが示しているフォルダーで、実際に存在しないフォルダーを全て作成します。 perl -e 'print join("\n", @INC);' で、検索パスを調べて、足りないフォルダーを作成します。 /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/local/lib/site_perl debian 7.7.0 では以上のディレクトリーがありません。 mkdirコマンドで作成します。 権限がどうのこうの言われますのでパーミッションのことかと思ったらぜんぜん違いました。 これで、一見正常に動いている感じにはなりますが・・・XMailのログとか見ますとまだ不完全なところがあります。 ログファイルを見られるようにする /usr/local/apache2/logs/ にある Apache2のエラーログファイルでなにが起こっているのか確認します。 # vi /usr/local/apache2/logs/error_log Archive/Zip.pm がないと言われるので、/usr/share/perl/5.14.2/IO/Compress/にある Zip.pm を 同じ 5.14.2 のフォルダーのArchiveフォルダにコピー。 # cp /usr/share/perl/5.14.2/IO/Compress/Zip.pm /usr/share/perl/5.14.2/Archive/さらに続いて File/Stat.pm がないと言われますが、stat.pm はありますので、ファイルの表記を直します。 # grep -ri 'File::Stat' /xmailcfg/cgiuser_home.cgicommon_mailbox.cgiXMQuotaMonitor.cgi (こちらはFile::stat と表記されており最新版では修正の必要はないかも2016年11月17日追記)report.cgi (XMailCFG2.43C(10月26日最新版)でファイルが増えているのを確認。2016年11月17日追記)common_userinfo.cgi上記ファイルのうち5つが、 File::Stat となっていますので テキストエディターで大文字の「S」を小文字の「s」に変えてください。 なお、○○::stat などの○○の部分はフォルダー名を指しています。(2017年1月27日追記)-------------------------------追記 2017年7月10日 XMailCFGのバージョンによっては、メールボックスの中身を見るときにも、Net/Smtp.pm がないといったエラーがでるかもしれません。 ソースのエラー発生場所もApacheのログに表示されますので、そちらのソースをSmtp →smtp に修正し、システムからsmtp.pm を探し出して、@INCに登録されている場所のNetディレクトリーの直下にコピーするかシンボリックリンクを張ってください。 以下LinuxMintでの例# vi /XMailCFGのインストール先/XMailCFG/cgi/common_viewmsg.cgi 上記のファイル中の記述 Smtp を smtp に変更して保存する。 smtp.pm を必要なディレクトリーにコピーする。# cp /usr/share/perl5/smtp.pm /usr/share/perl5/Net/------------------------------- 以上、これで完璧に動くのではないかと思います。 なにか起こった場合は、Apache2のerror.logで確認してください。---------------------------------------追記 2024年10月17日TLSに対応させる方法。ちなみにXMailCFGでは、証明書を作ったりする機能がありますが、Windows版のみの機能で、今のところLinuxに対応できる方法は見出せませんでした。前提条件として、Let's Encrypt などの証明書を取得して有効期限が切れないように定期的に自動更新できている状態にしてあることとします。・ファイヤーフォールの設定で、ポートを開放する。IMAP over SSLのポート$ sudo ufw allow 993POP over SSLのポート$ sudo ufw allow 995SMTP over SSLのポート$ sudo ufw allow 465・メールサーバーに証明書へのシンボリックリンクを作成rootユーザーになる$ su# cd /var/MailRoot/証明書と公開鍵ln -s /etc/letsencrypt/live/[ドメイン名]/cert.pem server.cert秘密鍵ln -s /etc/letsencrypt/live/[ドメイン名]/privkey.pem server.key(ドメイン名が、取得している名前を違う場合(wwwがついたりsmtpが付いたり)は、メールサーバー用に追加で、証明書をとる必要があります。)・設定を有効にし再起動XMailCFGの環境設定から pop3 TLS と SMTP TLS のサポートを有効にする。XMail設定のSSL/TLS接続 (SmtpGwConfig-NeedTLS) を「SSL対応を確認、非対応で平文通信」にチェックを入れる。・XMailを再起動する# /etc/init.d/xmail restart