メールを処理するソフトウェアは以下の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 | 外部配送を処理 |
pickup | maildropキューを監視し内部配送を処理 |
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/accesslocalhost.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
- 関連記事
-
-
iStudyのLPIC201の模試をやってみた 2014/09/07
-
SMTPサーバの管理 202 2014/09/07
-
メール 202 2014/09/06
-
squidでプロキシサーバを構築 202 2014/09/04
-
NFSサーバの構築・管理 202 2014/09/04
-