メールと fml



(株)インターネットイニシアティブ
札幌支店インターネット技術部
深町 賢一

<fukachan@sapporo.iij.ad.jp>

Copyright (C) 2001 Ken'ichi Fukamachi
All rights reserved.



http://www.fml.org/home/fukachan/


(page 1)


Table of Contents










(page 2)





Overview








(page 3)


電子メール(1)






(page 4)


電子メール(2)





(page 5)


メールシステムの運用 (Operation)

ネットワーク管理者は片手間ではできない



(page 6)


電子メールのサービスとしての応用





?



(page 7)


電子メールのプロトコル的な応用





(page 8)


メールサーバ






(page 9)


メールサーバの構造

用語: MTA MSA MDA(LDA) MUA
MxA.jpg




(page 10)


UNIX でのメールサーバ






(page 11)


UNIX



例: エラーをリアルタイムに見張る
% tail -F /var/log/messages | egrep -i 'error|critical'



(page 12)


ML (fml) と MTA の関係

ml.jpg



(page 13)


ML ドライバ





(page 14)


ML (fml) の構造
fml.jpg







(page 15)





SMTP の仕組み












(page 16)


SMTP の仕組み






(page 17)


メール送信の概念図

rudo@nuinui.net -> elena@fml.org
smtptrack.jpg



(page 18)


メールの送信

図の手順を各受信者について行なう。
つまり受信者の数だけ繰り返す。


HELO
MAIL FROM:
RCPT TO:
DATA
.
QUIT


(page 19)


ケーススタディ: SMTP (1)

S 220 ahodori.fml.org ESMTP Postfix
C EHLO katri.nuinui.net
S 250-ahodori.fml.org
S 250-PIPELINING
S 250-SIZE 10240000
S 250-ETRN
S 250 8BITMIME
C MAIL FROM:
S 250 Ok
C RCPT TO:
S 250 Ok

... snip ...

S = サーバからのメッセージ
C = クライアントが送るメッセージ



(page 20)


ケーススタディ: SMTP (2)

rudo@nuinui.net -> katri.nuinui.net -> ahodori.fml.org -> elena@fml.org

220 ahodori.fml.org ESMTP Postfix
EHLO katri.nuinui.net
250-ahodori.fml.org
250-PIPELINING
250-SIZE 10240000
250-ETRN
250 8BITMIME
MAIL FROM:
250 Ok
RCPT TO:
250 Ok
DATA
354 End data with .
From: rudo@nuinui.net
To: elena@fml.org
Subject: Todays's meeting

今日のミーティングは 15:00 からだ

るど隊長@ぬいぬい
.
250 Ok: queued as 9BB9F86640
QUIT
221 Bye
Connection closed by foreign host.



(page 21)


ケーススタディ: POP3

S +OK QPOP at hikari.fml.org starting. <27773.1001664805@hikari.fml.org>
C USER fukachan
S +OK Password required for fukachan.
C PASS パスワード
S +OK fukachan has 98 messages (259935 octets).
C LIST
S +OK 98 messages (259935 octets)
S 1 1661
S 2 2255

... snip ...

C RETR 1
S 一番目のメールが表示される
S .
C QUIT
S +OK Pop server at hikari.fml.org signing off.

S = サーバからのメッセージ
C = クライアントが送るメッセージ










(page 22)





配送の高速化


(page 23)


高速化技術の要素






(page 24)


DNS の問い合わせ

rudo@nuinui.net -> elena@fml.org
smtptrack.jpg



(page 25)


帯域の問題
traffic.jpg



(page 26)


MTA の構造

Q: 現代的なメールサーバとは?

monolithic vs distributed/modular





(page 27)


MTA: Monolithic

monolithic-mta.jpg



(page 28)


MTA: Distributed

Postfix の例
postfix.jpg



(page 29)


配送方法 (1)
pararell-delivery.jpg



(page 30)


配送方法 (2)
qmail-delivery.jpg



(page 31)


配送効率






(page 32)


ML ドライバと配送性能


ml.jpg






(page 33)





MTA の構造とセキュリティ



(page 34)


いつ/どこが危ない?
security.jpg



(page 35)


90 年代のサーバ paradigm




paradigm: T.S. Kuhn, 『科学革命の構造』 (みすず書房)



(page 36)


ケーススタディ: sendmail






(page 37)


ケーススタディ: FWTK

sendmail を使いつつ、よりセキュアにする試み
http://www.fwtk.org/
http://www.tis.com/
fwtk.jpg



(page 38)


ケーススタディ: qmail







(page 39)


qmail の内部構造

qmail.jpg



(page 40)


qmail 利点(1)

1.03 で終り? ( 1.00 〜 1.03 は年に一度くらい )
今までsecurity絡みの緊急リリースはない


注: 外部から接続は受けないprogram
注: 25/tcp を listen(2) するのは inetd など


(page 41)


qmail 利点(2)





