qmailのインストール

概要:既存のメールサーバーsendmailに替えて、アクセス性能改善及びセキュリティ強化の観点からMaildir形式のメールボックスを扱えるqmailによるメールサーバーを構築する。IMAPには対応しない。

1. qmailインストール

  1. ) qmailインストール準備
    qmailインストールに必要なユーザ、グループを作成する
    # mkdir /var/qmail ← qmailインストールディレクトリ作成
    # groupadd nofiles ← nofilesグループ作成
    # useradd -g nofiles -s /sbin/nologin alias -m -d /var/qmail/alias -k /dev/null
      ← aliasユーザ作成
    # useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild ← qmaildユーザ作成
    # useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill ← qmaillユーザ作成
    # useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp ← qmailpユーザ作成
    # groupadd qmail ← qmailグループ作成
    # useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq ← qmailqユーザ作成
    # useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr ← qmailrユーザ作成
    # useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails ← qmailsユーザ作成
    
  2. ) qmail関連ファイルのダウンロード
    # cd /tmp/work
    # wget http://cr.yp.to/software/qmail-1.03.tar.gz ← qmailダウンロード
      ※qmailの最新版のURLはqmailダウンロードページで確認すること
    # tar zxvf qmail-1.03.tar.gz ← qmail展開
    # cd qmail-1.03 ← qmail展開先ディレクトリへ移動
    # wget http://www.itheart.com/phpgw/qmail-date-localtime.patch
       ← 日本標準時間対応パッチダウンロード
    # wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz
       ← SMTP-Auth対応パッチダウンロード
    # wget http://qmail.mirrors.summersault.com/qmail-smtpd-relay-reject
      ← 不正中継拒否対応パッチダウンロード
    # tar zxvf qmail-smtpd-auth-0.31.tar.gz ← SMTP-Auth対応パッチ展開
    # /bin/mv qmail-smtpd-auth-0.31/* . ← SMTP-Auth対応パッチをqmail展開先ディレクトリへ移動
    # wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
    # wget http://tomclegg.net/qmail/qmail-remote-auth.patch
    
  3. ) パッチの適用
    # patch < qmail-date-localtime.patch ← 日本標準時間対応パッチ施行
    patching file date822fmt.c
    # patch < auth.patch ← SMTP-Auth対応パッチ施行
    patching file Makefile
    patching file TARGETS
    patching file qmail-smtpd.8
    patching file qmail-smtpd.c
    # patch < qmail-smtpd-relay-reject ← 不正中継拒否対応パッチ施行
    patching file qmail-smtpd.c
    Hunk #1 succeeded at 56 (offset 3 lines).
    Hunk #2 succeeded at 226 (offset 9 lines).
    Hunk #3 succeeded at 277 (offset 11 lines).
    # patch < qmail-remote-auth.patch
    patching file qmail-remote.c
    patching file Makefile
    # patch < qmail-1.03.errno.patch
    patching file cdb_seek.c
    patching file dns.c
    patching file error.3
    patching file error.h
    
    注:qmail-1.03.errno.patchは以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処
    /lib/libc.so.6: could not read symbols: 不正な値です
    collect2: ld はステータス 1 で終了しました
    make: *** [auto-str] エラー 1
  4. ) qmailのインストール
    # make setup check
    ・
    ・
    ・
    ./install
    ./instcheck
    
  5. ) qmail初期設定
    # ./config-fast `hostname`
    Your fully qualified host name is centos5.
    Putting centos5 into control/me...
    Putting centos5 into control/defaultdomain...
    Putting centos5 into control/plusdomain...
    Putting centos5 into control/locals...
    Putting centos5 into control/rcpthosts...
    Now qmail will refuse to accept SMTP messages except to centos5.
    Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
    
  6. ) qmail設定
    以下3行はドメイン名がないので代わりにホスト名をセットする。
    # echo `hostname` > /var/qmail/control/me ← 本来は自ドメイン名を送信元ドメイン名にする
    # echo `hostname` >> /var/qmail/control/rcpthosts
      ← 本来は自ドメイン名を受信ドメイン名として追加
    # echo `hostname` >> /var/qmail/control/locals
      ← 本来は自ドメイン名をローカルドメイン名として追加
    # echo "MANPATH /var/qmail/man" >> /etc/man.config
      ← manコマンドでqmailコマンドのマニュアルを参照できるようにする
    

