コンテンツにスキップ

12. メールサービス

12.1. SMTPサーバの構築

12.1.1. メールの仕組み

メールを処理するソフトウェアにはMTA(メッセージ転送エージェント)、MDA(ローカルメール転送エージェント)、MUA(メールユーザエージェント)がある。MUAはメーラ(メールソフトウェア)となる。

  • MUA(Mail User Agent):メールの確認や作成を行うユーザインタフェース
  • MTA(Mail Transfer Agent):メールの転送
  • MDA(Mail Delivery Agent):メールの配送(仕分け)

メール

メール転送のフローは以下の通り。

  1. MUAからメールサーバMTAはメールを受け取る
  2. メールサーバMTAはDNSサーバに問い合わせ配送先のメールサーバMTAを調べて転送する
  3. 配送先メールサーバMTAがメールを受け取るとMDAにより宛先ユーザのメールボックスにメールを収納する
  4. 受取先ユーザはPOPサーバやIMAPサーバ経由でメールボックスからメールを取り出す

MUAからメールをMTAに送信するとき、MTA間でのやり取りはSMTPが使用されるため、MTAはSMTPサーバと呼ばれる。 MUAがメールを受け取る際はPOPやIMAPが使用され、現在は主にPOP3やIMAP4が使用される。

SMTPサーバの代表的なものにはPostfixsendmaileximなどがある。 POP/IMAPサーバにはDovecotやCourier Mail Serverなどがある。

メールボックスの形式には2種類ある。

  • mbox形式 ... /var/mailディレクトリに1ユーザ1ファイルとして保存する形式(1つのファイルに全部保存)
  • Maildir形式 ... ユーザのホームディレクトリ以下に1メール1ファイルとして保存する形式

12.1.2. Postfixとは

Postfixはsendmailと互換性を持つ新規開発されたMTA。 高速動作と設定が簡単なのが特徴で、デフォルトで使用するMTAとして最も一般的となっている。 Postfixは単一のデーモンプではなく複数のプログラムが協調して動作する。

Postfixを構成するプログラムは以下の通り。

プログラム 役割
sendmail sendmail互換インターフェース
smtpd 外部配送の処理
pickup maildropキューの監視、内部配送の処理を行う
cleanup ヘッダ内の書き換えなどを来ないincomingキューに入れqmgrに通知する
qmgr キュー内のメール配送プログラムに渡す
nqmgr qmgrと同じ(配送アルゴリズムのみ異なる)
master 全体制御用デーモン
bounce バウンスメール(設定ミスなどで往復する)を処理する

12.1.3. Postfixの設定

Postfixの設定ファイルは/etc/postficディレクトリ以下のmain.cfmaster.cfで行う。 main.cfはMTAの基本設定ファイル、master.cfはPostfix構成する各種デーモンの設定ファイルとなる。

main.cfの設定

main.cfの書式は以下の通り。

設定項目 = パラメータ[, パラメータ ...]

#でコメントアウト$を設定項目に付けると変数名のように参照できる。 設定例は以下の通り。

# ホスト名
myhostname = www.sample.com

# ドメイン名
mydomain = example.com

# メールアドレスの@以降のドメイン名
myorigin = $mydomain

# SMTP接続を待ち受けるNIC
inet_interfaces = all

# IPv4/IPv6の動作をall/ipv4/ipv6で指定
ip_protocols = all

# ローカル配送を行うドメイン名(メール受け取りドメイン名)
mydistination = $myhostname, localhost. $mydomain, localhost, $mydomain,mail.$mydomain, www.$mydomain, ftp.$mydomain

# 中継許可するSMTPクライアントのアドレス
mynetworks = 172.20.0.0/16, 127.0.0.0/8

# メールスプールディレクトリ
mail_spool_directory = /var/spool/mail

# ローカル配送を行うプログラム
mailbox_command = /usr/bin/procmail

# SMTPで出力されるバナー情報(デフォルトではバージョン非表示)
smtpd_banner = $myhostname ESMTP $mail_name

postconfコマンド

Postfix全般設定値を表示するコマンド。 なお表示される値は設定ファイルに基づいて表示される。

postconf

-nオプションではデフォルト値から変更されている項目のみ表示される。

master.cfの設定

Postfixを構成するプロセスの動作を設定するファイル。

postfixコマンド

