当サイトをご利用頂き有難うございます。
当サイトは今月末日にモールタイプの総合検索サイトへリニューアルの予定です。
サイト名も変更となりますが、今後とも宜しくお願いいたします。

メールサーバー

SMTPサーバー(送信)には Postfix を使用します。
(sendmail互換に開発されたSMTPサーバーです。)
POP/IMAPサーバー(受信)には dovecot を使用します。

メールを格納する形式にはMaildir形式を採用しました。
データの保守性(ファイルの破損など)やセキュリティ的にもMaildir形式がオススメです。

さーいよいよ構築作業に入ります。
メールサーバーはサーバーの中でも大物中の大物です。
設定ミスが無き様、心を引き締めて取り掛かりましょう。


-------- メール格納形式を簡単におさらい --------

  共有ディレクトリ形式

      /var/spool/mail/ユーザ名の一つのファイルに全てのメールを蓄積します。

  ホームMailbox形式

      /home/ユーザ名/Mailbox名の一つのファイルに全てのメールを蓄積します。

  Maildir形式は

      新着メール  : /home/ユーザ名/Maildir/new
      既読メール  : /home/ユーザ名/Maildir/cur
      配送中メール : /home/ユーザ名/Maildir/tmp

    と分割され各ディレクトリ内でメール1通を1ファイルとして格納します。
----------------------------------------


①Postfixのインストール(送信メールサーバー)

   GNOME端末より

     1. # su   と root管理者権限のパスワード を入力

     2. # yum install postfix cyrus-sasl system-switch-mail-gnome を入力

     3. y     でリポジトリへの接続とインストール開始。

     4. 暫くすると Complete! でインストール完了です。

②dovecotのインストール(受信メールサーバー)

   GNOME端末より

     1. # su   と root管理者権限のパスワード を入力

     2. # yum install dovecot を入力

     3. y     でリポジトリへの接続とインストール開始。

     4. 暫くすると Complete! でインストール完了です。

③ファイアーウォールの設定

   システム → 管理 → ファイアーウォールの設定 → 信頼したサービス

     一覧の中から メール(SMTP) にチェックを入れる

   システム → 管理 → ファイアーウォールの設定 → その他のポート

    一覧の中から  110 tcp
               110 udp
               143 tcp
               143 udp
               993 tcp
               993 udp
               995 tcp
               995 udp   を選ぶ → 適用 → 終了

④メールサービスの有効化および各種設定など


   --------- これより以降の設定は他の構築が済んでから再開しました。     ---------  
   --------- サーバーの中でもメールサーバーは大物級(難易度が高い)なので --------- 
   --------- 他に立ち上げるサーバーがあるのであれば               --------- 
   --------- 他を優先して立ち上げる事をオススメします。              ---------


