*

メールシステムについて調べたことをまとめ

公開日: : mail

概要

 メールシステムについて調べたことをまとめ

  1. メールシステムの概要
  2. メールの転送:/etc/aliases の設定
  3. sendmail
  4. メールキュー
  5. procmail
  6. Postfix
  7. dovecot
  8. Courier IMAP
  9. 補足

メールシステムの概要

 電子メールシステムは、MTA、MDA、MUAから構成される

キーワード
  • MTA (Mail Transfer Agent)
  • MDA (Mail Deliverry Agent)
  • MUA (Mail User Agent)
MTA (Mail Transfer Agent)

 MTAはメールを受信し、配信先と配信プログラムを決定してメールを送信する。郵便局システムの郵便局にあたる、主要なMTAとして Sendmail や Postfix がある。MTAはあて先メールドメインのMTAのFQDN(ホスト名)をDNSのMX(Mail Exchanger)レコードから取得する。

MDA (Mail Delivery Agent)

 MDAはMTAからメールを受け取り、ローカルユーザーのメールボックスにメールを配信する。Sendmail では構成時にMDAを指定できる。Linux のSendmailではprocmail が広く使われている。PostfixではlocalデーモンがMDAの役割を果たす。

MUA (Mail User Agent)

 MUAはユーザーが使用するプログラム。MTAへのメール送信、メールボックスからのメールの送信を行う。LinuxではmailxコマンドやGUIベースのThunderbird や Evolutionなどがある。
 

メールの転送:/etc/aliases の設定

/etc/aliases の設定
 別名 : 転送先アドレス1, 転送先アドレス2, ...

 転送先アドレスの指定は以下のようなものがある。
ローカルユーザ名:
 ローカルユーザ名を指定する。(例)root
別名:
 ほかの別名に転送する(例)postmaster
電子メールアドレス:
 電子メールアドレスの指定(例)yukio@wnqs.biz
ローカルファイル名:
 絶対パスで指定したファイルにメールを追加格納する(例)/home/yukio/recievemail
コマンド:
 「|(パイプ)」の後にメールを処理するコマンドを指定する(例)| /usr/local/wrapper
インクルードファイル:
 「:include:」の後に絶対パスで指定したファイルに記述された別名がインクルードされる(例)root

 newaliases
#もしくは
 sendmail -bi

sendmail

sendmail に/etc/aliases を設定する
O AliasFile=/etc/aliases
メールのリレー

 /etc/mail/access データベースファイルでアクセスの許可・拒否やリレーの許可を設定できる。
 ソースファイルとなるテキストファイルを作成し、makemapコマンドでデータベースを作成する。

 cd /etc/mail
 vi access
 	localhost.localdomain RELAY
 	localhost			  RELAY
 	127.0.0.1			  RELAY
 	192.168.20			  RELAY
 	spam.com			  REJECT
 <font color="Deeppink">makemap</font> hash access < access

 プレフィックス一覧
Connect:
 接続してきたホストのIPアドレスまたはホスト
From:
 エンヴェロープの発信者アドレス
To:
 エンヴェロープの受信者アドレス
 指定できるキー
ホスト名:
 examserver.wnqs.biz
ドメイン名:
 wnqs.biz
ユーザ名:
 yukio@
ユーザのアドレス:
 yukio@wnqs.biz
ホストのIPアドレス:
 192.168.20.254
ネットワークアドレス:
 192.168
 指定できる値
RELAY:
 リレーを許可する
REJECT:
 受信を拒否する
OK:
 受信を許可する
応答コード
応答メッセージ:

 RFC2821の3桁コードろ尾応答メッセージを指定する。500番台はエラーとして処理される。
 応答コードの例
  220 : Srevice ready
  550 : Requested action not taken: mailbox unavaliable
  551 : User not local
  554 : Transaction failed (or No SMTP service here)
  (例)spam.com 551 No such user here

SPAMメールを拒否するRBL

 RBL(Realtime Blackhole List)あるいはDNSBL(DNS BlackList)はスパムメールやウィルスメールを発信している可能性のあるホストのIPアドレスをDNSレコードとして登録されたリスト。
 リストを管理するDNSサーバに送信元のIPアドレスを地あわせて登録されている場合はメールを拒否することができる。RBL・DNSBLを管理しているサイトがあり、日本ではRBL.jpというプロジェクトがある。
 sendmailでこのリストを利用する場合はsendmail.cfを生成するための機能定義ファイルである.cfファイル(例:sendmail.mc)に次のように記述する。

