メールサーバー構築(sendmail+Dovecot)

 

メールサーバー構築(sendmail+Dovecot)

最終更新日: 2009.12.29

■概要

メールサーバーを構築する場合、送信メールサーバー(SMTPサーバー)と受信メールサーバー(POP/IMAPサーバー)の構築が必要となる。
ここでは、送信メールサーバーにはデフォルトでインストールされているsendmail、受信メールサーバーにはDovecotを採用する。

なお、sendmailは迷惑メールの不正中継に利用されないようにするため、デフォルトでは外部から外部宛(例えば、会社等で自宅サーバーのメールアドレスからプロバイダのメールアドレス宛)に送信できないようになっているが、迷惑メールの不正中継に利用されずに外部から外部宛に送信できるようにするため、SMTP-Auth機能※をもたせる。
また、DovecotはPOP/IMAPサーバーとして構築し、ユーザがPOPまたはIMAPを選択できるようにする。※POPとIMAPの違い

※SMTP-Auth機能とは、メール送信時にユーザ名とパスワードで認証を行なう機能であり、これにより、迷惑メールの不正中継に利用されないようにする。


■sendmail設定

(1)sendmail-cfインストール
sendmail.mcからsendmail設定ファイル(sendmail.cf)を作成するのに必要なsendmail-cfをインストールする。
※sendmail設定ファイル(sendmail.cf)は難解なため、sendmail.mcを編集してsendmail.cfに変換するのが一般的である

[root@centos ~]# yum -y install sendmail-cf ← sendmail-cfインストール

(2)sendmail設定

[root@centos ~]# vi /etc/mail/sendmail.mc ← sendmail.mc編集
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
↓
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl ← 変更(外部からの受信を許可)

dnl MASQUERADE_AS(`mydomain.com')dnl
MASQUERADE_AS(`centossrv.com')dnl ← 追加(送信元アドレスの@以降をドメイン名にする)

dnl FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_envelope)dnl ← 追加(エンベロープFromも書き替える)

