はじめに
メールの送受信は単一のプロトコルではなく、様々なプロトコルやソフトウェアが組み合わさり、連動して稼働することによって実現している。
また Postfix などのソフト内部においても master(他のデーモンを起動)、postdrop(受信、投函)、pickup(メール取得)... 等の様々なデーモンが連携している。
-
SMTP
- メール 送信 のプロトコル
- MUA → MTA への送信
- MTA → MTA への中継
-
POP
- メール 受信 のプロトコル
- メールの管理を クライアントが行う
-
IMAP
- メール 受信 のプロトコル
- メールの管理を サーバが行う
-
DNS
- ドメイン名と IP アドレスの変換
MUA
Mail User Agent
メールの作成、送信、受信を行うための、ユーザが直接使うクライアントアプリケーション。
具体的なソフトは Thunderbird、Outlook、mutt、alpine など、
MTA
Message Transfer Agent
メールを送受信するサーバ間で、メールの転送を担当するソフトウェア。
具体的なソフトとしては Postfix、Sendmail、Exim、qmail など。
MDA
Mail Delivery Agent
MTA から受け取ったメールを、ユーザのメールボックスに配達するソフトウェア。
具体的なソフトは Procmail、Dovecot、mail.local など。
Postfix(MTA)
Sendmail の後継として開発された MTA。
メールの送受信、転送を担当する。
/etc/postfix/main.cf
Postfix の基本設定ファイル。
設定項目 = 値1
設定項目 = 値1, 値2, ...
| 項目 | 説明 |
|---|---|
myhostname |
サーバのホスト名(FQDN)。 送信元ホスト名に使用される。 【例】 myhostname = mail.example.com
|
mydomain |
サーバ自身が所属する ドメイン名。 【例】 mydomain = example.com
|
myorigin |
ローカルで送信するメールの送信元ドメイン。 メールアドレスの @ 以降に使用される。【例】 myorigin = $myhostname
|
mydestination |
ローカル配送対象のドメイン。 サーバが扱うことのできるドメインであり、受信可能な宛先の範囲でもある。 【例】 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
|
relayhost |
外部にメールを送るときの中継(リレー)先。 ISP や社内メールサーバを経由する場合などに指定する。 未設定ならリレーを行わず、直接配送になる。 【例】 relayhost = [smtp.isp.example]:587
|
mynetworks |
中継(リレー)を許可するネットワーク範囲。 踏み台として利用されることを防止するために設定される。 【例】 mynetworks = 127.0.0.0/8, [::1]/128
|
inet_interfaces |
Postfix が待ち受ける ネットワークインターフェース。 - all:すべて- loopback-only:ローカルのみ、外部から受け付けない【例】 inet_interfaces = loopback-only
|
inet_protocols |
使用する IP プロトコル。 - all(デフォルト)- ipv4- ipv6【例】 inet_protocols = ipv6
|
/etc/postfix/master.cf
Postfix のサービスの制御ファイルで MTA の各サービス(smtp、pickup、qmgr)がどのように起動・待ち受け・実行されるかを設定するファイル。
/etc/aliases
あるメールアドレスの届いたメールを別のメールアドレスに 転送 する仕組み。
転送先の設定は /etc/aliases によって行い、転送先は複数指定することができる。
アカウント: 転送先1, 転送先2, ...
アカウント には、メールアドレスの @ 前の部分を指定する。
postmaster: admin, bob
/etc/aliases はテキストファイルであり、実際には Postfix は、/etc/aliases.db を参照して転送を行う。
/etc/aliases.db は $ newaliases コマンドによって /etc/aliases を基に更新することができる。
また反対に、/etc/aliases を編集した後は $ newaliases を実行しない限り、編集内容が反映されない。
ドメインを超えて外部アドレスに対して転送することもできる。
support: helpdesk@example.com
ファイルパスを指定することで、メールの内容をファイルに出力することもできる。
アカウント: ファイルパス
|(パイプ)を指定してプログラムの標準入力として渡すこともできる。
アカウント: "| プログラムのファイルパス"
~/.forward
ユーザごとに設定できるメールの転送先設定ファイル。
転送先1, 転送先2, ...
$ postconf
/etc/postfix/main.cf で設定された値をすべて表示する。
$ postconf
$ postconf -n
$ postconf 設定項目
$ postconf mydomain
$ postfix
Postfix の管理コマンド。
$ postfix サブコマンド
$ postfix start
$ postfix stop
起動や停止は $ systemctl でも行うことができる。
$ postfix status
$ postfix abort
$ postfix reload
$ postfix check
$ postfix flush
$ postqueue -f と同じ動作。
$ newaliases
/etc/aliases ファイルの編集を反映させる。
$ newaliases
$ postqueue
$ postqueue -p
$ postqueue -f
$ postqueue -s サイト
$ mailq
$ postqueue -p のエイリアス。
$ mailq
$ postsuper
Postfix のキューメンテナンス専用コマンド。
$ postqueue コマンドは一般ユーザでも実行可能なのに対して、$ postsuper は root 権限が必要。
$ postsuper -r キューID
$ postsuper -d キューID
$ postsuper -d ALL
Procmail(MDA)
古くから MDA として利用されるソフトウェア。
Postfix や Sendmail などの MTA から渡されたメールをユーザのメールボックスへ配達する。
今は Sieve + Dovecot に置き換わることが多い。
~/.procmailrc
ユーザごとに配置される Procmail の設定ファイル。
メールを条件に応じて振り分け、転送、廃棄するなどの処理を行うために利用される。
レシピ と呼ばれるルールを並べて記述する形式。
:0 フラグ :ロックファイル
* 条件1
* 条件2
アクション
Sieve
受信したメールをユーザごとに振り分けたり、処理するメールフィルタリングのスクリプト言語。
Dovecot などの MDA と連携して使われる。
if header :contains "Subject" "SPAM" {
fileinto "Junk";
}
if address :domain "From" "example.com" {
fileinto "Example";
}
redirect "other@example.org";
Dovecot(MDA兼IMAP/POPサーバ)
ユーザが MUA からサーバ上のメールを読むための「窓口」として利用される。
MDA 機能も持つので、MTA(Postfixなど)から直接メールを受け取りユーザのメールボックスに保存できる。
また Sieve によるフィルタリングもサポートしている。
/etc/dovecot.conf
Dovecot の設定ファイル。
$ doveconf
$ doveconf
$ doveconf 設定項目
$ doveadm
$ doveadm reload
$ doveadm auth メールアドレス
$ doveadm mailbox list