Postfixの制御を行うコマンド。

postfix <サブコマンド>
オプション 説明
start Postfixの開始
stop Postfixの停止
abort Postfixの強制停止
flush キュー内にあるメッセージの再送
reload Postfixの設定を再読み込みする
check 設定ファイルの構文チェックを行う

また起動スクリプトやsystemdによる起動停止も行える。

/etc/init.d/postfix stop
systemctl stop postfix.services

Postfixの正規化機能

Postfixにはcanonical(正規化)と呼ばれる、送信者、受信者のアドレスを書き換える機能がある。 この機能により、以下のようなことが可能となる。

  • 異なる送信者から受け取ったメールを、単一の送信者から送られたように見せる
  • ユーザ名(ログインID)と異なるメールアドレスを使用する

canonical機能は以下の手順で有効にする。

  1. main.cfにて、書き換えルールの参照先(検索テーブル)を指定
    • 書き換えルールには以下のパラメータが指定可能
    • canonical_maps:送受信時の書き換えで参照する検索テーブル
    • sender_canonical_maps:送信者アドレスの書き換え時に参照する検索テーブル
    • recipient_canonical_maps:受信者アドレスの書き換え時に参照する検索テーブル
  2. 検索テーブルの作成、更新

なお、指定する検索テーブルにはMySQLやPostgreSQLなどのデータベース、LDAP、正規表現などが使える。

12.1.4. メールのリレー

メールのリレーはMTA間でのメール中継のこと。 他ホスト宛てのメールを受け取った場合、MTAはそのメールリレーを許可するか判断する。 リレーを無制限に許可すると、スパム送信の踏み台として利用されかねないので設定をしっかり行う必要がある。

以下の原則に従うと良い。

  • リレーを許可したいLAN内のアウトバンドメールは許可
  • リレーを許可したいドメインのメールは許可
  • 外部のアウトバンドメールは拒否

なお一般的にはデフォルト設定でメールリレーは禁止されている。 Postfixの場合はmydistinationパラメータやmynetworksパラメータで制御を行う。

12.1.5. メールエイリアス/メール転送

/etc/aliases(または/etc/mail/aliases)によりメールアカウントと実際に受け取るユーザ名の対応設定ができる。 書式は以下の通り。

アカウント:   受取ユーザ1[, 受取ユーザ2...]

受取ユーザの別名ではユーザ以外に以下のように指定できる。

別名 説明
/path パスにあるファイルにメールメッセージを追加する
|command 指定したコマンドの標準入力へメールメッセージを送る
user@domain 指定したメールアドレスにメールを転送する
:include:/path パスに指定したファイルに別名として読み込む

newaliasesコマンド

/etc/aliasesのファイル内容を変更後に設定を反映させるコマンド。

newaliases

.forwardファイル

ユーザのホームディレクトリに.forwardファイルを作成し、そこに届けたい先のメールアドレスを記述すると、そのユーザに届いたメールアドレスを届けたい先のメールアドレスに転送できる。

12.1.6. SMTPサーバの運用と管理

メールキュー

メールキューは処理待ちメールが一時的に保持される場所のこと。 各MTAでは以下の場所に格納される。

  • Postfix
    • /var/spool/postfixディレクトリ以下のサブディレクトリ
    • mailqコマンドで内容表示可能
    • postfix flushコマンドで直ちに送信が可能
    • postsuper -dコマンドでメールキュー内のメールを削除可能
  • Sendmail
    • /var/spool/mqueueディレクトリ以下
    • postqueue -pコマンドで内容表示可能
    • postqueue -fコマンドで直ちに送信が可能

メールボックス

メールボックスはメールサーバが受け取ったメールが保存される場所。 各MTAでは以下の場所に格納される。

  • Postfix
    • /var/spool/postfixディレクトリ以下のユーザ名のテキストファイル
    • メールの保存にはmbox形式とmaildir形式が使用できる
    • maildir形式の利用設定にはhome_mailbox = Maildir/とmain.cfで記述する
  • Sendmail
    • /var/spool/mailディレクトリ以下のユーザ名のテキストファイル

12.2. メールのフィルタリング

メールのフィルタリングはスパムメールなどのメールをルールに従って振り分ける仕組み

12.2.1. Sieveの設定