(page 42)


qmail 問題(1)

UNIXの期待/慣習と異なる
小さいファイルが平面的に広がってて読みにくい;_;
(大型機のファイルシステムみたい…)

マシンの負荷はそれなりにかかる
(一つ一つが小さいので思ったほど重くない?)
受けとる方も負担が大きい

宛先が多いと宛先の重なり効果が効き始める



(page 43)


qmail 問題(2)




qmail-smtpdは一度吸込んでみないと
user unknownなどの判定ができない
利点 => VERPs



(page 44)


VERPs

netbsd-bugs-owner@netbsd.org -> fukachan@sapporo.iij.ad.jp






(page 45)


ケーススタディ: Postfix





(page 46)


Postfix Overview (1)






(page 47)


Postfix の内部構造

postfix.jpg



(page 48)


Postfix Overview (2)






(page 49)


Postfix Overview (3)














(page 50)





運用



(page 51)


運用における基本方針






(page 52)


設定の保守


例: postconf -n (postfix)





(page 53)


ケーススタディ: RBL を使う


smtpd_recipient_restrictions = permit_mynetworks
reject_maps_rbl
check_relay_domains




(page 54)


例: cvs による管理

% cd /etc/postfix
% ... main.cf を編集
% cvs diff -ub
cvs diff: Diffing .
Index: main.cf
===================================================================
RCS file: /cvsroot/conetc/postfix/main.cf,v
retrieving revision 1.1.1.1
diff -u -u -b -r1.1.1.1 main.cf
--- main.cf 2001/10/01 11:29:10 1.1.1.1
+++ main.cf 2001/10/01 11:30:48
@@ -393,3 +393,11 @@


+
+#
+# use RBL to reject spam
+#
+smtpd_recipient_restrictions = permit_mynetworks
+ reject_maps_rbl
+ check_relay_domains



(page 55)


例: 差分を見る

postfix のデフォルトからの変更点を把握する
解答 1
% postconf -n

解答 2
% cd /etc/postfix
% diff -ub main.cf.default main.cf
--- main.cf.default
+++ main.cf
@@ -393,3 +393,11 @@


+
+#
+# use RBL to reject spam
+#
+smtpd_recipient_restrictions = permit_mynetworks
+ reject_maps_rbl
+ check_relay_domains



(page 56)


プラモデル指向への疑惑






(page 57)


例: (サーバでの)フィルタリング






(page 58)


ケーススタディ: sendmail.cf (1)

http://www.sendmail.org/m4/anti-spam.html






(page 59)


ケーススタディ: sendmail.cf (2)

例: @ を含まないMessage-IDははじく
LOCAL_CONFIG
Kstorage macro

LOCAL_RULESETS
HMessage-Id: $>CheckMessageId

SCheckMessageId
# Record the presence of the header
R$* $: $(storage {MessageIdCheck} $@ OK $) $1
R< $+ @ $+ > $@ OK
R$* $#error $: 553 Header Error

Scheck_eoh
# Check the macro
R$* $: < $&{MessageIdCheck} >
# Clear the macro for the next message
R$* $: $(storage {MessageIdCheck} $) $1
# Has a Message-Id: header
R< $+ > $@ OK
# Allow missing Message-Id: from local mail
R$* $: < $&{client_name} >
R< > $@ OK
R< $=w > $@ OK
# Otherwise, reject the mail
R$* $#error $: 553 Header Error



(page 60)


ケーススタディ: postfix

[/etc/postfix/main.cf]
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks

[/etc/postfix/header_checks]

/^Message-Id:[ \t]$/ REJECT
/^Subject:.*(money wanted|make lots of \$\$|\$\$\$)/ REJECT
/^Subject:.*are you (being investigated|in need of a lifestyle)/ REJECT
/^Subject:[ \t]+ADV:/ REJECT
/^From:.*infowatch\.net/ REJECT
/^To:.*customer@aol/ REJECT



(page 61)


ケーススタディ: qmail



~user/.qmail に
| condredirect user-null except 822field From

~user/.qmail-null には
#



(page 62)


二重化





(page 63)


二重化の例: WWW サーバの二重化

コンテンツのアップデートが緩やかなら簡単
dup_www.jpg



(page 64)


メールサーバの二重化 (1)

メールサーバのソフトウエアとしては?






(page 65)


メールサーバの二重化 (2)

理想論
dup_mailsystem.jpg



(page 66)


メールサーバの二重化 (3)

データを守る





(page 67)


メールサーバの二重化 (4)

サービスの無停止化




(page 68)





fml の日々の運用
logo_fml.jpg



(page 69)


日々の運用







(page 70)


fml: ユーザ管理






(page 71)


fml: データの集中化および永続化


dbms.jpg



(page 72)


fml: フィルタリング







(page 73)


fml: ディスク








(page 74)





まとめ


(page 75)


まとめ (1)







(page 76)


まとめ (2)



(page 77)