2. checkpasswordインストール
SMTP認証、POP認証に使用するcheckpasswordをインストールする

  1. ) checkpasswordのダウンロード
    # cd /tmp/work
    # wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz ← checkpasswordダウンロード
    ※checkpasswordの最新版のURLはcheckpasswordダウンロードページ
    http://cr.yp.to/checkpwd/install.htmlで確認すること
    # tar zxvf checkpassword-0.90.tar.gz ← checkpassword展開
    
  2. ) パッチの適用
    # cd checkpassword-0.90 ← checkpassword展開先ディレクトリへ移動
    # vi error.h ← error.h編集
    extern int errno;
      
    #include<errno.h> ← 変更
    
    注:error.hの編集は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処
    /lib/libc.so.6: could not read symbols: 不正な値です
    collect2: ld はステータス 1 で終了しました
    make: *** [auto-str] エラー 1
  3. ) checkpasswordのインストール
    # make && make setup check &color(lime){← ???????}:
    ・
    ・
    ・
    ./install
    ./instcheck
    # chown root:nofiles /bin/checkpassword ← checkpasswordの所有者、所有グループ変更
    # chmod 4750 /bin/checkpassword ← checkpasswordが所有者権限で動作するように設定
    

3. tcpserverインストール
qmailへのSMTP接続制御を行うため、tcpserverが含まれたucspi-tcpをインストールする

  1. ) tcpserverのダウンロード
    # cd /tmp/work
    # wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz ← tcpserverダウンロード
    ※ucspi-tcpの最新版のURLはucspi-tcpダウンロードページ
    http://cr.yp.to/ucspi-tcp/install.htmlで確認すること
    # tar zxvf ucspi-tcp-0.88.tar.gz ← ucspi-tcp展開
    # cd ucspi-tcp-0.88 ← ucspi-tcp展開先ディレクトリへ移動
    
  2. ) パッチの適用
    # vi error.h ← error.h編集
    extern int errno;
      
    #include<errno.h> ← 変更
    
    注:error.hの編集は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処。
    /lib/libc.so.6: could not read symbols: 不正な値です
    collect2: ld はステータス 1 で終了しました
    make: *** [auto-str] エラー 1
  3. ) ucspi-tcpのインストール
    # make setup check
    ・
    ・
    ・
    ./install
    ./instcheck
    
  4. ) ucspi-tcpの設定
    # echo '127.:allow,RELAYCLIENT=""' > /etc/tcp.smtp ← 中継許可ホストに自ホストを登録
    # tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
      ← /etc/tcp.smtpをcdb形式に変換
    

4. fastforwardインストール
sendmail用システム共通メール転送設定ファイル(/etc/aliases)をqmailで利用するのに必要なfastforwardをインストールする

  1. ) fastforwardのダウンロード
    # cd /tmp/work
    # wget http://cr.yp.to/software/fastforward-0.51.tar.gz ← fastforwardダウンロード
    ※fastforwardの最新版のURLはfastforwardダウンロードページ
    http://cr.yp.to/fastforward.htmlで確認すること
    # tar zxvf fastforward-0.51.tar.gz ← fastforward展開
    
  2. ) パッチの適用
    # cd fastforward-0.51 ← fastforward展開先ディレクトリへ移動
    # vi error.h ← error.h編集
    extern int errno;
      
    #include<errno.h> ← 変更
    
    注:error.hの編集は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処。
    /lib/libc.so.6: could not read symbols: 不正な値です
    collect2: ld はステータス 1 で終了しました
    make: *** [auto-str] エラー 1
  3. ) fastforwardのインストール
    # make setup check
    ・
    ・
    ・
    ./instcheck
    
  4. ) fastforwardの設定
    # chmod 0 /usr/bin/newaliases ← 旧newaliasesコマンド無効化
    # mv /usr/bin/newaliases /usr/bin/newaliases.bak ← 旧newaliasesコマンドをリネーム
    # ln -s /var/qmail/bin/newaliases /usr/bin/newaliases
      ← newaliasesコマンドをfastforwardに置換え
    # newaliases ← /etc/aliasesのcdb形式データベース作成
    # ll /etc/aliases.cdb ← /etc/aliasesのcdb形式データベース作成確認
    -rw-r--r--  1 root root 6594 10月 15 14:13 /etc/aliases.cdb
    # echo "|/var/qmail/bin/fastforward -p -d /etc/aliases.cdb" > /var/qmail/alias/.qmail-default
     ← /etc/aliases.cdbをqmailが参照するように設定
    
    注:ホスト名を変更した場合、newaliasesを再実行すること。

