メールと 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)