トップ  > サーバ設定:運用  > 各アプリケーションのインストール  > メールサーバ構築(sendmail+Dovecot)

メールサーバ構築(sendmail+Dovecot)  (最終更新日:2011/08/04)

メールサーバを構築する場合、送信メールサーバ(SMTPサーバ)と受信メールサーバ(POP/IMAPサーバ)の構築が必要となります。

ここでは、送信メールサーバにsendmail、受信メールサーバにdovecotを使用します。

なお、sendmailは迷惑メールの不正中継に利用されないようにする為、SMTP-Auth機能(メール送信時にユーザ名とパスワードで認証をする機能)を使用します。

また、受信用のDovecotはPOP/IMAPをユーザ自身で選択出来るようにします。

POP…サーバからメールをダウンロードして読む。ダウンロードしたタイミングで基本削除される為、異なった環境で同一のメールアドレスを使用すると不利になる。オフラインでも読める。

IMAP…サーバ上のメールを読む。異なった環境でも同一アドレスの同じ内容が見れる。サーバがダウンすると読めなくなる。

Sendmail設定

1.sendmail-cfインストール

sendmail.mcからsendmail設定ファイル(sendmail.cf)を作成するのに必要なsendmail-cfをインストールします。

sendmail設定ファイル(sendmail.cf)は難解な為、sendmail.mcを編集してsendmail.cfに変換するのが一般的です。

[root@sv ~]# yum install sendmail-cf ← sendmail-cfインストール
2.sendmail設定
[root@sv ~]# 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 ← 変更(外部からの受信を許可)

