電子メールサービス
メールシステム
| 略称 | 名称 | 説明 | 
|---|---|---|
| MTA | Mail Transfer Agent | メールを受信し、配信先と配信プログラムを決定してメールを送信する | 
| MDA | Mail Deivery Agent | MTA からメールを受け取り、ローカルユーザーのメールボックスにメールを配信する | 
| MUA | Mail User Agent | ユーザーが使用するメールプログラム | 
MTA は DNS の MX レコードにメールサーバーのホスト名を記述する。
Postfix 概要
Postfix は IBM の Wiestse Venema 氏が開発し、1998 年末にリリースした製品のオープンソース版である。 sendmail との互換性を保ちつつ、複数のデーモンが連携して動作するアーキテクチャを採用する。
- master.cf: 各デーモンの動作を記述する
- main.cf: メールシステムのパラメーターを記述する
- /etc/postfix: 設定ファイルをおくデフォルトのディレクトリ
- /etc/aliases
- /~/forward
- var/spool/mail
| デーモン | 説明 | 
|---|---|
| master | postfix のマスタープロセス | 
| postdrop | MUA からメールを受け取り、maildrop キューに投函する | 
| pickup | maildrop キューからメールを取り上げて、cleanup に渡す | 
| qmgr | incoming キューのメール配送先と配送方法を決定する | 
| smtpd | SMTP による外部からのメールを受信する | 
| smtp | SMTP により外部へメールを送信する | 
メール送信の流れ
- postdrop が/var/spool/postfix/maildropディレクトリにメールを配置する
- pickup が maildrop ディレクトリからメールを取得し、 cleanup に渡す
- cleanup が着信メールのアドレスを処理し incoming キューに入れる
- qmgr が incoming キューのメールの配送先と配送方法を決定する
- ローカル配信の場合は local が /var/spool/mailディレクトリにメールを配信する
- 外部への送信の場合は smtp が相手の smtp サーバーに接続してメールを配信している
メール受信の流れ
- smtpd が相手の smtp サーバーからメールを受信して cleanup に渡す
- cleanup が着信メールのアドレスを処理し、incoming キューに入れる
- qmgr が incoming キューのメール配送先と配送方法を決定する
- local が /var/spool/mailディレクトリにメールを配信する
設定ファイル
- /etc/postfix/main.cf: Postfix のパラメーターを設定するグローバルコンフィグレーションファイル
グローバルコンフィルレーションファイル
| パラメーター | 説明 | 
|---|---|
| queue_direcctory | Postfix のメールキューディレクトリを指定 (処理中のメールが置かれる) | 
| alias_maps | ローカル配信エージェントが参照する別名データベースを指定 (通樹は /etc/aliases.db) | 
| alias_database | newaliases コマンドが更新するデータベースを指定 | 
| command_directory | Postfgix コマンドを配置するディレクトリを指定 | 
| daemon_directory | Postfix デーモンを置くディレクトリを指定 | 
| data_directory | Postfix のデータを置くディレクトリを指定 | 
| mail_spool_directory | ローカル配信されたメールを置くディレクトリを指定 | 
| mail_owner | キューの所有者と master 以外のデーモンの所有者を指定 | 
| inet_interfaces | メールを受信するインタフェースのアドレスを指定 (デフォルト: all) | 
| inet_protocols | IPv4、IPv6 のサポートを指定 (all の場合は両方サポート) | 
| myhostname | インターネット上のホスト名を指定 | 
| mydomain | インターンメット上のドメイン名を指定 | 
| mydestination | 最終的な宛先が自ホスト宛として認識するドメイン名のリストを指定 | 
| sender_canonical_maps | 送信者アドレスのアドレス書き換えデータベースを指定 | 
| recepient_canonical_maps | 受信者アドレスのアドレス書き換えデータベースを指定 | 
| relayhost | 自組織以外の宛先メールを明示的に転送するホスト (指定しない場合は MX レコードから参照) | 
送信者アドレスの書き換え
- main.cf の canonical_classes で書き換える対象を指定する
- canonical_classes = envelope_sender, hheader_sender
 
- main.cf の sender_canonical_maps でアドレス変換のデータベースを指定する
- seder_canonical_maps = hash:/etc/postfix/sender_canonical
 
- 指定したファイルを編集する
- @example.com @test.com
 
- postmap コマンドでデータベースを作成する
- # postmap /etc/postfix/sender_canonical
 
- postfix コマンドで設定をリロードする
- # postfix reload
 
