メール 202

/ LPIC / Comment[0]

メールを処理するソフトウェアは以下の3つに分けられます。

  • MTA (Message Transfer Agent)
  • MDA (Mail Delivery Agent)
  • MUA (Mail User Agent)

メールの届くプロセスとしては以下のような形です。

  • MUA(メーラー)がMTA(メールサーバ)に送る
  • MTAが他のMTAにリレーを繰り返し、相手側のMTAに届く
  • ローカル配送プログラムMDAがメールBOXに振り分け
  • 相手側のMUAがメールBOXからPOP/IMAPで取りに行く

MUAからMTAへの送信時、MTA間のやり取りにはSMTP (Simple Mail Transfer Protocol)が使われます。
そのため、MTAはSMTPサーバーとも呼ばれます。


MUAがメールを受信する際にはPOP (Post Office Protocol)やIMAP (Internet Message Access Protocol)が使われます。


メールボックスにはmbox形式(1ユーザ1ファイル)とMaildir形式(1メール1ファイル)があります。
mbox形式は古くから使われてきましたが、ファイルを一つ損傷するだけで全てのメールを失います。


Postfix


Postfixはsendmail互換の新しいMTAです。設定が簡単なため標準のMTAとして採用するディストリも増えています。
Postfixは次の複数のデーモンにより動作しています。


sendmailローカルメールを受け取って処理
smtpd外部配送を処理
pickupmaildropキューを監視し内部配送を処理
cleanupヘッダの書き換えなどを行ってincomingキューに入れgmgrに通知
master全体の制御を行う
bounceバウンスメールを処理


Postfixの設定ファイルはmain.cfとmaster.cfがあります。
  • main.cf MTAとしての基本設定ファイル
  • master.cf Postfixを構成する全デーモンの設定ファイル

# vi /etc/postfix/main.cf
#ホスト名
myhostname = mail.hoge.com

#ドメイン名
mydomain = hoge.com

#メールアドレスの@以降に適用されるドメイン名
myorigin = $mydomain

#SMTPを待ち受けるネットワークインターフェイス
inet_interfaces = all

#ローカル配送を行うドメイン名
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

#中継を許可するMTAのIPアドレス
mynetworks = 10.0.0.0/8

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

#ローカル配送(MDA)プログラム
mailbox_command = /usr/bin/procmail

postconfコマンドを実行すると設定ファイルに基づいたPostfixの全設定値が表示されます。
# postconf
2bounce_notice_recipient = postmaster
access_map_defer_code = 450
access_map_reject_code = 554
address_verify_cache_cleanup_interval = 12h
address_verify_default_transport = $default_transport
address_verify_local_transport = $local_transport
address_verify_map = btree:$data_directory/verify_cache
address_verify_negative_cache = yes
address_verify_negative_expire_time = 3d
address_verify_negative_refresh_time = 3h
:

-nオプションをつけることでデフォルトから変更された点のみを表示できます。
# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
:

パラメータを指定するとその値だけを表示できます。
# postconf inet_interfaces
inet_interfaces = all


Postfixの制御はpostfixコマンドで行います。

書式: postfix サブコマンド

主なサブコマンド
start開始
stop停止
abort強制停止
flushキュー内のメッセージを再送
reload設定ファイルを再読み込み
check構文チェック

sendmail


sendmailはMTAの一つです。設定はsendmail.cf/etc/mail以下の複数のファイルで行います。
sendmailの設定は複雑なため、通常はm4マクロを用いて設定を行います。
設定の手順としては、まずsendmail.mcに設定を記述し、m4マクロを用いてsendmail.cfに変換させます。


/etc/mail/sendmail.mc
コメントアウトは頭にdnlを付けます。末尾のdnlは必須のようです。
divert(-1)dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl
define(`confDEF_USER_ID', ``8:12'')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
define(`confTO_IDENT', `0')dnl
FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
FEATURE(`accept_unresolvable_domains')dnl
LOCAL_DOMAIN(`localhost.localdomain')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl

sendmail.mcを編集したらm4マクロに通します。
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


sendmailデーモンを再起動させて適用させます
# service sendmail restart



/etc/mail/access
特定ホストから送受信に関する設定を記述します。

RELAYリレーを許可
REJECT受信を拒否(相手に通知)
OK明示的に許可
DISCARDメールを破棄
550 文字列ステータスコードと文字列を返して拒否


/etc/mail/access
localhost.localdomain   RELAY
localhost RELAY
127.0.0.1 RELAY
10.0.0 RELAY
hoge.com RELAY
spammer@spam.com DISCARD
spam@spam.com REJECT
10.0.0 REJECT
10.0.0.254 OK

/etc/mail以下の設定ファイルはsendmail.mc,local-host-namesを除き、設定終了後にmakeコマンドを使ってDBM形式のデータベースファイル化が必要になります。

下記コマンドを実行すると/etc/mail以下の必要なファイル全てがDBM形式のデータベースファイルに変換されます。
# cd /etc/mail; make


個々のファイルをDBM形式に変換するにはmakemapコマンドを使います。
# makemap hash access.db < access


設定が終わったらsendmailを再起動させて適用させます。
# service sendmail restart


/etc/mail/aliases
メールエイリアスの設定を行うことができます。

例1: postmaster宛に届いたメールをuser,administrator,rootが受信(postmasterはメールを受け取れなくなる)
postmaster: user,administrator,root

例2: cmd宛に届いたメールを/usr/local/bin/programの標準出力に送る
cmd: |/usr/local/bin/program

例3: mailinglist宛に届いたメールを/etc/mail/mlistに書かれたユーザに転送する
mailinglist: :include:/etc/mail/mlist

/etc/aliasesを変更した場合はnewaliasesコマンドで変更を適用させます。
# newaliases
関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可