5. qmail設定

  1. ) qmail設定
    # echo "10485760" > /var/qmail/control/databytes
      ← 送受信可能メールサイズを10MB=10*1024*1024に制限
    注:制限を超えた場合、送信元へエラー通知される。
    # touch /var/qmail/control/doublebounceto ← ダブルバウンスメールは破棄する。
    
    注:ダブルバウンスメールとは、送信者・受信者ともに存在しないメールのこと。
  2. ) Maildir形式メールボックス作成 デフォルトでインストールされているsendmailのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からqmailデフォルトのMaildir形式へ移行する。
    なお、~/Maildir, ~/Maildir/new, ~/Maildir/cur, ~/Maildir/tmp の属性は700 である。
    Maildirディレクトリはテンプレートディレクトリーで既に設定されている。
  3. ) /etc/servicesへのプロトコル・ポート設定
    /etc/servicesにsmtpとpop3を登録する。 /etc/servicesの編集。
    # vi /etc/services
    
    smtp  25/tcp  mail
    pop3  110/tcp  pop-3
    
    この2種類が登録されていることを確認する。なければ追記する。
  4. ) エイリアスの設定
    qmailでは,rootは直接メールを受取ることができない。 そこで、.qmail-rootでroot宛のメールを受取る人(のメールアドレス) (複数の宛先指定可能)を書く。
    postmaster,mailer-daemon,root宛てメールに対してエイリアスを設定する。
    各ファイルをテキストエディタで開いてメール管理者など必要に応じてメールアドレスを指定しておく。
    # cd /var/qmail/alias/
    # touch .qmail-postmaster
    # touch .qmail-mailer-daemon
    # touch .qmail-root
    # chmod 644 .qmail*
    # vi .qmail-root
    
    &sysadmin
    &sysadmin@localhost.com
    

6. qmail起動

  1. ) 旧SMTPサーバー停止
    SMTPサーバーをqmailに置換えるため、現在起動しているSMTPサーバー (sendmail)を停止する。
    なお、sendmailは不要だが、依存しているパッケージが多数あるので アンインストールはしないようにする。
    # /etc/rc.d/init.d/sendmail stop ← sendmail停止
    sendmailを停止中:                                          [  OK  ]
    sm-clientを停止中:                                         [  OK  ]
    # chkconfig sendmail off ← sendmail自動起動設定解除
    
  2. ) 既存メールサーバーの停止
    メールデータ移行中にメールを受け付けないようにするため、メールサーバーは停止しておく。
    # /etc/rc.d/init.d/sendmail stop
    
  3. ) sendmailコマンド置換え CGI等でメール通知に利用するsendmailコマンドをqmailに置換える。
    # chmod 0 /usr/lib/sendmail ← 旧sendmailコマンド無効化
    # chmod 0 /usr/sbin/sendmail ← 旧sendmailコマンド無効化
    # mv /usr/lib/sendmail /usr/lib/sendmail.bak ← 旧sendmailコマンドをリネーム
    # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak ← 旧sendmailコマンドをリネーム
    # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail ← sendmailコマンドをqmailに置換え
    # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail ← sendmailコマンドをqmailに置換え
    
  4. ) qmail起動スクリプト作成
  • 【dot-forward利用する場合】
    # cp /var/qmail/boot/home+df /var/qmail/rc
      ← qmail起動コマンドサンプルを所定の場所へコピー
    
  • 【dot-forward利用しない場合】
    # cp /var/qmail/boot/home /var/qmail/rc
        ← qmail起動コマンドサンプルを所定の場所へコピー
    # vi /var/qmail/rc
    
        途中にある ./Mailbox の部分を ./Maildir/ (←最後のスラッシュが重要)としておく
        qmail-start ./Mailbox splogger qmail
                      
        qmail-start ./Maildir/ splogger qmail
    
    # yum -y install tcsh ← cシェルインストール
    # vi /etc/rc.d/init.d/qmail ← qmail起動スクリプト作成
    
    #!/bin/bash
    #
    # qmail
    #
    # chkconfig: 2345 80 30
    # description: qmail start/stop script
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
    
    [ -f /var/qmail/rc ] || exit 0
    
    start() {
        # Start daemons.
        if [ -z $(/sbin/pidof qmail-send) ];  then
            echo -n "Starting qmail"
    
            # qmail
            csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
    
            # SMTP
            tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \
            -x /etc/tcp.smtp.cdb 0 smtp \
            fixcrio qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\
            splogger smtp &
    
            RETVAL=$?
            echo
            [ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
            return $RETVAL
        else
            echo "qmail is already started"
        fi
    }
    
    stop() {
        # Stop daemons.
        if [ ! -z $(/sbin/pidof qmail-send) ];  then
            echo -n "Shutting down qmail"
            /bin/kill $(/sbin/pidof tcpserver)
            /bin/kill $(/sbin/pidof qmail-send)
            until [ -z $(/sbin/pidof qmail-send) ] && [ -z $(/sbin/pidof tcpserver) ]; do :; done
            echo
            rm -f /var/lock/subsys/qmail
        else
            echo "qmail is not running"
        fi
    }
    
    case "$1" in
      start)
            start
            ;;
      stop)
            stop
            ;;
      restart)
            stop
            start
            ;;
      status)
            if [ ! -z $(/sbin/pidof qmail-send) ] ;  then
                echo -n "qmail (pid"
                echo -n " `/sbin/pidof qmail-send`"
                echo -n " `/sbin/pidof tcpserver`"
                echo ") is running..."
            else
                echo "qmail is stopped"
            fi
            ;;
       *)
            echo "Usage: qmail {start|stop|restart|status}"
            exit 1
    esac
    
    exit 0
    
    qmail起動スクリプトへ実行権限付与
    # chmod +x /etc/rc.d/init.d/qmail
    
  1. ) qmail起動
    # /etc/rc.d/init.d/qmail start ← qmail起動
    Starting qmail
    # chkconfig qmail --add ← qmailをchkconfigへ追加
    # chkconfig qmail on ← qmail自動起動設定
    # chkconfig --list qmail ← qmail自動起動設定確認
    qmail           0:off   1:off   2:on    3:on    4:on    5:on    6:of
    