aliases
aliases ファイルで別名に対しての転送先アドレスを記述することで転送設定できる。 :include: の後に絶対パスで指定したファイルに記述された別名をインクルードすることもできる。
別名:転送先アドレス, 転送先アドレス, 転送先アドレス, ...| 転送先の指定 | 説明 | 
|---|---|
| ローカルユーザー名 | ローカルユーザーの名前を指定 | 
| 別名 | 他の別名に転送する | 
| 電子メールアドレス | 電子メールアドレスを指定する | 
| ローカルファイル名 | 絶対パスで指定したファイルにメールを追加格納する | 
| コマンド | 「|」の後ろにメールを処理するコマンドを指定する | 
| インクルード | :include:の後に絶対パスで指定したファイルに記述された別名をインクルードする | 
エイリアスデータベースは newaliases コマンドか postalias コマンドで更新する。
メール格納フォーマット
Maildir では配信されたメールは Maildir ディレクトリ配下に一意のファイル名で格納される。
- tmp: メールは最初このディレクトリに置かれる
- cur: 既読のメールが置かれる
- new: 新着メールが置かれる
mbox ではすべてのメールを単一ファイルに平文で格納する。 複数メールを同時に受信した際には排他制御が必要になる。
| メールソフト | Maildir | mbox | 
|---|---|---|
| procmail | ◯ | ◯ | 
| Postfix | ◯ | ◯ | 
セキュリティ
第三者に悪用されないよう、公開メールサーバーは次のようにセキュリティを担保する。
- 内部ネットワークからのメールは外部ドメインへの中継を許可する
- 宛先がローカルドメインの場合のみ受信を許可する
RBL (Realtime Blackhole List) はスパムメールやウイルスメールを発信している可能性のあるホストの IP アドレスが DNS レコードとして登録されたリストである。
メールキュー
mailq コマンドもしくは postqueue コマンドに -p オプションをつけることで配信用メールキューを sendmail 形式で表示できる。
何らかのトラブルにより送信できなかったメールは /var/spool/postfix 配下のメールキューに置かれ、一定間隔で再送を試みる。 一定期間過ぎても送信できないメールは削除される。
動作確認
telnet でポート番号 25 を指定し次の手順で SMTP コマンドを送る。
- EHLO (Extend HELLO: 開始) もしくは HELO
- MAIL FROM (SENDER: 送信者指定)
- RCPT TO (RECIPIENT: 受信者指定)
- DATA (BODY: 本文)
- QUIT (終了)
IMAP/POP の設定
受信サーバー
dovecot はフィンランドの Timo Sirainen 氏が開発し、 2002 年にリリースされた IMAP/POP3 サーバーである。 メールボックスフォーマットは mbox と Maildir をサポートする。
- imap: 993
- pop3s: 995
- imap: 143
- pop3: 110
SSL/TLS 接続もサポートしている。 標準プロトコルで接続後も暗号化通信を行う STARTTLS、ユーザー認証も CRAM-MD5 を含む多様な認証をサポートする。
- 設定ファイル
- v1: /etc/dovecot.conf
- v2: /etc/dovecot/dovecot.confと dovecot.conf 内のインクルード文によって記述される設定ファイル
 
- v1: 
| パラメーター | 説明 | 
|---|---|
| mechanisms | 認証方式の指定 (v1 の場合) | 
| auth_mechanisums | 認証方式の指定 (v2 の場合) | 
| verbose_proctitle | 接続しているユーザー名と IP アドレスを ps axコマンドに出力に表示 | 
| mail_location | メールの格納形式や保存先ディレクトリの指定 | 
認証方式には次の硫黄なものを指定可能。
- plain
- login
- digest-md5
- crram-md5
doveadm コマンド
Dovecot の管理ユーティリティである。
| サブコマンド | 説明 | 
|---|---|
| reload | 設定ファイルの再読み込みを行う | 
| stop | dovecot デーモンを停止する | 
| mailbnox | ユーザーのメールボックスの管理を行う | 
| who | Dovecot に接続しているユーザーの一覧を表示する | 
Sieve スクリプト
Sieve 概要
Sieve は電子メールのフィルタリングのためのスクリプト言語である。 2008 年 1 月に RFC5228 として標準化された。 特定の OS やメールシステムのアークテクチャには依存しない。
コントロールコマンド、アクションコマンド、テストコマンドから構成される。
| コントロールコマンド | 説明 | 
|---|---|
| if, elseif, else | 条件判定を行う | 
| require | 拡張機能を指定する | 
| stop | 処理を停止する | 
| アクションコマンド | 説明 | 
|---|---|
| keep | ユーザーのメールボックスに格納する | 
| discard | メールを破棄する | 
| redirect | メールの内容は変更せず、別のメールアドレスへ転送する | 
| fileinto | 指定したメールボックスに格納する | 
| テストコマンド | 説明 | 
|---|---|
| address | メールアドレスをテストする | 
| allof | 論理積をテストする | 
| anyof | 論理和をテストする | 
| size | メールのサイズをテストする | 
テストコマンドで使用できる文字列の比較には次のようなものを利用できる。
| 文字列比較 | 説明 | 
|---|---|
| :contains | 文字列の一部が一致した場合に真 | 
| :is | 文字列が完全一致した場合に真 | 
| :matches | ワイルドカード「*」または「?」を含めて完全一致の場合に真 | 
Dovecot Pigeonhole プロジェクトがローカルメールボックスへ配送する Local Delivery Agent を提供している。 Dovecot LDA は Sieve スクリプトを解釈するインタプリタである。 Postfix で使用する場合は main.cf 中のパラメーター 1mailbox_command で Dovecot LDA を指定することで、メールボックス配信時に実行する。 Sieve 以外の LDA としては procmail がある。
 
  
  
  
  
コメント