FEATURE(dnsbl,'all.rbl.jp')dnl

 この.mcファイルから生成されたsendmail.cfでは、sendmailはたとえばIPアドレス8.8.8.8が登録されているかどうかを調べる場合は「8.8.8.8.all.rbl.jp」を問い合わせする。

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

メールキュー

 転送先メールサーバの不具合やネットワークの不具合などでメールを転送できなかった場合、snedmailは /var/spool/mqueue ディレクトリにそのメールを置き、一定期間で再送を試みる。

 mailq
#もしくは
 sendmail -bp
#もしくは(実際にファイルがある場所)
 ls /var/spool/mqueue

 

 

procmail

 procmailはsendmailやEximで標準のMDAとして使用されている。単にユーザーのメールボックスに配信するだけでなく設定によって受信メールの振り分けやフィルタリングができる。PostfixなどのprocmailをMDAとしていないメールシステムでも、~/.forwardを利用できるシステムであれば、ユーザはprocmailを利用できる。
 メールの格納形式はUNIX系OSで標準的なmboxと、qmailで採用されたMaildirをサポートしている。

mbox形式

 mbox形式ではユーザ宛に配信されたメールはメールすプールディレクトリのしたのユーザ名の単一ファイルに格納される。このため、ユーザが複数のメールを同時に受信した場合には格納するファイルの排他制御が必要になる。

Maildir形式

 Maildirに設定するには設定ファイル/etc/procmailrcまたは~/.procmailrc

 DEFAULT= $HOME/Maildir/

と記述する。この場合、メールごとに一意の名前で格納されるため排他制御は不要。

procmailが起動するよう設定する

 メールのMDAにprocmailが設定されていない場合でも、ユーザは~/.forwardに次のように記述することでprocmailを起動して受信メールを処理できる。

#MTAがsendmailの場合
"|exec /usr/bin/procmail"
#MTAがPostfixの場合
|/usr/bin/procmail
procmailの設定ファイル

 設定ファイル/etc/procmailrcあるいは~/.procmailにレシピと呼ばれる処理内容を記述してメール振り分けを行う。

:0 [フラッグ] [:ロックファイル]
[*条件文]
アクション
 []は省略可能、<>内は必須。

 1つのレシピは:0から始まり、次の:0の前で終わる。
 フラッグは条件文とアクションへのメールメッセージの渡し方を指定する。2つ目の:をつけた場合はこのレシピのロックファイルを作成する。デフォルトのファイル名は「メールを格納するファイル名.lock」となる。同時に複数のメールを受信し、procmailプロセスが複数生成された場合のメール格納ファイルに対する排他制御に有効。

フラッグ
フラッグ 説明
H メッセージのヘッダ(Header)を条件文に渡す。フラッグを指定しない場合のデフォルト
B メッセージ本文(Body)を条件文に渡す。デフォルトは渡さない
D 大文字小文字を識別(Distinguish)する。デフォルトは識別しない
h メッセージのヘッダ(header)をアクションに渡す。
b メッセージの本文(body)をアクションに渡す。フラグを指定しなかった場合のデフォルト
c カーボンコピー(cc)を生成する。アクションで転送した場合にメールを残すために使用する。デフォルトはCcは生成しない
f パイプをフィルタとして動作する。次に処理プログラムに渡す場合にこのフラッグを立てる
w プログラムの終了を待って返り値をチェックし、失敗のときはプログラムによる処理は適用しない

 条件は*で始まる。egrepの正規表現が使用できる。条件文は複数指定でき、その場合は論理席(AND)となる。条件文は省略でき、その場合は結果は常に真(TRUE)となる。