EXPOSED_USER(`root')dnl
↓
dnl EXPOSED_USER(`root')dnl ← 指定されたユーザ(この場合はroot)も書き替える(マスカレードする)

dnl MASQUERADE_AS(`mydomain.com')dnl
↓
MASQUERADE_AS(`rx-93dff.net')dnl ← 送信元アドレスの@以降をrx-93dff.netにする

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

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

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

以下を最終行へ追加(メールサーバー名&バージョン情報の隠蔽)
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@sv ~]# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ← sendmail.mcよりsendmail.cf作成

[root@sv ~]# echo `hostname -d` >> /etc/mail/local-host-names ← @rx-93dff.netでメールを受信できるようにする

[root@sv ~]# cat /etc/mail/local-host-names ← 確認
# local-host-names - include all aliases for your machine here.
rx-93dff.net
3.SMTP-Auth設定

SMTP-Auth用ユーザ名、パスワードにシステムのユーザ名、パスワードを使用します。

[root@sv ~]# /etc/rc.d/init.d/saslauthd start ← saslauthd起動
saslauthd を起動中:                                        [  OK  ]
[root@sv ~]# chkconfig saslauthd on ← saslauthd自動起動設定
[root@sv ~]# chkconfig --list saslauthd ← saslauthd自動起動設定確認
saslauthd       0:off   1:off   2:on    3:on    4:on    5:on    6:off
4.Maildir形式メールボックス作成

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


(1)既存ユーザ

既存ユーザのホームディレクトリにMaildir形式のメールボックスを作成して、蓄積済みのメールデータを作成したメールボックスへ移行します。→メールデータ移行を参照


(2)新規ユーザ

アカウントの作成時、自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにします。

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

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

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

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

sendmailはMaildir形式に対応していない為、Procmailで配送するようにします。

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

Sendmail再起動

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

メールデータ移行から続けてやっている方は
[root@sv ~]# /etc/rc.d/init.d/sendmail start ← sendmail起動
sendmail を起動中:                                         [  OK  ]
sm-client を起動中:                                        [  OK  ]
2.ポート25番の開放

ルータ及びファイアウォールでポート25番を開放します。(ルータの設定はルータのマニュアルを参照。)

ファイアウォールをサイト通りに設定している場合は以下の追加作業。

[root@sv ~]# vi iptables.sh
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からのTCP25番ポート(SMTP)へのアクセスを許可
# ※SMTPサーバを公開する場合のみ
#iptables -A INPUT -p tcp --dport 25 -j ACCEPT
↓
iptables -A INPUT -p tcp --dport 25 -j ACCEPT ← 「#」を削除しコメント解除

[root@sv ~]# ./iptables.sh ← ファイアウォール設定反映

ポートチェック【外部からポート開放確認】で「host名」にサーバ名(rx-93dff.net)、「port番号」に25を入力して「ポートチェック」をクリックし「アクセスできました」になること確認。

OP25B対策

OP25B(Outbound Port 25 Blocking)対策参照

Dovecotインストール

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

Dovecot設定

[root@sv ~]# vi /etc/dovecot/conf.d/10-mail.conf ← Dovecot設定ファイル10-mail.conf編集
##
## Mailbox locations and namespaces
##

# Location for users' mailboxes. The default is empty, which means that Dovecot
# tries to find the mailboxes automatically. This won't work if the user
# doesn't yet have any mail, so you should explicitly tell Dovecot the full
# location.
#
# If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u)
# isn't enough. You'll also need to tell Dovecot where the other mailboxes are
# kept. This is called the "root mail directory", and it must be the first
# path given in the mail_location setting.
#
# There are a few special variables you can use, eg.:
#
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if there's no domain
#   %h - home directory
#
# See doc/wiki/Variables.txt for full list. Some examples:
#
#   mail_location = maildir:~/Maildir
#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# <doc/wiki/MailLocation.txt>
#
#mail_location =
mail_location = 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, mail_chroot or auth chroot
# settings. If this setting is empty, "/./" in home dirs are ignored.
# 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. <doc/wiki/Chrooting.txt>
#valid_chroot_dirs =
valid_chroot_dirs = /home ← 追加※OpenSSHでChrootを設定している場合のみ

Dovecot起動

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

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

[root@sv ~]# chkconfig --list dovecot ← Dovecot自動起動設定確認
dovecot         0:off   1:off   2:on    3:on    4:on    5:on    6:off
2.ポート110(POP3),143(IMAP)の開放

ルータ及びファイアウォールでポート110,143番を開放します。(ルータの設定はルータのマニュアルを参照。)

ファイアウォールをサイト通りに設定している場合は以下の追加作業。

[root@sv ~]# vi iptables.sh
#----------------------------------------------------------#
# 各種サービスを公開する場合の設定(ここから)               #
#----------------------------------------------------------#

# 外部からのTCP110番ポート(POP3)へのアクセスを日本からのみ許可
# ※POP3サーバを公開する場合のみ
#iptables -A INPUT -p tcp --dport 110 -j ACCEPT_COUNTRY
↓
iptables -A INPUT -p tcp --dport 110 -j ACCEPT_COUNTRY ← 「#」を削除しコメント解除

# 外部からのTCP143番ポート(IMAP)へのアクセスを日本からのみ許可
# ※IMAPサーバを公開する場合のみ
#iptables -A INPUT -p tcp --dport 143 -j ACCEPT_COUNTRY
↓
iptables -A INPUT -p tcp --dport 143 -j ACCEPT_COUNTRY ← 「#」を削除しコメント解除

[root@sv ~]# ./iptables.sh ← ファイアウォール設定反映

ポートチェック【外部からポート開放確認】で「host名」にサーバ名(rx-93dff.net)、「port番号」に110,143を入力して「ポートチェック」をクリックし「アクセスできました」になること確認。

メールユーザ追加

1.メールユーザ追加(SSHによるリモート接続はできないようにする場合)

※例としてユーザ名をuser_mとする。

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

[root@sv ~]# passwd user_m ← パスワード設定
ユーザー user_m のパスワードを変更。
新しいパスワード: ← user_mのパスワード入力(非表示)
新しいパスワードを再入力してください: ← user_mのパスワード入力(非表示)
passwd: 全ての認証トークンが正しく更新できました。
2.メールユーザ追加(SSHによるリモート接続もできるようにする場合)

※例としてユーザ名をuser_mとする。

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

[root@sv ~]# passwd user_m ← パスワード設定
ユーザー user_m のパスワードを変更。
新しいパスワード: ← user_mのパスワード入力(非表示)
新しいパスワードを再入力してください: ← user_mのパスワード入力(非表示)
passwd: 全ての認証トークンが正しく更新できました。

メールサーバ動作確認

クライアントでメールの設定後以下の内容をテストします。

  1. 内部で同一ユーザ同士でメールの送受信
  2. 内部で他ユーザ間でメールの送受信
  3. 内部で外部(プロバイダのメールアドレス等)との送受信
  4. 内部で携帯との送受信※
  5. 外部で同一ユーザ同士でメールの送受信
  6. 外部で他ユーザ間でメールの送受信
  7. 外部で外部(プロバイダのメールアドレス等)との送受信
  8. 外部で携帯との送受信※

※携帯はドメイン指定受信でメールが拒否されないようにしておきます。

メール中継テスト

メールサーバが第三者中継の可能性をあるかチェックします。

RBL.JPで「ホスト名」を入力(例:rx-93dff.net)して「Check」ボタンを押下する。メール中継テストが実施され、「no relays accepted.」と表示されればOK。