7. ポート25番のOPEN
ネットワーク上でTCP/IPの25番ポートが開いていること。(サーバー、クライアント、ルーターなどのファイヤーウォールやセキュリティー設定で OPENされていること。)

8. Muttインストール
Maildir 形式のメールに対応しているテキストベースのMUA、Muttをインストールする。

  1. ) Muttのインストール
    # yum -y install mutt
    
    ==========================================================================================
     Package          Arch             Version                         Repository        Size
    ==========================================================================================
    Installing:
     mutt             i386             5:1.4.2.2-3.0.2.el5             base             1.1 M
    
    Transaction Summary
    ==========================================================================================
    Install      1 Package(s)
    Update       0 Package(s)
    Remove       0 Package(s)
    
  2. ) Muttの設定
    1. Muttrcの設定
      # vi /etc/Muttrc
      
      最低限修正必要な箇所は以下。
      set folder="~/Maildir"
      set mbox="~/Maildir"
      set mbox_type=Maildir
      set spoolfile="~/Maildir"
      
    2. /root/.muttrcの設定
      root に "su -" したままメールの確認をしたいことがあるので、root の時 Localのユーザーmaint のメールボックスを読めるように.muttrcを設定する。
      # vi /root/.muttrc
      
      set folder="~maint/Maildir"
      set mbox="~maint/Maildir"
      set spoolfile="~maint/Maildir"
      set from="root@acompass.net
      set realname="root"
      
      注:mutt を '-x' オプションで起動すると UCB Mail 互換モードで 動作する。
    3. muttの起動
      # mutt         ←コマンドを入力すると以下のように表示
      q:Quit  d:Del  u:Undel  s:Save  m:Mail  r:Reply  g:Group  ?:Help            
         1   F Oct 10 To maint@loca (0.1K) Test
         2   F Oct 13 To maint@acom (0.1K) Test
      
    4. muttの使用方法
      1行目にコマンドが表示されているので該当のキーを押下する。
      ?でHelpが表示される。
      上下の矢印キーでメールを選択して、エンターキーで内容を表示する。