⑤Postfixの設定(main.cfの編集)

   GNOME端末より

      # vi /etc/postfix/main.cf

        # INTERNET HOST AND DOMAIN NAMES
           (略)
        #myhostname = host.domain.tld
        #myhostname = virtual.domain.tld

        myhostname = mail.abc.xyz.com  →  メールサーバー名を追加(ホスト名ドメイン名)


        # The mydomain parameter specifies the local internet domain name.
           (略)
        #mydomain = domain.tld
        mydomain = abc.xyz.com  →  追加(ホスト名ドメイン名)


        # SENDING MAIL
           (略)
        #myorigin = $myhostname
        #myorigin = $mydomain
        myorigin = $myhostname
              →  追加(メール送信時に送信元メールアドレスの@以降にドメイン名を付加します)


        # RECEIVING MAIL
           (略)
        #inet_interfaces = $myhostname, localhost
        #inet_interfaces = localhost
        inet_interfaces = all  → 追加(外部からのメール受信を許可)


        # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
           (略)
        mydestination = $myhostname, localhost.$mydomain, localhost

            →  コメントアウトします(# mydestination = $myhostname, localhost.$mydomain, localhost)

        mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

            →  追加(メールが受信できるようになります)

        # Alternatively, you can specify the mynetworks list by hand, in
           (略)
        #mynetworks = 168.100.189.0/28, 127.0.0.0/8        
        mynetworks = 192.168.0.0/24, 127.0.0.0/8
                     →  LANのアドレスとローカルホストアドレスを設定


        # TRUST AND RELAY CONTROL
           (略)
        # mynetworks_style = subnet  →  コメントアウトを外します(mynetworks_style = subnet)
           (略)
        # relay_domains = $mydestination  →  コメントアウトを外します(relay_domains = $mydestination)


        # REJECTING MAIL FOR UNKNOWN LOCAL USERS
           (略)
        #local_recipient_maps = unix:passwd.byname $alias_maps
          →  サーバーに登録されたユーザーのみ受信する場合はコメントアウトを外します(#を取る)

           * 教育用などのサーバー構築に有効です。
           * 今回のサーバーの構築ではデフォルトの設定(#は付けたまま)にしました。


        # DELIVERY TO MAILBOX
           (略)
        #home_mailbox = Mailbox
        #home_mailbox = Maildir/
        home_mailbox = Maildir/  →  追加(メールボックス形式をMaildir形式にします)

           * メールボックス(Maildir)を各ユーザのホームディレクトリに配置します。


        # For details, see "man header_checks".
        #
        #header_checks = regexp:/etc/postfix/header_checks

            →  コメントアウトを外します(header_checks = regexp:/etc/postfix/header_checks)


        # SHOW SOFTWARE VERSION OR NOT
           (略)
        #smtpd_banner = $myhostname ESMTP $mail_name
        #smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
        smtpd_banner = $myhostname ESMTP unknown
                   →  追加(メールサーバ情報の隠蔽化)


        # INSTALL - TIME CONFIGURATION INFORMATION
           (略)
        sendmail_path = /usr/sbin/sendmail.postfix


    ---- 以下を最終行へ追加(SMTP-Authを有効にします。*印の付記は追加しません。) ----

           * メール送信時にユーザ名とパスワードで認証を行ない、
             迷惑メールの不正中継に利用されないようにします。

        # Enable SMTP Auth

         allow_percent_hack = yes  →  "user%domain" から "user@domain" への書き換えを有効にします。
         disable_vrfy_command = yes
             →  アカウント流出の防止(ローカルユーザの洗い出しを不可能にします)
         smtpd_sasl_auth_enable = yes  →  SMTP認証を有効にします。
         smtpd_sasl_local_domain = $myhostname
             →  SMTP認証するローカルドメインの指定
                 (上段にあるmyoriginの値と同じにします。
                     同じにしないとメーラーの認証でエラーが発生します。)

           * メールアドレスを user@abc.xyz.comにする場合は
             $mydomainを指定します。(myoriginの値も$mydomainにします。)

         smtpd_sasl_security_options = noanonymous, noplaintext

           * noanonymous : 匿名は許可しない
           * noplaintext    : 暗号化されていないパスワードは許可しない

         smtpd_recipient_restrictions =
                    permit_mynetworks,
                    permit_sasl_authenticated,
                    permit_auth_destination,
                    reject_unauth_destination

                       →  SMTP認証内容の設定(実際の記述は一行にします。
                            多い時には , と 半角ブランク で繋ぎます。)

           * permit_mynetworks : mynetworksで指定されたネットワークからを許可
           * permit_sasl_authenticated : SMTP認証を通過したものを許可
           * permit_auth_destination : 自サーバ宛のメールを許可
           * reject_unauth_destination : 上記設定以外は全て拒否

         broken_sasl_auth_clients = yes
         smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit

             →  Authコマンドのサポートを認識できない
                    (Outlook Express 4 、 Exchange 5等)クライアント対応

         smtpd_sender_restrictions = reject_unknown_sender_domain

             →  送信者アドレスを制限

         message_size_limit = 10485760
            →  (受信メールサイズを10MB=10*1024*1024に制限)

      # postfix check  →  エラーをチェックします。

      # postfix reload  →  上記のチェックでエラーがなければリロードします。

           * エラーが出た場合は先達たちの意見を参考にします。
                             (エラーをコピペして目いっぱいググリます。)

        ---------------- エラー時のお助けコマンド ----------------

    # postconf  : 現在の設定ファイル( main.cf )の設定事項のみが表示されます。
    # postconf -n  : 設定ファイル( main.cf )で変更した設定のみを表示することができます。
    # postconf -d  : 設定ファイル( main.cf ) のデフォルト値を確認することができます。

    # vi /var/log/maillog  : メールメッセージの送受信によるエラーログを見ることができます。


⑥転送設定

   GNOME端末より

     # vi /etc/aliases

       # Person who should get root's mail
       #root: marc
       root: abc  →  ユーザー名abcを追加(ユーザ abc に転送)

     # newaliases  →  aliasesの読み込み(修正した内容を反映します)

⑦header_checksの設定(main.cfに対応)

   GNOME端末より

     # vi /etc/postfix/header_checks

        ---- 以下を最終行へ追加します ----

         /^Received:.*192\.168\..*/ IGNORE
         /^Received:.*127\.0\.0\.1.*/ IGNORE

           * メールのヘッダー部(Received行)に
                  ローカルIPアドレスが表示されないように設定を変更します。

⑧認証プログラムの設定(Cyrus SASL)

   GNOME端末より

     # vi /usr/lib/sasl2/smtpd.conf

         pwcheck_method: saslauthd  →  コメントアウトします
         pwcheck_method: auxprop  →  追加(/etc/sasldb2を参照に行きます)
         mech_list: plain login  →  コメントアウトします
         mech_list: plain login cram-md5 digest-md5  →  追加

     # vi /etc/sysconfig/saslauthd

         MECH=pam  →  コメントアウトします。(システムアカウントを利用した認証は使用しません。)

         FLAGS=  →  FLAGS=sasldb

           * SMTP認証にはシステムアカウントを利用する方法と、
             sasldb2を利用する方法があります。
             sasldb2では、システムアカウントとは異なるパスワードが設定できるので、
             sasldb2を利用した方がセキュリティを向上させます。


⑨SASLDBの作成とユーザー登録など

   GNOME端末より

     # saslpasswd2 -u mail.abc.xyz.com -c def
              →  ユーザ def を登録(ホスト名abcドメイン名xyz)

         Password:  →  パスワード
         Again (for verification):  →  パスワード(確認)

           * SASLのデータベースが /etc/sasldb2 として作成されます。

          ---------------- 変更処理 ----------------

           * パスワード変更

              # saslpasswd2 -u mail.abc.xyz.com def  →  ユーザ def のパスワードを変更
                Password:  →  パスワード
                Again (for verification):  →  パスワード(確認)

           * ユーザ削除

              # saslpasswd2 -u mail.abc.xyz.com -d def  →  ユーザ def を削除

           * ユーザ確認

              # sasldblistusers2

          ------------------------------------------------

     # chmod 600 /etc/sasldb2  →  パーミッションを変更
     # chown postfix:postfix /etc/sasldb2  →  権限の変更

           * SALSのデータベースをPostfixから参照できるようにしました。
           * root でも変更したい場合は、

              # chown root /etc/sasldb2
              # chmod 640 /etc/sasldb2
              # chgrp postfix /etc/sasldb2  のように設定します。

    (メールサーバ構築後はセキュリティ面で postfix:postfix(600) を推奨します。
       メールサーバ構築中は構築作業がし易い root:postfix(640) をオススメします。)

⑩Postfixの起動(sendmailからPostfixが標準MTAへ切り替え)

   GNOME端末より

     # /etc/rc.d/init.d/sendmail stop  →  sendmail の停止

     # chkconfig sendmail off  →  サーバー起動時にsendmailの自動起動設定解除。

     # chkconfig --list sendmail  →  sendmailの自動起動設定解除を確認

     # alternatives --config mta  →  システムで使用するメールサーバーを切替えます

           2 プログラムがあり 'mta'を提供します。

            選択 コマンド
           -----------------------------------------------
           *+ 1 /usr/sbin/sendmail.sendmail
            2 /usr/sbin/sendmail.postfix

           Enterを押して現在の選択[+]を保持するか、選択番号を入力します:2  →  2を入力しEnter

     # /etc/rc.d/init.d/postfix start  →  Postfixを起動

     # chkconfig postfix on  →  Postfixをサーバー起動時に自動で立ち上げます。

     # chkconfig --list postfix  →  Postfixの自動起動設定を確認

⑪Dovecotの設定(dovecot.confの編集)

   GNOME端末より

     # vi /etc/dovecot.conf

         # Protocols we want to be serving: imap imaps pop3 pop3s
         # If you only want to use dovecot-auth, you can set this to "none".
         #protocols = imap imaps pop3 pop3s
         protocols = imap imaps pop3 pop3s  →  追加

           (略)

         #
         #
         #mail_location =
         mail_location = maildir:~/Maildir  →  追加(メールボックスをMaildir形式にする)

⑫Dovecotの起動

   GNOME端末より

     # /etc/rc.d/init.d/dovecot start  →  Dovecotの起動

     # chkconfig dovecot on  →  Dovecotの自動起動設定

     # chkconfig --list dovecot  →  Dovecotの自動起動設定を確認


 ------------  ⑫までの構築を完了するとメールサーバーが受信したメールは、 ------------
 ------------  共有ディレクトリ /var/spool/mail/ユーザ名 というファイルに    ------------
 ------------  全てのメールが蓄積(格納)されるようになります。          ------------
 ------------  メーラーでtestメールを発信して「/var/spool/mail/ユーザ名」に  ------------
 ------------  受信メールの内容が有るのを確認してみましょう。          ------------


 ========  いよいよ、Maildir/ 形式への移行です。 ========


①Postfix を停止

   GNOME端末より

     # postfix stop

           * サーバーを再起動するとPostfix が自動起動し
                 メールを受信してしまうので注意しましょう。

②メールボックス作成

   GNOME端末より

     # mkdir -p /etc/skel/Maildir/{new,cur,tmp}

            →  新規ユーザ追加時に自動でMaildir形式メールボックス作成

     # chmod -R 700 /etc/skel/Maildir/

            →  メールボックスのパーミッションを700に設定

           * 新規ユーザ追加時に自動で home(ホームディレクトリ)に
                         Maildir形式のメールボックスが作成されます。

③rpm管理ツールのインストール

   GNOME端末より

     # yum -y install cpan2rpm

           →  PerlモジュールをRPMパッケージでインストール出来るようにします。

④Maildir変換ツールのインストール

   GNOME端末より

     # wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl

        →  Maildir変換ツールのダウンロード

     # chmod +x /usr/local/bin/perfect_maildir.pl  →  Maildir変換ツールへ実行権限付与

⑤TimeDateモジュールのインストール(Maildir変換に必要です)

   GNOME端末より

     # yum install perl-TimeDate

⑥Maildir一括変換スクリプト作成

   GNOME端末より

     # vi migrate-maildir.sh

   ------------- 新規作成ファイル内容 --------------------------------

#!/bin/bash

#
#Maildir一括変換スクリプト
#

#メールボックス=>Maildir形式変換スクリプト
#http://perfectmaildir.home-dn.net/
FOLDERCONVERT=/usr/local/bin/perfect_maildir.pl

#一般ユーザリスト
USERLIST=`ls /home/`

#ログ
MIGRATELOG=/tmp/migrate-maildir.log
rm -f $MIGRATELOG

#引数(変換元メールボックス形式)チェック
if [ "$1" != "mbox" ] && [ "$1" != "Mailbox" ]; then
echo "Usage: migrate-maildir.sh {mbox|Mailbox}"
exit
fi

#一般ユーザメールボックス移行
for user in $USERLIST;
do
if [ "$1" = "mbox" ]; then
inbox="/var/spool/mail/${user}"
else
inbox="/home/${user}/Mailbox"
fi
if [ -f "${inbox}" ]; then
newdir="/home/${user}/Maildir/"
mkdir -p "$newdir"
mkdir -p "$newdir"/cur
mkdir -p "$newdir"/new
mkdir -p "$newdir"/tmp
chmod -R 700 "${newdir}"
$FOLDERCONVERT "$newdir" < "${inbox}" >> $MIGRATELOG 2>&1
chown -R ${user}. "$newdir"
find "$newdir" -type f -exec chmod 600 {} \;
fi
done

#rootユーザメールボックス移行
user="root"
if [ "$1" = "mbox" ]; then
inbox="/var/spool/mail/${user}"
else
inbox="/${user}/Mailbox"
fi
if [ -f "${inbox}" ]; then
newdir="/${user}/Maildir/"
mkdir -p "$newdir"
mkdir -p "$newdir"/cur
mkdir -p "$newdir"/new
mkdir -p "$newdir"/tmp
chmod -R 700 "${newdir}"
$FOLDERCONVERT "$newdir" < "${inbox}" >> $MIGRATELOG 2>&1
chown -R ${user}. "$newdir"
find "$newdir" -type f -exec chmod 600 {} \;
fi
[ -a $MIGRATELOG ] && cat $MIGRATELOG;rm -f $MIGRATELOG

   ---------------------------------------------------------------- 以上 -------

⑦メールデータ移行(共有ディレクトリ形式→Maildir形式)

   GNOME端末より

     # sh migrate-maildir.sh mbox  →  Maildir一括変換スクリプト実行

⑧Maildir移行スクリプト削除

   GNOME端末より

     # rm -f migrate-maildir.sh  →  Maildir一括変換スクリプト削除
     # rm -f /usr/local/bin/perfect_maildir.pl  →  Maildir変換ツール削除

⑨Postfix を起動

   GNOME端末より

     # postfix start

⑩動作確認

   お使いのメーラーを立ち上げ、送受信を確認します。

⑪mailサーバへのユーザー追加・ユーザー削除・転送方法

   --- ユーザー追加

     # useradd -s /sbin/nologin ユーザー名

   --- パスワード変更

     # passwd ユーザー名  
      New password: ********  →  パスワード入力
      Retype password:********  →  パスワード再入力

      passwd: all authentication tokens updated successfully

   --- ユーザー削除

     # userdel -r ユーザー名

   --- mail転送

     # vi .forword

       /home/ユーザー名
       xxxx@abcdef.com  →  転送先アドレス

     :wq


お疲れ様です。

まだまだ、機能などは他にも搭載しなければならないものもありますが、
送受信のベースが出来上がりました。