条件
条件 説明
| 否定
< 10進数で指定したバイト数より小さいとき、真を返す
> 10進数で指定したバイト数より大きいとき、真を返す

 アクションは条件文の結果が真の場合の処理を指定する。アクションは1行だけ指定する。!、|、{のいづれかの文字で始まるか、それ以外はメールを格納するファイル名とみなされる。

option
option 説明
! 指定したメールアドレスに転送する。アドレスは複数指定可
| 指定したプログラムに渡して処理する
ファイル名 指定したメールボックスファイルに追加する
メールボックス名/. 指定したディレクトリの下にMHフォルダ形式で配信する
メールボックス名 指定ディレクトリの下にMaildirフォルダ形式で配信する
/dev/null メールを破棄する
0:
*^Subject:.*info
! info@wnqs.biz
0:
*^Subject:.*spam
/dev/null
0: c
*^Subject:.*linux
0: c
*!^To: fred
| backup

Postfix

 処理速度、セキュリティ、設定の容易さの点で向上が図られているsendmailに変わるMTA。
 /etc/aliases、~/.forward、/var/spool/mail(/var/mail)をサポートし、MDAであるlocalデーモンとは別にprocmailをメール処理のフィルタとして利用できる。

キーワード
  • master.cf
  • main.cf
Postfixのデーモン

 local…MDAの機能
 master…master.cf を参照して各デーモンプロセスを起動する

Postfixの設定ファイル

 各デーモンの動作を記述する/etc/postfix/master.cfと、メールシステムのパラメータを記述する/etc/postfix/main.cf(各デーモンが参照するファイル)がある。

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628      inet  n       -       n       -       -       qmqpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       n       -       -       smtp
        -o smtp_fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in <font color="Deeppink">main.cf</font>: maildrop_destination_recipient_limit=1
#
#maildrop  unix  -       n       n       -       -       pipe
#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# The Cyrus deliver program has changed incompatibly, multiple times.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in <font color="Deeppink">main.cf</font>: cyrus_destination_recipient_limit=1
#
#cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
#uucp      unix  -       n       n       -       -       pipe
#  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# ====================================================================
#
# Other external delivery methods.
#
#ifmail    unix  -       n       n       -       -       pipe
#  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
#
#bsmtp     unix  -       n       n       -       -       pipe
#  flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
#
#scalemail-backend unix -       n       n       -       2       pipe
#  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store
#  ${nexthop} ${user} ${extension}
#
#mailman   unix  -       n       n       -       -       pipe
#  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
#  ${nexthop} ${user}
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
#mail_spool_directory = /var/mail
#mail_spool_directory = /var/spool/mail
mail_owner = postfix
inet_interfaces = localhost
inet_protocol = all
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

dovecot

 IMAP/POP3サーバで、メールボックスのフォーマットはmboxとMaildirをサポートしている。imaps(993)、pop3s(995)の各ポートによるSSL/TLS接続と、標準のimap(143)、pop3(110)ポートに接続後にクライアントからのコマンドによってTLSによる暗号化通信を行うSTARTTLS、またユーザ認証方式も平文認証のほかにCRAM-MD5を含む多様な認証方式をサポートしている。

dovecotの設定ファイル

dovecot.conf

認証方式
mechanisms = plain
auth_mechanisms = plain login cram-md5

Courier IMAP

 設定ファイルはimapd。スタンドアロンのIMAPサーバとして動作するため、Postfix、Exim、qmailなどのほかのMTAと組み合わせtw使うことができる。Maildirを採用し、mbox形式はサポートしていない。

ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=4
MAILDIRPATH=Maildir
STARTTLS…開始時には通常のポートで平文の通信を行い、途中から暗号化通信に切り替える方式。暗号化専用のポート番号を割り当てる必要がない

補足

 alternatives --display mta
mta - ステータスは手動です。
リンクは現在 /usr/sbin/sendmail.postfix を指しています。
/usr/sbin/sendmail.postfix - 優先項目 30
 スレーブ mta-pam: /etc/pam.d/smtp.postfix
 スレーブ mta-mailq: /usr/bin/mailq.postfix
 スレーブ mta-newaliases: /usr/bin/newaliases.postfix
 スレーブ mta-rmail: /usr/bin/rmail.postfix
 スレーブ mta-sendmail: /usr/lib/sendmail.postfix
 スレーブ mta-mailqman: /usr/share/man/man1/mailq.postfix.1.gz
 スレーブ mta-newaliasesman: /usr/share/man/man1/newaliases.postfix.1.gz
 スレーブ mta-aliasesman: /usr/share/man/man5/aliases.postfix.5.gz
 スレーブ mta-sendmailman: /usr/share/man/man1/sendmail.postfix.1.gz
現在の「最適」バージョンは /usr/sbin/sendmail.postfix です。
 alternatives --config mta

1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
 telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.wnqs.biz ESMTP
#クライアントをメールサーバに認識させる
EHLO mail.wnqs.biz
250-mail.wnqs.biz
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
#送信元
MAIL FROM: user@wnqs.biz
250 2.1.0 Ok
#送信先 自ドメイン以外の場合、
#架空のドメインでもOkになる
RCPT TO: john@gmail.com
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: user@foo.com
Subject: testmail
To: john@gmail.com
Hello
.
250 2.0.0 Ok: queued as F02A1140053
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

admax_area



関連記事

記事はありませんでした

admax_area



Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

admax_area



PAGE TOP ↑