9. qmail-pop3d設定(受信メールサーバーをPOPにする場合)

  1. ) qmail-pop3d設定
    # vi /etc/rc.d/init.d/qmail ← qmail起動スクリプト編集
    
    start() {
        # Start daemons.
        if [ -z $(/sbin/pidof qmail-send) ] ;  then
            echo -n "Starting qmail"
    
            # qmail
            csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
    
            # SMTP
            tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \
            -x /etc/tcp.smtp.cdb 0 smtp rblsmtpd -r relays.ordb.org \
            fixcrio qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\
            splogger smtp &
    
    ----追加(ここから)----
            # POP3
            tcpserver -qvRH -u `id -u qmaild` -g `id -g qmaild` \
            0 pop3 qmail-popup `hostname` /bin/checkpassword \
            qmail-pop3d Maildir 2>&1 | splogger pop3 &
    ----追加(ここまで)----
    
            RETVAL=$?
            echo
            [ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
            return $RETVAL
        else
            echo "qmail is already started"
        fi
    }
    
    # /etc/rc.d/init.d/qmail restart ← qmail再起動
    Shutting down qmail
    Starting qmail
    
  2. ) ポート110番のOPEN
    ネットワーク上でTCP/IPの110番ポートが開いていること。(サーバー、クライアント、ルーターなどのファイヤーウォールやセキュリティー設定で OPENされていること。)

10. メールソフト設定(受信メールサーバーをPOPにする場合)
自宅や会社等の複数拠点でメールを使用する場合で、メールボックスを同期しなくてもいい場合 (例:会社で受信したメールは自宅で受信できなくてもいい場合)、受信メールサーバーにPOPを使用する。 ここでは、メールソフトとしてOutlook Expressの設定について説明する。

  1. ) Outlook Expressを起動する。
  2. ) メニューの「ツール」⇒「アカウント」⇒「メール」タブ⇒「追加」ボタン⇒「メール」としてメール設定を行う。
  3. ) 「表示名」に送信者の名前(任意)を入力して「次へ」をクリックする。
  4. ) 「電子メールアドレス」に送信者のメールアドレス(例:centos@acompass.net)を入力して「次へ」をクリックする。
  5. ) 「受信メールサーバー」にメールサーバー名(例:mail.acompass.net)を入力する。
  6. ) 「送信メールサーバー」にメールサーバー名(例:mail.acompass.net)を入力して「次へ」をクリックする。
  7. ) 「パスワード」にパスワードを入力して「次へ」をクリックする。
  8. ) 「完了」をクリックする。
  9. ) 追加したアカウントをダブルクリックしてプロパティを開く。
  10. ) 「サーバー」タブの「このサーバーは認証が必要」をチェックする。
  11. ) 「OK」をクリックする。

11. キューに溜まっているメールを表示するツールのインストール
qmailのqueueから特定のメールだけを表示・削除できるツールqueue-adminを導入する。

  1. ) queue-adminのインストール
    対象となるファイルの文字コードがEUCのため一度PCにダウンロードしてUTF-8にコード変換して、サーバーにアップロードする。
    ・ファイルを[ http://cmf.ohtanz.com/download/queue-admin.txt ]からPC上にダウンロードする。
    ・PC上でEUCからUTF-8にコード変換する。
    ・ファイルをサーバーの/tmp/workにアップロードする。
    ・インストールする。
    # cd /tmp/work
    # mv queue-admin.txt /var/qmail/bin/queue-admin
    # chmod 755 /var/qmail/bin/queue-admin 
    
  2. ) 使用例
    1. queueに溜まっているメールのリストを表示
      # /var/qmail/bin/queue-admin --ls
      
       
    2. キュー番号「1111111」「2222222」のメールを表示
      # /var/qmail/bin/queue-admin --cn 1111111 2222222
      
       
    3. Toヘッダーに「aaa@example.com」「bbb@examle.com」が含まれるメールを削除。
      # /etc/rc.d/init.d/qmail stop
      # /var/qmail/bin/queue-admin --dt aaa@examle.com bbb@examle.com
      # /etc/rc.d/init.d/qmail start
      
       
    4. Subjectヘッダーに「test1」「test2」が含まれるメールを表示
      # /var/qmail/bin/queue-admin --ss test1 test2
      
    5. メール本文に「test1」「test2」が含まれるメールを表示
      # /var/qmail/bin/queue-admin --sb test1 test2
      

最終更新のRSS
Last-modified: 2014-03-11 (火) 01:59:57 (3691d)