EXPOSED_USER(`root')dnl
↓
dnl EXPOSED_USER(`root')dnl ← 変更(送信元がrootの場合も書き替える)

dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
↓
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl ← 行頭のdnlを削除(SMTP-Auth有効化)
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') ← 行頭のdnlを削除(SMTP-Auth有効化)

define(`confMAX_MESSAGE_SIZE',`10485760') ← 最終行へ追加(受信メールサイズを10MB=10*1024*1024に制限)

以下を最終行へ追加(メールサーバー名&バージョン情報の隠蔽)
define(`confSMTP_LOGIN_MSG',`unknown')dnl
define(`confRECEIVED_HEADER',`$?sfrom $s $.$?_($?s$|from $.$_)
        $.$?{auth_type}(authenticated)
        $.by $j (unknown)$?r with $r$. id $i$?u
        for $u; $|;
        $.$b')dnl

[root@centos ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ← sendmail.mcよりsendmail.cf作成

[root@centos ~]# echo `hostname -d` >> /etc/mail/local-host-names ← xxxx@centossrv.comでメールを受信できるようにする

(3)SMTP-Auth設定
SMTP-Auth用ユーザ名、パスワードにシステムのユーザ名、パスワードを使用する場合

[root@centos ~]# /etc/rc.d/init.d/saslauthd start ← saslauthd起動
saslauthd を起動中:                                        [  OK  ]

[root@centos ~]# chkconfig saslauthd on ← saslauthd自動起動設定

[root@centos ~]# chkconfig --list saslauthd ← saslauthd自動起動設定確認
saslauthd       0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2~5のonを確認

SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合

[root@centos ~]# vi /usr/lib/sasl2/Sendmail.conf ← SMTP-Auth認証設定ファイル編集
pwcheck_method:saslauthd
↓
pwcheck_method:auxprop ← 変更

(4)Maildir形式メールボックス作成
sendmailのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からMaildir形式へ移行する。

【既存ユーザ対処】
既存ユーザのホームディレクトリにMaildir形式のメールボックスを作成して、蓄積済のメールデータを当該メールボックスへ移行する⇒メールデータ移行を参照

【新規ユーザ対処】
新規ユーザ追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする

[root@centos ~]# mkdir -p /etc/skel/Maildir/new ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(1/4)

[root@centos ~]# mkdir -p /etc/skel/Maildir/cur ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(2/4)

[root@centos ~]# mkdir -p /etc/skel/Maildir/tmp ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(3/4)

[root@centos ~]# chmod -R 700 /etc/skel/Maildir/ ← 新規ユーザ追加時に自動でMaildir形式メールボックス作成(4/4)

(5)Maildir形式メールボックス対応
sendmailはMaildir形式メールボックスに対応していないため、ProcmailでMaildir形式メールボックスへ配送するようにする。

[root@centos ~]# vi /etc/procmailrc ← procmail設定ファイル作成
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/procmail.log # ログ出力先
#VERBOSE=ON # 詳細ログ出力

(6)未承諾広告メールの削除
未承諾広告メール(件名に「未承諾広告※」と表示されているメール)は受信せずに削除するようにする。

[root@centos ~]# vi /etc/procmailrc ← procmail設定ファイル編集
以下を追加
# 未承諾広告メール削除※システムの文字コードがUTF-8(デフォルト)の場合
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -mwZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null

# 未承諾広告メール削除※システムの文字コードがEUCの場合
:0
* ^Subject:.*iso-2022-jp
* ^Subject:\/.*
* ? echo "$MATCH" | nkf -meZ2 | sed 's/[[:space:]]//g' | egrep '未承諾広告※'
/dev/null


■sendmail再起動

(1)sendmail再起動

[root@centos ~]# /etc/rc.d/init.d/sendmail restart ← sendmail再起動
sendmail を停止中:                                         [失敗]
sendmailを起動中:                                          [  OK  ]
sm-clientを起動中:                                         [  OK  ]

(2)ポート25番のOPEN
ルーター側の設定でポート25番をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

ポートチェック【外部からポート開放確認】で「host名」にサーバー名(例:centossrv.com)、「port番号」に25と入力して「ポートチェック」ボタン押下し、「ホスト=centossrv.com ポート=25 にアクセスできました。」と表示されることを確認。


■OP25B対策

OP25B(Outbound Port 25 Blocking)対策参照


■Dovecotインストール


[root@centos ~]# yum -y install dovecot ← Dovecotインストール


■Dovecot設定


[root@centos ~]# vi /etc/dovecot.conf ← Dovecot設定ファイル編集
# Protocols we want to be serving:
#  imap imaps pop3 pop3s
#protocols = imap imaps
protocols = imap imaps pop3 pop3s ← 追加(POPアクセスを追加)

# Default MAIL environment to use when it's not set. By leaving this empty
# dovecot tries to do some automatic detection as described in
# doc/mail-storages.txt. There's a few special variables you can use:
#
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if user there's no domain
#   %h - home directory
#
# You can also limit a width of string by giving the number of max. characters
# after the '%' character. For example %1u gives the first character of
# username. Some examples:
#
#   default_mail_env = maildir:/var/mail/%1u/%u/Maildir
#   default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u
#   default_mail_env = mbox:/var/mail/%d/%n/:INDEX=/var/indexes/%d/%n
#
#default_mail_env =
default_mail_env = maildir:~/Maildir ← 追加(メールボックス形式をMaildir形式とする)


# ':' separated list of directories under which chrooting is allowed for mail
# processes (ie. /var/mail will allow chrooting to /var/mail/foo/bar too).
# This setting doesn't affect login_chroot or auth_chroot variables.
# WARNING: Never add directories here which local users can modify, that
# may lead to root exploit. Usually this should be done only if you don't
# allow shell access for users. See doc/configuration.txt for more information.
#valid_chroot_dirs =
valid_chroot_dirs = /home ← 追加※OpenSSHでChrootを設定している場合のみ


■Dovecot起動

(1)Dovecot起動

[root@centos ~]# /etc/rc.d/init.d/dovecot start ← Dovecot起動
Dovecot Imapを起動中:                                      [  OK  ]

[root@centos ~]# chkconfig dovecot on ← Dovecot自動起動設定

[root@centos ~]# chkconfig --list dovecot ← Dovecot自動起動設定確認
dovecot         0:off   1:off   2:on    3:on    4:on    5:on    6:off ← ランレベル2~5のonを確認

(2)ポート110番(POPの場合)または143番(IMAPの場合)のOPEN
ルーター側の設定でポート110番(POPの場合)または143番(IMAPの場合)をOPENする。
※ルーターの設定は各ルーターのマニュアルまたはメーカー別ルーターポート開放手順を参照

ポートチェック【外部からポート開放確認】で「host名」にサーバー名(例:centossrv.com)、「port番号」に110(POPの場合)または143(IMAPの場合)と入力して「ポートチェック」ボタン押下し、「ホスト=centossrv.com ポート=110(POPの場合)または143(IMAPの場合) にアクセスできました。」と表示されることを確認。


■メールユーザ追加

(1)メールユーザ追加(SSHによるリモート接続はできないようにする場合)
※例としてユーザ名をcentosとする

[root@centos ~]# useradd -s /sbin/nologin centos ← ユーザ追加

[root@centos ~]# passwd centos ← パスワード設定
Changing password for user centos.
New UNIX password:  ← パスワード応答
Retype new UNIX password:  ← パスワード応答(確認)
passwd: all authentication tokens updated successfully.

以下はSMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
[root@centos ~]# echo "パスワード" | saslpasswd2 -p -u linux.centossrv.com -c centos ← SMTP-Auth用ユーザ/パスワード登録

[root@centos ~]# sasldblistusers2 ← SMTP-Auth用ユーザ名、パスワード確認
centos@linux.centossrv.com: userPassword

※SMTP-Auth用ユーザ名、パスワードを削除する場合
[root@centos ~]# saslpasswd2 -d centos -u linux.centossrv.com ← SMTP-Auth用ユーザ名、パスワード削除

(2)メールユーザ追加(SSHによるリモート接続もできるようにする場合)
※例としてユーザ名をcentosとする

[root@centos ~]# useradd centos ← ユーザ追加

[root@centos ~]# passwd centos ← パスワード設定
Changing password for user centos.
New UNIX password:  ← パスワード応答
Retype new UNIX password:  ← パスワード応答(確認)
passwd: all authentication tokens updated successfully.

以下はSMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
[root@centos ~]# echo "パスワード" | saslpasswd2 -p -u linux.centossrv.com -c centos ← SMTP-Auth用ユーザ/パスワード登録

[root@centos ~]# sasldblistusers2 ← SMTP-Auth用ユーザ名、パスワード確認
centos@linux.centossrv.com: userPassword

※SMTP-Auth用ユーザ名、パスワードを削除する場合
[root@centos ~]# saslpasswd2 -d centos -u linux.centossrv.com ← SMTP-Auth用ユーザ名、パスワード削除

(3)既存ユーザをメールユーザとする場合
※例としてユーザ名をcentosとする

以下はSMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
[root@centos ~]# echo "パスワード" | saslpasswd2 -p -u linux.centossrv.com -c centos ← SMTP-Auth用ユーザ/パスワード登録

[root@centos ~]# sasldblistusers2 ← SMTP-Auth用ユーザ名、パスワード確認
centos@linux.centossrv.com: userPassword

※SMTP-Auth用ユーザ名、パスワードを削除する場合
[root@centos ~]# saslpasswd2 -d centos -u linux.centossrv.com ← SMTP-Auth用ユーザ名、パスワード削除


■メールソフト設定(受信メールサーバーをPOPにする場合)

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

Outlook Expressを起動し、メニューの「ツール」⇒「アカウント」⇒「メール」タブ⇒「追加」ボタン⇒「メール」としてメール設定を行う



「表示名」に送信者の名前(任意)を入力して「次へ」




「電子メールアドレス」に送信者のメールアドレス(例:centos@centossrv.com)を入力して「次へ」




「受信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力
「送信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力して「次へ」




「パスワード」にパスワードを入力して「次へ」




「完了」




追加したアカウントをダブルクリックしてプロパティを開く




「サーバー」タブの「このサーバーは認証が必要」をチェック
SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ「設定」ボタンをクリックして次の設定を行う




※SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
「次のアカウントとパスワードでログオンする」をチェック
「アカウント名」にSMTP-Auth用ユーザ名を入力
「パスワード」にSMTP-Auth用パスワードを入力して「OK」




「OK」




■メールソフト設定(受信メールサーバーをIMAPにする場合)

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

Outlook Expressを起動し、メニューの「ツール」⇒「アカウント」⇒「メール」タブ⇒「追加」ボタン⇒「メール」としてメール設定を行う



「表示名」に送信者の名前(任意)を入力して「次へ」




「電子メールアドレス」に送信者のメールアドレス(例:centos@centossrv.com)を入力して「次へ」




「受信メールサーバーの種類」で「IMAP」を選択
「受信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力
「送信メールサーバー」にメールサーバー名(例:mail.centossrv.com)を入力して「次へ」




「パスワード」にパスワードを入力して「次へ」




「完了」




追加したアカウントをダブルクリックしてプロパティを開く




「サーバー」タブの「このサーバーは認証が必要」をチェック
SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ「設定」ボタンをクリックして次の設定を行う




※SMTP-Auth用ユーザ名、パスワードとシステムのユーザ名、パスワードを別々にする場合のみ
「次のアカウントとパスワードでログオンする」をチェック
「アカウント名」にSMTP-Auth用ユーザ名を入力
「パスワード」にSMTP-Auth用パスワードを入力して「OK」




「IMAP」タブの「送信済みアイテムのパス」に「Sent」と入力
「IMAP」タブの「下書きのパス」に「Drafts」と入力して「OK」




「はい」




「OK」




■メールサーバー確認

・内部で同一ユーザ同士でメールの送受信
・内部で他ユーザ間でメールの送受信
・内部で外部(プロバイダのメールアドレス等)との送受信
・内部で携帯との送受信※
・外部(会社等)で同一ユーザ同士でメールの送受信
・外部(会社等)で他ユーザ間でメールの送受信
・外部(会社等)で外部(プロバイダのメールアドレス等)との送受信
・外部(会社等)で携帯との送受信※

※携帯はドメイン指定受信等でメールサーバーからのメールが拒否されないようにしておくこと


■メール不正中継拒否テスト

RBL.JPで「ホスト名」に自宅サーバーのホスト名(例:centossrv.com)を入力して「Check」ボタンを押下する。
19種類のテストが行われ、ページ最後尾にno relays accepted.と表示されればOK。