2014年09月29日

XMailの構築Linux版インストールの補完

いぶ先日、サーバーを大改修したのでそれの覚書です。
 当初OSはFreeBSD7.0、メールサーバーはqmailにて運用していたのですが、プロバイダーのスパムメール対応のおかげで25番ポートでのメール配信が使えなくなり、MyDnsさんのメール転送サービスを使って継続運用しておりました。

 2014-06-15 00.36.28.jpg

 しかし、ここに来て、Mydnsでのメール送信でちょくちょくエラーが出るようになり、プロバイダーの認証SMTPサーバーを使う必要がでてきました。
 でも、qmailにいくらパッチを当てても、SMTPサーバー認証機能が動作せず、途方にくれていました。
 qmailも長らくメンテされず有志によるパッチだけで機能していましたが、やはり他人同士のパッチ開発では整合性が取れません。
 もう捨ててもいいよねってことで、さよならすることにした。

 選定にあたって考えた。Windowsでよく使われているXMailはどうだろう。
 セットアップが簡単そうだし・・・。

 後で分かったんですが、Windows版のインストールが簡単だったのは実は、インターネットブラウザーで設定ができるXMailCFGのおかげだったんですよ、Linux版ではXMailCFGのバージョンが古く、Webminというスクリプトもインストールが必要なくせに、いまいち動いてくれませんでした。
で、結局、全部手動で行いました。

 さて、このXMail。
 Windows版は知りませんが、まだUnix版は64ビットOSでは動かないようです。
 少なくともFreeBSD8.4の64ビットでは動きません。
 FreeBSDの10もいろいろあって、なぜか運用しているPCではネットワークカードの認識でエラーが出てまともに使えません。

 2014-06-14 20.47.46.jpgエラー出まくり。

 それで、debian Linux 7.0 32bit版をチョイスしてOSから入れなおしました。

 FreeBSDを64ビットにしたのはもう2008年のこと、まだ32ビットアプリケーションの方が優勢な状態なんて考えもしませんでしたなぁ。

手順

 ・XMailのダウンロード
    任意のディレクトリーにcdコマンドで移動した後、下記アドレスからXMailのソースファイルをダウンロード。
    たとえば/data/program/ というディレクトリーならコマンドシェルから以下のように入力。

    # cd /data/program/

    wget コマンドでダウンロードする。


    これで /data/program の中に圧縮ファイルxmail-1.27.tar.gz がダウンロードされます。

 ・tar コマンドで圧縮ファイルを展開します。

    # tar xvfz xmail-1.27.tar.gz

 ・cd コマンドで展開したディレクトリーへ移動します。

    # cd xmail-1.27

 で、この中のdocsというディレクトリーにreadme.txtというファイルがあるので、これを読みながらインストールするのですが、英語なのでGoogle翻訳で少しづつ解読していきました(XMail道場の方で日本語が用意されていますが、肝心なUNIX版は書かれておりません)。


 ・ソースファイルのメイクとコンパイル。

    # make -f Makefile.lnx

 ・コンパイルされたファイル群 ディレクトリーMailrootをコピーする。

    # cp -r MailRoot /var/MailRoot

 ・コピーしたMailRootのパーミッションを書き換える。

    # chmod 700 /var/MailRoot

 追記2015年4月14日

 ウェブサーバーでperlなどのスクリプトから、XMailのsendmailを使うと、以下のエラーが出ると思います。

   /var/MailRoot/spool/temp/書き込もうとしてるスプールファイル  Permission denied :呼び出したCGIスクリプト

 権限がなくて書き込めないっていうことを訴えたいようです。sendmail実行ファイルがその辺うまくやってるのかと思ったら、
 実行ユーザーはウェブサーバーを実行しているユーザー(たとえば www-data とか daemon とか http.confファイルに設定したユーザー)でした。なにか高度な解決法があるのかもしれませんが、XMailのマニュアルを検索しても何も出ません。

 結局、/var/MailRoot/spool 以下は全部 パーミッションを777にしました。

    # chmod 777 -R /var/MailRoot/spool
        
 これでエラーが出ずに、CGIからメールを受けることができると思います。


 ・実行ファイル群をコピーする
    # cp bin/xmail /var/MailRoot/bin
    # cp bin/CtrlClnt /var/MailRoot/bin
     # cp bin/Mkusers /var/MailRoot/bin
     # cp bin/XMCrypt /var/MailRoot/bin
    # cp bin/sendmail /var/MailRoot/bin

  あるいは一度ディレクトリーをコピーして、拡張子oのファイルを消してもOK。

  例
    # cp bin /var/MailRoot/
     # rm /var/MailRoot/bin/*.o

 ・先住者のチェック

 先にサーバーにメールサーバーが実行されていないかチェックして起動しないようにしてください。
 下記のようにtelnetコマンドにて25番ポートにアクセスしてみて、telnetのコンソールが起動するようであれば、メールサーバーが実行されているということになります。
 # telnet localhost 25

 起動しないようにするには、該当するメールサーバ(おそらくsendmail)の起動スクリプトを消してしまうのが早いでしょう。debian linuxの場合は /etc/init.d/にsendmailの起動スクリプトsendmailがあります。
