1
|
1 //
|
|
2 // qmail+maildir+apop+virtualdomain+POPbeforeSMTP extensions to uw-imapd
|
|
3 // Japanese Document below
|
|
4 //
|
|
5
|
|
6 [Comentary]
|
|
7 This patch kit enables uw-imapd to handle;
|
|
8 * maildir
|
|
9 * qmail's extended mail addresses of user (~/.qmail-ext)
|
|
10 * Postfix's extended mail addresses of user (~/.forward+ext)
|
|
11 * Accesses to extended mail addresses (authenticated with ~/.apop-ext)
|
|
12 * Virtual domain user switching
|
|
13
|
|
14 Because this package is produced those who want to avail all features above,
|
|
15 we recommend you to turn on all switches for every extension.
|
|
16 Please let me recommend you not to use plain POP3 with this package.
|
|
17 If you want to cling onto POP3, please use qmail-pop3d which comes with
|
|
18 qmail distribution.
|
|
19
|
|
20 [Configuration]
|
|
21 You can select these compilation switches.
|
|
22
|
|
23 Where: ./Makefile
|
|
24 Switch: QMAIL
|
|
25 What: Support maildir and user's address extension.
|
|
26 This switch is requisite.
|
|
27
|
|
28 Where: ./Makefile
|
|
29 Switch: INET6
|
|
30 What: Support IPv6 address
|
|
31 WORKS fine only via ucspi-tcp+ipv6patch
|
|
32 If you are using tcpserver-ipv6, set this.
|
|
33
|
|
34 Where: ./Makefile
|
|
35 Switch: POSTFIX
|
|
36 What: Defaults user address file to ~/.forward and
|
|
37 extension delimiter to "+".
|
|
38 Setting this flag on is equavalent to declare
|
|
39 -DQMAIL -DDOTQMAIL=".forward" -DXADDR_DELIM="+"
|
|
40 in ./Makefile.
|
|
41
|
|
42 Where: ./Makefile
|
|
43 Switch: RESTRICT_POP
|
|
44 What: Restrict POP3 access from unsafe network. Allow
|
|
45 normal pop3 access only when environment variable
|
|
46 INTRANET is set. This can be controled by tcpd with
|
|
47 /etc/hosts.allow.
|
|
48
|
|
49 Where: ./src/osdep/unix/Makefile
|
|
50 Switch: DEFAULTMAILDIR (quoted string)
|
|
51 What: Default users' maildir directory when a user does not
|
|
52 have ~/.qmail file.
|
|
53 The default value is null. If null, the default value in
|
|
54 osdep/unix/maildir.c("Maildir") will be taken.
|
|
55
|
|
56 Where: ./src/osdep/unix/Makefile
|
|
57 Switch: QMAILCONTROL (quoted string)
|
|
58 What: Default qmail/control directory.
|
|
59 The default value is "/var/qmail/control"
|
|
60
|
|
61 Where: ./src/osdep/unix/Makefile
|
|
62 Switch: USERAPOPFILE (string)
|
|
63 What: User's APOP password file relative to their home dir.
|
|
64 ".apop" is set by default.
|
|
65 One of recommended values is "Mail/.apop".
|
|
66 NOTE THAT USERAPOPFILE should NOT be readable by others.
|
|
67 Do chmod 600 USERAPOPFILE.
|
|
68
|
|
69 Where: ./src/osdep/unix/Makefile
|
|
70 Switch: APOPOPEN (string)
|
|
71 What: Command name to decode APOP password from USERAPOPFILE
|
|
72 "/usr/local/sbin/deapop" is set by default.
|
|
73 NOTE THAT you should install deapop command too.
|
|
74 If you don't want to think about this,
|
|
75 install the following shell script into /usr/local/sbin/deapop
|
|
76
|
|
77 #!/bin/sh
|
|
78 cat "$@"
|
|
79
|
|
80 Where: ./src/osdep/unix/Makefile
|
|
81 Switch: POPBEFORESMTP
|
|
82 What: Turn on `POP before SMTP' feature.
|
|
83 The next variable POP3RECORDER takes effect when
|
|
84 this variable is defined.
|
|
85
|
|
86 Where: ./src/osdep/unix/Makefile
|
|
87 Switch: POP3RECORDER (string)
|
|
88 What: Command name to achieve `POP before SMTP'.
|
|
89 "/usr/local/etc/pop3-record" is set by default.
|
|
90 This recorder program should take one argument of
|
|
91 fully qualified hostname (or IP address) where the POP
|
|
92 authentication is passed to.
|
|
93
|
|
94 [NO WARRANTY]
|
|
95
|
|
96 This package comes from absolutely NO WARRANTY. The author of
|
|
97 this package is not responsible for any result caused by using
|
|
98 this software. The copyright of the extension part is held by
|
|
99 HIROSE, Yuuji [yuuji@gentei.org].
|
|
100
|
|
101 [COPYING]
|
|
102
|
|
103 You can re-distribute this package without any cost except some
|
|
104 practical cost(magnetical media or so). Although this package
|
|
105 basically obeys the license terms in a file CPYRIGHT in this
|
|
106 directory, there is one exception; when you modify the code
|
|
107 against the extensional part (over uw-imapd) and that
|
|
108 modification is a kind of bug-fix, modification should be telled
|
|
109 to the author of extensional part if you are thinking of
|
|
110 re-distribute your modification to the public. This limitation
|
|
111 is to aim to make this extensional package reasonably safe
|
|
112 always in any time. Please feel free to hack and distribute it!
|
|
113
|
|
114
|
|
115 -- Japanese document follows...
|
|
116
|
|
117 【qmail+maildir+APOP用POPサーバ】
|
|
118
|
|
119 このimapパッケージは、qmailとIMAPを組み合わせて使うこと *ではな
|
|
120 く* qmail+maildir+APOPを柔軟に利用しようということを目的として作
|
|
121 られましたのでIMAPでのテストは十分に行なわれていません。このパッ
|
|
122 ケージは以下のような方を満足させるでしょう。
|
|
123
|
|
124 * qmailを利用している
|
|
125 * mail spool には安全性の高い Maildir 形式を利用し(させ)ている
|
|
126 * ~/.qmail-ext ファイルによるqmailの拡張アドレスをよく利用している
|
|
127 * virtual domain を活用しまくっている
|
|
128
|
|
129 上記のようなことができるqmailですが、この機能を使いこなすために
|
|
130 はUNIXマシンにログインしてローカルファイルを見に行くメイルリーダ
|
|
131 を使うという方法しかありませんでした。これでは不便なので、上記の
|
|
132 使い分けを認識するPOPサーバを作ろうということで作成したのがこの
|
|
133 パッケージです。またPOPのみのサーバ利用が多い昨今、リモートから
|
|
134 の認証にログインパスワードを使わずにメイル専用パスワードを利用さ
|
|
135 せる変更も行なっています。これによりPOPもAPOP(POPのパスワード認
|
|
136 証の暗号化版)も共通のパスワードを利用できるようにしました。また、
|
|
137 POP の場合は既存ユーザのパスワード管理を考えて、認証時にUNIXパス
|
|
138 ワードも参照するようにしています。
|
|
139
|
|
140 もう一点、POPはパスワードをプレインテキストで流すため、外部ネッ
|
|
141 トワークからの利用は危険です。そこでPOPの利用を一部のネットワー
|
|
142 クに限定する機能もつけました(tcp_wrappersやtcpserverが必要)。
|
|
143
|
|
144 【インストール】
|
|
145
|
|
146 デフォルト設定では
|
|
147
|
|
148 * POP3は拒否する
|
|
149 * ユーザのパスワード設定ファイルは ~/.apop
|
|
150 * ~/.apop のデコードプログラムは /usr/local/sbin/deapop
|
|
151
|
|
152 となっています。APOP認証はサーバ側で必ず元のパスワードを知る必要
|
|
153 があります。これまでのAPOPサーバは全てのユーザ毎に管理者権限でパ
|
|
154 スワードを設定する必要がありました。一見安全そうですが、じつはユー
|
|
155 ザがパスワードを変更する頻度を限りなくゼロに近づけているだけです。
|
|
156 そもそもAPOPはサーバ側で元パスワードを取得する必要があるので必ず
|
|
157 復元可能な形で保存されなければなりません。ということはどんなに凝っ
|
|
158 た方法で保存しても結局は復号できるのですから、複雑な方法で暗号化
|
|
159 &格納をすることは手間を増やすだけです。いずれにしてもroot権限さ
|
|
160 えあれば元のパスワードは簡単に読めるわけですから、最初からユーザ
|
|
161 自身にパスワード管理をさせてしまっても何ら問題は無く、むしろその
|
|
162 方がパスワードをこまめに変えてくれる可能性が(ちょりっと)上がりま
|
|
163 す。ただし、誰にでもパスワードが読めては困るので、パスワードファ
|
|
164 イルを chmod 600 しておかないとメイルの取り込みが出来ないように
|
|
165 なっています。またどうしても平文でファイルに保存するのだけはいや
|
|
166 だーという場合のために、APOPパスワードファイルは
|
|
167 /usr/local/sbin/deapop というコマンドを経由して読み込むようになっ
|
|
168 ています。これにデコードする処理を書いておきます。もし、とくにエ
|
|
169 ンコードしなくてもいいという場合は
|
|
170
|
|
171 #!/bin/sh
|
|
172 cat "$@"
|
|
173
|
|
174 というシェルスクリプトでも入れておいてください。このパスワードは
|
|
175 ログインパスワードとは独立しているのでこれで大きな問題は起こらな
|
|
176 いでしょう(責任は持ちませんが:-)。
|
|
177
|
|
178 コンパイル時の変数は上記英文解説の場所を読んでください。
|
|
179
|
|
180 【ユーザから見た使い方】
|
|
181
|
|
182 まず、~/.qmail に正しくmaildirが設定されていることを確認します。
|
|
183 maildirをまだ作っていない場合は、
|
|
184
|
|
185 % /var/qmail/bin/maildirmake ~/maildir
|
|
186
|
|
187 とし、~/.qmail に
|
|
188
|
|
189 ./maildir/
|
|
190
|
|
191 と書きます。またメイル専用パスワードを ~/.apop に記録します。
|
|
192 これは apoppasswd コマンドで行ないます。
|
|
193
|
|
194 % apoppasswd
|
|
195
|
|
196 これで完了です。apoppasswdコマンドは APOPtools/apoppasswd にある
|
|
197 ので管理者がサイトの環境に手直しした上で一般ユーザのPATHの通る場
|
|
198 所にインストールして使って下さい。
|
|
199
|
|
200 さて、拡張アドレスを使いましょう。ログイン名を login とします。
|
|
201 login-isogi@hogehoge.co.jp のようなアドレスは ~/.qmail-isogi とい
|
|
202 うファイルで作成できます。login-isogi 用のmaildirを作ります。
|
|
203
|
|
204 % /var/qmail/bin/maildirmake ~/isogidir
|
|
205
|
|
206 これを ~/.qmail-isogi に登録します。
|
|
207
|
|
208 ./isogidir/
|
|
209
|
|
210 最後に login-isogi 用のパスワードを設定します。
|
|
211
|
|
212 % apoppasswd -e isogi -c
|
|
213 Enter APOP Password:
|
|
214
|
|
215 とすると、maildirの作成とパスワードの設定が同時に行えます。
|
|
216 maildirとパスワードの作成が完了したら、利用してるメイルリーダの
|
|
217 APOP アカウントの「アカウント名」をlogin-isogi にして接続します。
|
|
218
|
|
219 【POP before SMTPについて】
|
|
220
|
|
221 まず tcp_wrappers を利用している場合について説明します。
|
|
222 tcpserverを利用する場合も原理は同じなので仕組みだけ理解してくだ
|
|
223 さい。
|
|
224
|
|
225 tcp_wrapperとtcp-envを組み合わせてSMTPサーバを中継用に使うドメイ
|
|
226 ンを限定して使っていると思います。これの発展形でPOP接続して来た
|
|
227 ドメインだけにSMTPサーバを使わせる手法のことを "POP before SMTP"
|
|
228 と呼びます。このパッケージでも APOP 接続をしたドメインに対して
|
|
229 SMTPの中継許可を与えることが出来ます。本パッケージの ./APOPtools
|
|
230 ディレクトリにある pop3-* を /usr/local/etc にインストールします。
|
|
231 3つのファイルの実体は同じです。さらに以下の作業をします。
|
|
232
|
|
233 * 原本となる /etc/hosts.allow を /etc/hosts.allow.src にコピー
|
|
234 * crontab で10分毎に /usr/local/etc/pop3-age を起動させる
|
|
235
|
|
236 後者は、大抵のOSの場合 root の crontab に
|
|
237
|
|
238 */10 * * * * root /usr/local/etc/pop3-age
|
|
239
|
|
240 などと書けば設定できます。pop3-* スクリプトは自身の環境に合わせ
|
|
241 て適宜修正して下さい。この段階で、tcp_wrapper の定義ファイルは
|
|
242 /etc/hosts.allow.src が大元で、/etc/hosts.allow はcronによって自
|
|
243 動生成されるものとなります。hosts.allowをいじっても自動的に上書
|
|
244 きされてしまうので、設定を変えるときは *必ず hosts.allow.src を
|
|
245 編集する* ことに注意して下さい。
|
|
246
|
|
247 さらにipop3dを起動するときに接続してきたホストが環境変数
|
|
248 RELAYCLIENT に入るようにしておきます。/etc/inetd.conf でipop3dを
|
|
249 起動するときに tcp_wrapper 経由となることを確認します。
|
|
250
|
|
251 [/etc/inetd.conf]
|
|
252 pop3 stream tcp nowait root /usr/libexec/tcpd /usr/libexec/ipop3d
|
|
253
|
|
254 1999年頃以降のPC-UNIXではinetdにデフォルトでtcpdが組み込まれてい
|
|
255 ることが多いので、inetd.confにtcpdははさまなくて良いこともありま
|
|
256 す。続いて /etc/hosts.allow.src で環境変数の設定が起きるようにし
|
|
257 ます。
|
|
258
|
|
259 [/etc/hosts.allow.src]
|
|
260 ipop3d : all : setenv RELAYCLIENT %h
|
|
261
|
|
262 これで POPサービスを利用しに来たクライアントのアドレスが環境変数
|
|
263 に入ります。
|
|
264
|
|
265 tcpserverの場合は、付属の pop3-record スクリプトの後半に例がある
|
|
266 のでそれを利用してください。
|
|
267
|
|
268 なお、tcp_wrappers 用の pop3-age スクリプトは負荷の高いマシンで
|
|
269 は hosts.allow ファイルが空になる可能性があります。lockすれば多
|
|
270 少ましになるでしょうが完ぺきではありません。もし、hosts.allowの
|
|
271 書き換えに失敗するような負荷の高い環境で使う場合は tcp_wrappers
|
|
272 ではなく、tcpserverでのアクセス制御をすることを強く勧めます。こ
|
|
273 ちらはロックの必要もなく、安全にアクセス制御ファイルの更新ができ
|
|
274 ます。
|
|
275
|
|
276 【POPアクセス制御について】
|
|
277
|
|
278 POP3とAPOPは同じポートを使うので「外部からはAPOPだけ許す」などの
|
|
279 制御はルータやtcp_wrappersなどだけではできません。このipop3dでは、
|
|
280 生のPOP3は環境変数INTRANETが定義されているときだけに利用を制限す
|
|
281 ることができます。tcp_wrappers の例を示します。
|
|
282
|
|
283 ipop3d : localhost .localnet.hoge.jp \
|
|
284 : setenv INTRANET : setenv RELAYCLIENT %h
|
|
285 ipop3d : all : setenv RELAYCLIENT %h
|
|
286
|
|
287 としておけば、ローカルネットワーク内だけで生POP3を使うことができ
|
|
288 ます。
|
|
289
|
|
290 【virtualdomain機能について】
|
|
291
|
|
292 qmailでは /var/qmail/control/virtualdomains を使うことで、ユーザ
|
|
293 が任意のメイルドメインを持つことができます。これを解釈するように
|
|
294 しました。/var/qmail/control/virtualdomain ファイルで
|
|
295
|
|
296 virtual.hoge.co.jp:user1
|
|
297 dokan.hoge.co.jp:user2-dokan
|
|
298
|
|
299 としておくと、XX@virtual.hoge.co.jp は ~user1/.qmail-XX に配送さ
|
|
300 れ、YY@dokan.hoge.co.jp は ~user2/.qmail-dokan-YY に配送されます。
|
|
301 それがMaildirスプールを含む場合、本パッケージのIMAP/POPで取り込
|
|
302 むことができます。デフォルトではこのためのパスワードはそれぞれ
|
|
303
|
|
304 ~user1/.apop-XX
|
|
305 ~user2/.apop-dokan-YY
|
|
306
|
|
307 ファイルに保存しておかなければなりません。
|
|
308
|
|
309 【Postfixの拡張アドレス対応について】
|
|
310
|
|
311 Postfixによる ~/.forward+ext で発生する拡張アドレスは、その配送
|
|
312 先がMaildirであれば本パッケージでも利用できます。Postfix のデフォ
|
|
313 ルト設定の
|
|
314 forward_path = $home/.forward$recipient_delimiter$extension,
|
|
315 $home/.forward
|
|
316 recipient_delimiter = +
|
|
317
|
|
318 のまま Postfix を動かしている場合はトップレベルのMakefileの
|
|
319 EXTRACFLAGS に -DPOSTFIX を追加して下さい(-DQMAILも必要です)。こ
|
|
320 れにより、拡張アドレスを決めるファイルが ".forward" に、拡張部分
|
|
321 を区切る文字列が "+" になります。いずれかを変更している場合はた
|
|
322 とえば、
|
|
323
|
|
324 -DDOTQMAIL=".postfix" -DXADDR_DELIM="-"
|
|
325
|
|
326 のように変更できます。もし、Postfix の .forward+ext を利用する場
|
|
327 合は周辺ツールの APOPtools/apoppasswd, APOPtools/apopcall.c の対
|
|
328 応する変数も変更する必要があることに注意して下さい。また、パスワー
|
|
329 ドファイルも ~/.apop-ext ではなく~ /.apop+ext となることに注意が
|
|
330 必要です。これらが面倒な場合は、Postfix の設定の方で .qmail-ext
|
|
331 を見るようにしてしまうのも手です。この場合は
|
|
332
|
|
333 recipient_delimiter = -
|
|
334 forward_path = $home/.forward$recipient_delimiter$extension,
|
|
335 $home/.qmail$recipient_delimiter$extension,
|
|
336 $home/.forward
|
|
337
|
|
338 とすると ~/.qmail-ext も参照するようになり、デフォルト状態の本パッ
|
|
339 ケージのまま利用することができるでしょう。
|
|
340
|
|
341 【Postfixの POP before SMTPについて】
|
|
342
|
|
343 main.cf で たとえば次のようにします。
|
|
344
|
|
345 smtpd_recipient_restrictions =
|
|
346 permit_mynetworks
|
|
347 check_client_access hash:/etc/postfix/client_access
|
|
348
|
|
349 ここで /etc/postfix/client_access は POP before SMTP の許可ホス
|
|
350 トリストを保持するためのファイル名で、既に使われてはいないものに
|
|
351 します。配布ディレクトリの APOPtools/pop3-record.postfix は
|
|
352 /etc/postfix/client_access ファイルをリレー許可判定に使うことを
|
|
353 前提とした Postfix 用のスクリプトです。
|
|
354
|
|
355 【謝辞】
|
|
356
|
|
357 安井卓さん(tach@debian.or.jp)にはsyslog関係のパッチを頂きました。
|
|
358 ここに感謝の意を表します。
|
|
359
|
|
360 【免責】
|
|
361
|
|
362 IMAPパッケージに本ドキュメントで説明した拡張機能を追加する部分の
|
|
363 著作権は広瀬雄二[yuuji@gentei.org]が保持します。このプログラムを
|
|
364 用いて生じた如何なる結果に対しても著作権者は責任を負いません。
|
|
365
|
|
366 2009/9/14 yuuji@gentei.org
|