Sieveはメールフィルタリングを行うための記述言語「コントロール」「テスト」「アクション」という3種類のコマンドで構成される。 Dovecotと連携し、サーバ側でメールフィルタリング処理を実行できる。

書式は以下の通り。

if 条件 {
    条件がマッチした場合の処理;
}

5GByteを超えるメールを拒否する設定例は以下の通り。

require ["reject"]

if size :over 5G {
    reject "Too Big Size";
}

sleveのコントロールは以下の通り。

コントロール 説明
if if-elsif-else
require 拡張機能を指定
stop 処理を停止

sieveの主なアクションは以下の通り。

アクション 説明
fileinfo メールを指定したメールボックスに配送する
keep メールをデフォルトのメールアドレスに配送する
discard メールを破棄する
reject メールを拒否する
redirect メールを指定したメールアドレスに転送する
stop 処理を停止する
テスト 説明
address アドレスを評価
header メールヘッダを評価
size メールサイズの評価
allof AND
anyof OR
not NOT
true
false

12.2.2. Procmailの設定

ProcmailはMDAの1つでMTAが受け取ったメールをここユーザに配送する。 procmaliをMDAに使うとメールフィルタリングや不要メールの自動破棄などが可能。

フィルタリング設定は各ユーザのホームディレクトリの.procmailrcファイルで設定を行う。 フィルタリングルールはレシピと呼ばれ3行で指定する。

:0 [フラグ] [:ロックファイル]
* 条件式
アクション

フラグはprocmailにメールを渡す方法を指定。条件式は正規表現でメール条件を記述する。

フラグ 説明
D 大文字小文字を区別する
H メールのヘッダ部分で検索する
B メールの本文部分で検索する
c メールのコピーを残す
h アクションにヘッダ部分を渡す
b アクションに本文部分を渡す
条件式 説明
! 条件否定
> 指定したバイト数より大きいときに処理
< 指定したバイト数より小さいときに処理
アクション 説明
/dev/null 破棄する
ファイル名 指定したファイル名のファイルに格納する
ディレクトリ名 ディレクトリ内にファイル名を付けて保存する
ディレクトリ名/. ディレクトリ内に連番を付けて格納する
|パス名 指定したパスのプログラムに渡す
!メールアドレス 指定したメールアドレスに転送する

12.3. POP/IMAP

POP/IMAPはメーラがメールボックスからメールを取りf出すのに使用する。 これらのサービスの利用にはDovecotCourier IMAPなどがある。

  • Dovecot
    • POP3/IMAPをサポートするMRA
    • Maildir及びmbox形式のメールボックスをサポート
  • Courier IMAP
    • 主にIMAPをサポートするMRA
    • Maildir形式のメールボックスのみをサポート

12.3.1. Dovecot

DovecotはPOP3/IMAP4に加えSSL/TLSに対応したMDA。 設定は/etc/dovecot.confで行う。

Dovecotの設定項目は以下の通り。

設定項目 説明
auth_mechanisms 利用する認証メカニズム
mail_location メールの配送場所と配送形式
ssl SSL/TLSの有効化のどうか
ssl_cert サーバ証明書のファイル
ssl_key サーバ鍵ファイル

メール関連のポートは以下の通り。

ポート 説明
110 POP3
143 IMAP
993 IMAP over SSL/TLS
995 POP3 over SSL/TLS
# dovecot.confより
listen = 192.168.1.1

protocols = imap pop3 lmtp

# psコマンドの出力に詳細表示を行う
verbose_proctitle = yes

# /conf.d/10-mail.confより
mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u

# /conf.d/10-auth.confより
auth_mechanisms = plain login cram-md5 apop digest-md5

# /conf.d/20-imap.confより
protocol imap {
    mail_max_userip_connections = 10
}

auth default {
    mechanisms = plain login cram-md5 apop digest-md5
}

doveconfコマンド

Dovecotの設定内容を出力できるコマンド。

doveconf
オプション 説明
-n デフォルト以外の設定を表示
-c 設定ファイルを指定

doveadmコマンド

Dovecotの管理用コマンド。

doveadm <サブコマンド>
サブコマンド 説明
config 設定内容を表示
reload 設定の再読み込み
stop dovecotプロセスの終了
log find ログファイルパスの確認
log test テストログメッセージの生成
mailbox メールボックスを管理
who サーバログイン中のユーザ情報表示
pw パスワードハッシュ値の生成