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
お疲れ様です。
まだまだ、機能などは他にも搭載しなければならないものもありますが、
送受信のベースが出来上がりました。