2014年11月7日追記 Debian 7.7は別のMTAであるExim4が動いていますので、その起動スクリプト exim4を削除します。

 ・環境設定
 基本の流れはXMail道場の環境設定を参照してください。

 ・XMail Linux版の起動設定

   XMail道場で記載がありませんのでこちらで補完します。

  起動スクリプトを最初に展開したディレクトリから/etc/init.d/ 以下にコピーします。

       # cp xmail /etc/init.d/

 ・起動スクリプトの編集

      # vi /etc/init.d/xmail 

  XMail道場のOS(オペ―レーティングシステム)固有の作業Windows版を参照しながら文字列MAIL_CMD_LINEに環境オプションを設定します。

  XMAIL_CMD_LINE="-Qr 128 -Ql -Ll -Sl -Pl"

 スクリプトを保存したら、次にスクリプトに実行属性を設定します。

 # chmod 755 xmail


 次に起動の設定をします。

 起動スクリプトを自動起動にするには、/etc/ 直下にある rc0.dとかrc3.dなどのランレベルに応じたディレクトリーへ起動スクリプトへのリンクを張ることになります。
手動でリンクを張ることもできるんでしょうけど、debian系のOSにはコマンドが用意されています。

 # update-rc.d xmail defaults

 と打ち込めば、init.d以下に追加した起動スクリプトへリンクが
rc2.d やら rc3.d などに追加されます。

 これでOK。 再起動すれば自動的にXMailが起動します。

 あとは道場の基本インストールで対処できるでしょう。


 ・sendmailコマンドの置き換え(2015年4月14日追記)
      # cp sendmail.sh /var/MailRoot/sendmail.sh

  スクリプト修正
      vi /var/MailRoot/sendmail.sh


            末尾の文字列を、sendmailの実行ファイル(/var/MailRoot/bin/sendmail) へリンクされるように修正します。

      /usr/sbin/sendmail.xmail
                               ↓
      /var/MailRoot/bin/sendmail

      スクリプトに実行権限をつける。

      chmod +x /var/MailRoot/sendmail.sh

   スクリプトへのシンボリックファイルを作る。

      # ln -s /var/MailRoot/sendmail.sh /usr/sbin/sendmail

       念のためにもう一つ
      # in -s /varMailRoot/sendmail.sh /usr/lib/sendmail

 これで、ウェブサーバーのスクリプト経由で /usr/sbin/sendmail が呼び出されても、MailRootにあるスクリプトが起動して、MailRoot/bin にある実行ファイルを動かすことになります。

 上の記述どうもあやしいので、また書き直します(2017年8月17日追記)


その他補完(とはいえ昨今では非常にたいせつなこと!!)

 ・SMTP転送フォアーダの設定
 認証付きの場合の説明がありませんでしたのでこちらも補完

 # vi /var/MailRoot/smtpfwd.tab

  "転送するドメイン""転送先ドメイン:ポート番号"

  例
 "*" "smtpauth.eonet.ne.jp:587"

  *は配送するメールのドメインは問わないという意味。
 空白の部分は、TABキーで入力してください。



 認証パスワードの設定
 こちらはWindows版のファイル構成情報からヒントを得て、同じように再現するものです。
 間違いなく動きました。

 以下のディレクトリーを作る

 # mkdir /var/Mailroot/userauth/smtp

 ディレクトリーへ移動
  # cd /var/Mailroot/userauth/smtp

  転送先のドメイン名に.tabを付けてファイルを編集。
 eonetは例です。お使いの転送先ドメインを当てはめてください。

  # vi smtpauth.eonet.ne.jp.tab

 "plain""プロバイダー指定のID""パスワード"

 上の書式で表記し保存します。

 例
 "plain" "hogehoge%batsu.eonet.ne.jp" "hogehoge"

 空白の部分は、TABキーで入力してください。

 以上、駆け足でしたがLinux版XMailのインストールでございました。
 Linux版の詳細なインストール方法とくにSMTP認証プロバイダーへの転送に関しては皆無だったので、LinuxでXMailを運用したいと思っている人のお役に立てればと幸いであります。

 久しぶりの記事なのに難しい話題になっちゃったなぁ。

 最後に引越しが8月25日に完了しましたわ。今更だけど。

 2014-08-31 17.37.14.jpg この自宅が2014-09-21 16.34.36.jpgこうなりました。

 これで、ぶっ壊されて叩き出されるのは3度目なんだよね。

 では、また次回。
  
posted by 難波鷹史 at 23:14| 京都 | Comment(2) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
大変参考になりました、ありがとうございます。
ただ、ここでの設定だけですと、cronからのメールを受け取れませんでした。
仕方なく、sendmailは自作しました。
ご参考まで。
Posted by Circle at 2016年01月05日 06:49
Circleさま コメントありがとうございます。
CronからSendmeil経由で送信できなかったということでしょうか? 構築した該当サーバーはPHP等のスクリプトからもメールの送信はできていますので、どこに原因があるのか不明ではありますが…。もしかしたらこちらの記事の記述に抜けがあるのかもしれません。
Posted by 難波鷹史 at 2016年01月28日 18:56
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック