12. メールサービス
12.1. SMTPサーバの構築
12.1.1. メールの仕組み
メールを処理するソフトウェアにはMTA(メッセージ転送エージェント)、MDA(ローカルメール転送エージェント)、MUA(メールユーザエージェント)がある。MUAはメーラ(メールソフトウェア)となる。
- MUA(Mail User Agent):メールの確認や作成を行うユーザインタフェース
- MTA(Mail Transfer Agent):メールの転送
- MDA(Mail Delivery Agent):メールの配送(仕分け)
メール転送のフローは以下の通り。
- MUAからメールサーバMTAはメールを受け取る
- メールサーバMTAはDNSサーバに問い合わせ配送先のメールサーバMTAを調べて転送する
- 配送先メールサーバMTAがメールを受け取るとMDAにより宛先ユーザのメールボックスにメールを収納する
- 受取先ユーザはPOPサーバやIMAPサーバ経由でメールボックスからメールを取り出す
MUAからメールをMTAに送信するとき、MTA間でのやり取りはSMTPが使用されるため、MTAはSMTPサーバと呼ばれる。 MUAがメールを受け取る際はPOPやIMAPが使用され、現在は主にPOP3やIMAP4が使用される。
SMTPサーバの代表的なものにはPostfixやsendmail、eximなどがある。 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.cf
とmaster.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全般設定値を表示するコマンド。 なお表示される値は設定ファイルに基づいて表示される。
-n
オプションではデフォルト値から変更されている項目のみ表示される。
master.cfの設定
Postfixを構成するプロセスの動作を設定するファイル。
postfixコマンド
Postfixの制御を行うコマンド。
オプション | 説明 |
---|---|
start | Postfixの開始 |
stop | Postfixの停止 |
abort | Postfixの強制停止 |
flush | キュー内にあるメッセージの再送 |
reload | Postfixの設定を再読み込みする |
check | 設定ファイルの構文チェックを行う |
また起動スクリプトやsystemdによる起動停止も行える。
Postfixの正規化機能
Postfixにはcanonical(正規化)と呼ばれる、送信者、受信者のアドレスを書き換える機能がある。 この機能により、以下のようなことが可能となる。
- 異なる送信者から受け取ったメールを、単一の送信者から送られたように見せる
- ユーザ名(ログインID)と異なるメールアドレスを使用する
canonical機能は以下の手順で有効にする。
- main.cfにて、書き換えルールの参照先(検索テーブル)を指定
- 書き換えルールには以下のパラメータが指定可能
canonical_maps
:送受信時の書き換えで参照する検索テーブルsender_canonical_maps
:送信者アドレスの書き換え時に参照する検索テーブルrecipient_canonical_maps
:受信者アドレスの書き換え時に参照する検索テーブル
- 検索テーブルの作成、更新
なお、指定する検索テーブルにはMySQLやPostgreSQLなどのデータベース、LDAP、正規表現などが使える。
12.1.4. メールのリレー
メールのリレーはMTA間でのメール中継のこと。 他ホスト宛てのメールを受け取った場合、MTAはそのメールリレーを許可するか判断する。 リレーを無制限に許可すると、スパム送信の踏み台として利用されかねないので設定をしっかり行う必要がある。
以下の原則に従うと良い。
- リレーを許可したいLAN内のアウトバンドメールは許可
- リレーを許可したいドメインのメールは許可
- 外部のアウトバンドメールは拒否
なお一般的にはデフォルト設定でメールリレーは禁止されている。
Postfixの場合はmydistination
パラメータやmynetworks
パラメータで制御を行う。
12.1.5. メールエイリアス/メール転送
/etc/aliases
(または/etc/mail/aliases
)によりメールアカウントと実際に受け取るユーザ名の対応設定ができる。
書式は以下の通り。
受取ユーザの別名ではユーザ以外に以下のように指定できる。
別名 | 説明 |
---|---|
/path | パスにあるファイルにメールメッセージを追加する |
|command | 指定したコマンドの標準入力へメールメッセージを送る |
user@domain | 指定したメールアドレスにメールを転送する |
:include:/path | パスに指定したファイルに別名として読み込む |
newaliasesコマンド
/etc/aliases
のファイル内容を変更後に設定を反映させるコマンド。
.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と連携し、サーバ側でメールフィルタリング処理を実行できる。
書式は以下の通り。
5GByteを超えるメールを拒否する設定例は以下の通り。
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行で指定する。
フラグはprocmailにメールを渡す方法を指定。条件式は正規表現でメール条件を記述する。
フラグ | 説明 |
---|---|
D | 大文字小文字を区別する |
H | メールのヘッダ部分で検索する |
B | メールの本文部分で検索する |
c | メールのコピーを残す |
h | アクションにヘッダ部分を渡す |
b | アクションに本文部分を渡す |
条件式 | 説明 |
---|---|
! | 条件否定 |
> | 指定したバイト数より大きいときに処理 |
< | 指定したバイト数より小さいときに処理 |
アクション | 説明 |
---|---|
/dev/null | 破棄する |
ファイル名 | 指定したファイル名のファイルに格納する |
ディレクトリ名 | ディレクトリ内にファイル名を付けて保存する |
ディレクトリ名/. | ディレクトリ内に連番を付けて格納する |
|パス名 | 指定したパスのプログラムに渡す |
!メールアドレス | 指定したメールアドレスに転送する |
12.3. POP/IMAP
POP/IMAPはメーラがメールボックスからメールを取りf出すのに使用する。 これらのサービスの利用にはDovecotやCourier 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の設定内容を出力できるコマンド。
オプション | 説明 |
---|---|
-n | デフォルト以外の設定を表示 |
-c | 設定ファイルを指定 |
doveadmコマンド
Dovecotの管理用コマンド。
サブコマンド | 説明 |
---|---|
config | 設定内容を表示 |
reload | 設定の再読み込み |
stop | dovecotプロセスの終了 |
log find | ログファイルパスの確認 |
log test | テストログメッセージの生成 |
mailbox | メールボックスを管理 |
who | サーバログイン中のユーザ情報表示 |
pw | パスワードハッシュ値の生成 |