#contents

~
** Life with qmail-ldap [#ffffbe51]
qmail-ldap のある暮らし~
** はじめに [#eb71f46a]
最近,自宅サーバに届く spam メールが大幅に増え,無駄なリソースを消費しています.qmail で運用し,セキュアであっても.また,bogofilter を使い,spam メールを別のメールフォルダに隔離したとしても,spam メールをサーバが受け取る事には変わりありません.~
~
'''このドキュメントは,http://www.qmail-ldap.org/wiki/Lwql にある Life with qmail-ldap を翻訳したものです.'''~
'''基本的に英語が苦手なため,翻訳ミス等が多数ある事が予想されますし,意訳をしている場面もあると思います.その為,原文もあわせて読んで下さい.~
その為,サーバのディスクに保存される前に spam メールを拒否する方法が必要になり,何か良い方法が無いかとリサーチしていました.そこで antibadmail を発見し,調査,テスト,運用という流れになりました.~
ここでは,antibadmail のインストール及び設定について説明します.~
# 備忘録な面がとても強いのですが,そこはご愛嬌です.

** 有効性 - Availability [#z312b222]
このドキュメントのオリジナルバージョンは HTML フォーマットで http://www.lifewithqmail.org/ldap/ から常に取得できます.
*** antibadmail とは? [#q0606db5]
antibadmail とは,広瀬雄二さんが作成した SMTP セッション中に spam メールを拒否する為の汎用的な SMTP ラッパーです.~
ラッパーですので,qmail 以外の postfix や courier-mta 等,RFC2821 に準拠した物であれば利用可能です.~
~
** イントロダクション - Introdunction [#d0bc012e]
このドキュメント及び Dave Sill の Life With Qmail - qmail のある暮らし (http://www.lifewithqmail.org/) は qmail および ldap についての基本を説明していない為,理解していない場合はインスピレーションがわかないだろうし,役に立たないでしょう.このドキュメントは qmail-ldap の基本的なセットアップを説明しますが,あなたは,qmail および ldap を,qmail-ldap の作業をする際に理解しなければなりません.~
antibadmail はコンテンツフィルタでは無い為高速に動作し,SMTP セッション中に spam メールの判断を行い,spam と判断した場合,SMTP セッションを中断します.~
ただし,SMTP セッションで得られる情報は限られた物なので,antibadmail で全ての spam メールを拒否出来るわけではありません.その為,ベイジアンフィルタである,bogofilter や spamassassin を組み合わせて使うと効果的です.~
~
qmail-ldap は,ユーザデータを検索するターゲットをディスク上のファイルからでは無く,ldap ディレクトリから検索する為の qmail 1.03 へのパッチです.これは,特に分散環境でより簡単な管理が可能になります.ISP 等で大きなメール環境を導入する為に非常によく適したクラスタリングサポートビルトインを qmail-ldap にまとめてあります.~
結局組み合わせる必要があるなら,bogofilter 等だけで良いのでは? と思う人もいると思います.bogofilter 等のベイジアンフィルタは,メール本文を全て読んでから判断しますので,いくら bogofilter が C 言語で書かれていて高速だろうと,やはり速度の低下は免れません.spamassasin は Perl で書かれていますので,余計も遅くなるでしょう.~
その為,SMTP セッションで明らかに spam だと判断出来るメールはその段階で拒否し,残りをベイジアンフィルタにかける方が効率が良く,CPU パワーを有効的に使えるのです.~
~
このドキュメントは,あなたが行う必要がある物のほとんどを与えることを試みています.qmail-ldap のコンポーネントとどの様にそれらが一緒に適合するかの方法を記述し,代表的な導入の説明を提供します.そして,プロセスの中で良くある質問のいくつかを取り上げます.しかし,既存の qmail と ldap に関するドキュメントの置き換える事を意図してはいません.これはリファレンスではなく,順序よく進めるための入門書です.~
~
このすばらしいソフトウェアの一部は Andre Oppermann と Claudio Jeker によって開発されました.
~
** その他のリソース - Other resources [#ffaea0d4]
''オンラインのドキュメント''~
[[公式の qmail-ldap のページ>http://www.qmail-ldap.org/wiki/Main_Page]]~
[[Deve Sill の qmail のあるくらし>http://www.lifewithqmail.org/]]~
[[qmail-ldap のための追加パッチ>http://www.lifewithqmail.org/ldap/patches/]]~
Adfinis がリリースした [[phpQLAdmin>http://phpqladmin.bayour.com/]] は Web ベースで qmail-ldap を管理するツールで,現在は Turbo Fredriksson がメンテナンスしています.~
コマンドラインで管理するツールが利用可能です: http://www.enderunix.org/qldapadmin~
~
** メーリングリスト - Mailing-List [#d9fa829f]
同じく,メーリングリスト qmail-ldap@qmail-ldap.org があります.参加,退会等の情報は[[こちら>http://www.qmail-ldap.org/wiki/Mailinglist]]~
~
もしあなたがリストに投稿するとしたら,あなたは利用可能なドキュメントを読み,LDAP と qmail について必要な情報を読み理解し,少なくとも control 以下の設定ファイル及び完全なエラーログを必要とします.これらが本当に多くなってしまった場合 Web サーバにアップロードし,それを情報とみなす為に URL を公表して下さい.~
~
検索可能な[[アーカイブ>http://marc.theaimsgroup.com/?l=qmail-ldap]]があります.どうか,リストを尋ねる前に利用してください.~
~
** LDAP への短いイントロ - short Intro to LDAP [#h864ab2f]
** antibadmail のインストール [#y81b0f8f]
*** 入手方法 [#hf65b109]
antibadmail は[[作者のサイト>http://www.gentei.org/~yuuji/software/antibadmail/index-j.html]]からダウンロードが出来ます.現在の最新のスナップショットは [[antibadmail-1.24.tar.gz>http://www.gentei.org/~yuuji/software/antibadmail/antibadmail-1.24.tar.gz]] のようです.~
が,作者は,CVS を利用した入手を薦めているようですので,CVS を利用してソースコード等を入手しましょう.具体的には以下の様にタイプする事で入手が可能です.~
 cvs -d :pserver:anonymous@yatex.org:/qmail co antibadmail

*** 基本 [#z08b01fc]
Lightweight Directory Access Protocol または LDAP は大きいネットワークと組織の管理で非常に有用なツールです.SQL データベースシステムよりも最大 10倍速い,読み取りオペレーションに最適化されたデータベースです.LDAP の最も良い特徴の 1つが,ユーザアカウントを格納する能力です.一つのアカウントエントリが,UNIX ワークステーション,imap サーバ,Web ページのアクセスコントロールや電子メールアカウントで利用する事が出来ます.~
~
LDAP サーバで qmailUser スキーマとユーザアカウントをロードする事で,組織の中のすべてのメールサーバで同じアカウントデータを共有する事ができます.Qmail-LDAP はすべてのユーザが内部の電子メールアカウントに user@company.com のようなスタイルを使うときでも,各ユーザのアカウントエントリで指定されたメールホストへのルーティングをサポートします.user@mailhost1.company.com のような内部アドレスをついかい,メールをイントラネットに残すときでも,それらを user@company.com に変換する必要はありません.~
~
Qmail-LDAP の電子メールアカウントを格納するために LDAP を使う場合は,LDAP ディレクトリを構築するか,既存のディレクトリを修正する必要があります.Qmail-LDAP は,LDAP について事前に理解している事を管理者に要求しますので,HOWTO のこのセクションでは基本的な LDAP または,unix のトピックは扱いません.LDAP ディレクトリの構築と管理に不慣れな人々にとっての[[すばらしい本>http://www.qmail-ldap.org/wiki/Documentation#LDAP]]があります.そして,http://www.openldap.org/ に検索可能なメーリングリストアーカイブがあります.~
~
1. Qmail-LDAP の作業の最初のパートは,ディレクトリサーバをセットアップし,スキーマの追加を行う事です.あなたがスキーマのチェックを無効にした場合,これは必要ありませんが,スキーマチェックを無効とした状態で LDAP サーバを動作させる事はとても困難になるでしょう.どのようにスキーマをロードするかは,あなたのサーバに依存します.~
~
***  OpenLDAP 2.x スキーマ [#s3f23d7a]
slapd.conf を編集し,以下のラインを追加して下さい.もちろんファイルロケーションとマッチさせて下さい:
 include /etc/ldap/schema/inetOrgPerson.schema
 include /etc/ldap/schema/nis.schema      (required by inetOrgPerson.schema)
 include /etc/ldap/schema/qmail.schema    (found from the qmail-ldap patch,
                                            copy it to your schema directory)
*** ucspi-tcp のインストール [#tb4595f1]
antibadmail は D.J.Bernstein が作成した [[ucspi-tcp>http://cr.yp.to/ucspi-tcp.html]] パッケージに含まれている tcpserver を利用しますので,サーバ内に ucspi-tcp がインストールされていない場合はインストールする必要があります.~
D.J.Bernstein さんのプロダクト (qmail や djbdns) がインストールされている場合は ucspi-tcp がインストールされているはずですが,そうでない場合は,以下の様にインストールしましょう.~
# ここでは,FreeBSD な環境を想定しているので,ports/packages でインストールする事を前提にしています.

変更の効果を生むために,slapd を再起動して下さい.~
 cd /usr/ports/sysutils/ucspi-tcp
 make install

***  OpenLDAP 1.2.x スキーマ [#r7dc3a39]
slapd.oc.conf を編集し,以下のスキーマを追加して下さい.~
 objectclass qmailUser
       requires
               objectclass,
               mail,
               uid
       allows
               mailMessageStore,
               homeDirectory,
               userPassword,
               mailAlternateAddress,
               qmailUID,
               qmailGID,
               mailQuota,
               mailHost,
               mailForwardingAddress,
               deliveryProgramPath,
               qmailDotMode,
               deliveryMode,
               mailReplyText,
               accountStatus
これで,ucspi-tcp がシステムにインストールされます.~

変更の効果を生むために,slapd を再起動して下さい.~
~
*** コンフィグレーション [#pb7ddca0]
あなたがロードしたスキーマがあるので,少々システムを構成する事が必要です.私は,仮想のユーザアカウントを議論しようとしています.メールサーバ上にユーザの為のホームディレクトリ又は,/etc/passwd アカウントがぜんぜん無い事を意味します.つまり,これはユーザの遊び場では無く,メールサーバなのです.~
~
これは,少量の制御ファイルの設定を伴います:~
~
 - edit /etc/passwd and add:  vmail:*:11184:2110::/var/qmail/maildirs/:/bin/true
*** antibadmail のインストール [#jf8d5432]
antibadmail のインストールは,以下の様に make install でインストールが可能です.
# 上記の CVS 経由で取得した場合を想定しています.
 cd antibadmail
 make install

 - edit /etc/group and add:   vmail::2110

 - mkdir /var/qmail/maildirs

 - chown -R vmail:vmail /var/qmail/maildirs

 - cd /var/qmail/control

 - /var/qmail/control 内の指定された内容を持つ以下の制御ファイルを作成して下さい:

 defaultdelivery:
 ./Maildir/

 ldapmessagestore:
 /var/qmail/maildirs

 ldapgid:
 2110

 ldapuid:
 11184

必要ならば,UID/GID とパスを代用して下さい.~
----
注意: あなたが Courier-IMAP を使っている場合,この同じ vmail ユーザは,Maildir にアクセスする為に使用する事が出来ます.
----
これで antibadmail のインストールが完了しました./usr/local 以下に antibadmail という名前のバイナリファイルがある事を確認して下さい.~
~
*** ディレクトリ内のファイル配置 [#m4ff6ab8]
あなたは,この時点でディレクトリ階層とアカウントを作成する必要があります.ここでは,以前にまったくエントリも無い,新しくインストールされたディレクトリサーバからどうやって進めるかをデモンストレートします.~
~
a. ldif を作成する為,あなたのお気に入りのテキストエディタを使用して下さい.また,以下はあなた固有のセットアップ状態に従って修正して下さい.ldif における最初のブロックは,slapd.conf ファイル内で定義されるディレクトリベースとマッチしていなければなりません:
上記の手順でバイナリのインストールは終わりましたが,設定ファイルを保存する場所の準備が出来ていません.以下のように設定ファイルを準備するディレクトリを用意してください.~
 mkdir -p /var/qmail/control/badhelodir
 mkdir -p /var/qmail/control/badmailfromdir
 mkdir -p /var/qmail/control/badrcpttodir
これらディレクトリの作成が完了した事を確認して下さい.

 suffix          "ou=company, c=CC"
*** tcpserver のルールの作成 [#u8e1bcc5]
antibadmail は tcpserver を通じて動作すると書きました.tcpserver は詳細なアクセスコントロールが可能で,このルールは,テキストで作成し,tcprules コマンドで CDB と呼ばれるデータベース形式に変換して利用します.~
CDB はとても高速なファイルデータベースで,変更があっても tcpserver の再起動は必要がありません.その為,動的にルールを変更させる使い方でも問題はありません.~
# POP Before SMTP 等で CDB を使う場合,動的にルールを変更しています.

また,次のエリアも
単純な tcprules ファイルは次の様になります.''/usr/local/etc/tcp.smtp'' という名前で作成して下さい.
 127.0.0.1:allow,RELAYCLIENT=""
 192.168.1.:allow,RELAYCLIENT=""
 all:allow
この場合,127.0.0.1 (localhost) からのメールの発信は許可.192.168.1 (自ネットワーク)からのメールの発信の許可.その他は接続のみが許可.といったルールになります.~
先に述べたように,テキストファイルのままでは動作せず,CDB 形式に変換する必要があります.変換には tcprules コマンドを利用します.次のようにタイプする事で,CDB 形式に変換されます.~
 tcprules /usr/local/etc/tcp.smtp.cdb /usr/local/etc/tcp.smtp/tmp < /usr/local/etc/tcp.smtp
これで /usr/local/etc/tcp.smtp.cdb というファイルが作成されました.

 ou: accounts
*** 最低限の起動 [#h5d37ac0]
qmail を tcpserver 経由で起動している場合,qmail-smtpd を起動するスクリプトに少し編集を加えます.~
 tcpserver -vR -x /usr/local/etc/tcp.smtp.cdb -c120 -U 0 smtp qmail-smtpd 2>&1
と上記の様なスクリプトがあった場合,以下の様に書き換えます.
 tcpserver -vR -x /etc/smtp.cdb -c120 -U 0 smtp antibadmail qmail-smtpd 2>&1
と,書き換える事で,qmail-smtpd は antibadmail が前に待ち受ける形で起動する事が出来ます.

 dn: uid=elvis, ou=accounts, o=company, c=CC
 cn: Elvis Presley
 sn: Presley
 objectClass: top
 objectClass: person
 objectClass: inetOrgPerson
 objectClass: qmailUser
 mail: elvis@graceland.com
 mailAlternateAddress: elvis.presley@graceland.com
 mailAlternateAddress: the-king@graceland.com
 mailAlternateAddress: theking@nirvana.org
 mailHost: mailhost1.graceland.com
 mailMessageStore: /var/qmail/maildirs/elvis
 uid: elvis
 userPassword: {MD5}X03MO1qnZdYdgyfeuILPmQ=
*** syslog.conf 及び newsyslog.conf の編集 [#w84a3d83]
antibadmail はメールの Accept, Reject を syslog でログを取得出来ます.ログファシリティは LOCAL1 で,ログレベルは INFO です.~
syslog.conf に次の1文を追加し,syslogd をリスタートさせる事でログ取得の準備が完了します.~
 local1.*                                        /var/log/smtp-stat
この場合,''/var/log/smtp-stat'' に antibadmail のログが吐き出されます.このまま運用した場合,ログサイズが膨大になりますので,newsyslog.conf を編集し,ログのローテーションを行った方が良いでしょう.~
newsyslog.conf には以下の様に追加します.~
 /var/log/smtp-stat                        640  7     *    @1T00  J
この場合,''/var/log/smtp-stat'' は,毎月1日の午前0時にログのローテーションが行われます.ローテート回数は7回で,ログファイルは bz2 形式で圧縮して保存されます.~
メールの流量が多い場合,ここは毎月では無く,毎週又は毎日とすべきですが,多数のファイルに分けられてしまいますので,ログを整形してレポートを行う何かが完成してから細かく分けるようにした方が良いかと思います.

b. ファイルを作成した後,ldapadd ユーティリティを使用してディレクトリ内にそれを読込んで下さい.
** antibadmail の設定 [#oac36a37]
上記の点が完了したら antibadmail は動作しているはずです.ですが,何も設定されていない状態の場合,基本的に antibadmail は働いてくれません.~
その為,様々な状態に合わせて設定を行う必要があります.以下では代表的な設定について記載していきます.

 ldapadd -acrv -h ldap.company.com -D "cn=manager,dc=company,dc=com" -w managers_password -f my.ldif
*** 明らかに存在しないメールアドレス宛てのメールを拒否する [#p23b7e97]
以前存在したアドレスで,現在使われていないアドレス宛ての spam メールは結構多いものです.既に存在せず,またしばらく使う事の無いアドレスは,spam メールを受信する際に拒否する事によって,無用なバウンスをなくす事が可能になります.~
例えば,info@example.com というアドレスは存在せず,また,しばらく使う事の無い事が分かっている場合,次のように設定する事でメールの受信を拒否出来ます.~

詳細については ldapadd(1) マニュアルページを参照して下さい.
 touch /var/qmail/control/badrcpttomdir/info@example.com

----
** 最終ビジョン [#i2cda721]
----
*** qmail-ldap とお互いに絡んでいるコンポーネント [#rde3dff8]
~
''qmail-queue''~
qmail-queue はメッセージを受け,それらをキューに置きます.それらは常に "received" ラインを通過し,メッセージ検査をまったく行いません.~
~
'' qmail-send''~
~
qmail-send は qmail-queue によって発信キューに置かれたメッセージを処理し,ローカル配送の為の qmail-lspawn とリモート配送の為の qmail-rspawn を使用します.qmail-send はキューにある全てのメッセージを直接配送に再スケジュールします.~
~
'' qmail-todo''~
~
qmail-send の作業負担を減らす為に qmail-todo はメールの前処理を行います.qmail-todo により,高い処理能力のメールサーバ全体の性能は過負荷をかけられた qmail-send プロセスによって引き起こされる "無差別な qmail シンドローム" よりずっと良いでしょう.~
~
'' qmail-lspawn''~
~
[[qmail-lspawn>http://www.qmail-ldap.org/wiki/Qmail-lspawn]] はメールをローカルに配送する為にユーザを探し,それを実行する為に qmail-local を呼び出します.これはクラスタリングをサポートしています.~
~
''qmail-local''~
~
qmail-local は配送を実行します.これは .qmail ファイルを処理します.~
~
''qmail-rspawn''~
~
qmail-rspawn はリモート配送の為に qmail-remote を呼び出します.~
~
''qmail-remote''~
~
qmail-remote は SMTP 経由でメールをリモートホストに送信します.これは TLS 暗号化,QMTP プロトコル及びその他の機能をサポートします.~
~
''qmail-inject''~
~
qmail-inject は標準入力からメッセージを読み,ヘッダを追加し配送を処理する qmail-queue を呼び出します.~
~
''qmail-smtpd''~
~
[[qmail-smtpd>http://www.qmail-ldap.org/wiki/Qmail-smtpd]] は通常,25/tcp ポートをリスンし,SMTP 経由でリモートホストからメッセージを受け取ります.これは,SMTP 通信の間に LDAP ディレクトリを照合する為に補助プログラムである [[auth_smtp>http://www.qmail-ldap.org/wiki/Auth_smtp]] 及び [[qmail-verify>http://www.qmail-ldap.org/wiki/Qmail-verify]] を呼び出す事が出来ます.qmail-smtpd は TLS 暗号化と新しい環境変数をトリガとするアンチスパム技術を纏めてサポートします.~
~
''qmail-qmqpd''~
qmail-qmqpd は QMQP 経由でリモートホストからメッセージを受け取る,迅速なメッセージキューイングプロトコル (Quick Message Queuing Protocol) です.これは "常にメッセージを中継" します.従って,事前認証済みのホストだけが接続出来る事を確認しなければなりません.QMQP はクラスタ内の配送に使われます.もし貴方が qmail-ldap をクラスタ環境で使いたい場合は qmail-qmqpd をセットアップしなければなりません.~
~
''qmail-popup''~
qmail-popup はネットワーク上で POP3 経由でユーザ名,パスワードを読み認証の為のサブプログラム (通常は auth_pop) を呼び出します.~
~
''qmail-pop3d''~
qmail-pop3d は qmail-popup から呼び出され,POP3 セッションを処理します.~
~
''auth_pop''~
[[auth_pop>http://www.qmail-ldap.org/wiki/Auth_pop]] は qmail-popup から認証するユーザに呼び出されます.これは qmail-ldap クラスタ内で POP3 セッションの転送に責任を持ちます.~
~
''auth_imap''~
[[auth_imap>http://www.qmail-ldap.org/wiki/Auth_imap]] は [[auth_pop>http://www.qmail-ldap.org/wiki/Auth_pop]] と同様の働きをしますが,IMAP の為の物です.セッションの転送をハンドリングします.~
~
''qmail-ldaplookup''~
LDAP のセットアップが正しく行われているかを確認するツールです.qmail-ldaplookup -u [uid] または qmail-ldaplookup -m [mail address] と使用してください.~
~
----
このように,''/var/qmail/control/badrcpttodir'' 以下にメールを受取りたくないアドレス名のファイル ( 今回の場合は,''info@example.com'' ) を作成する事で,SMTP セッション中に受信を拒否する事が可能です.

** 追加のソフトウェア [#r84ae1cc]
*** From: が hotmail.com や yahoo.co.jp を名乗る spam を排除する [#abfe2eb2]
多くの spam は hotmail 等のフリーメールアドレスのアカウント名を From: としてメールを送ってきます.大抵の場合,From: に書かれたアドレスは存在しないアドレスや,spammer 本人のアカウントでは無い為,メールサーバは User Unknown 等の返信を送ろうにも送れなかったり,全く違う他人に送ってしまう事になります.~
この様な spam の場合を拒否するには以下の様な考察の元で設定を行うと効果的です.

*** daemontools [#me98a657]
Daemontools は,qmail-ldap に必要不可欠なコンパニオンパッケージです.デーモンを実行,管理する事を補佐するいくつかのヘルパープログラムを提供します.~
~
qmail-ldap はいかなる修正も無く /var/qmail/boot をサービス起動スクリプトにより使用されて引き渡されます.~
~
- svscan は SystemV init に何となく似ている仕事をします: ジョブを監視し,動作し続ける事を保証します.ディレクトリ /service によって正常に起動し,そのディレクトリの各サブディレクトリにサービスを定義します.それらは通常のシンボリックリンクです.
 プロバイダが用意してある正規のサーバを利用していない

- svc は svscan を制御する対話型ユーザインタフェースを提供します: 起動させる為に "-up" オプションをつけ,停止させる為に "-d" オプションをつけたり,停止,起動といった再起動の為に "-t" オプションをつけて,コントロールディレクトリへのパスという形でサービス名を続けて入力します.最も一般的なケースは次のようになり,これは qmail-send を再起動します.~
 svc -t /service/qmail-send
上記の理由により,正規のサーバからのメールは受信し,それ以外は拒否とするルールを適用する事によって,hotmail や yahoo を名乗る spam を拒否する事が可能になります.~
- hotmail.com を名乗る spam メールを拒否する.

- svstat は,サービスのステータスを通知します.コントロールディレクトリへのパスを続けて下さい.例えば,
 svstat /service/qmail-send
は,特定のデーモンを監視する為に svscan より実行され,これが死んでしまった場合は再起動されます.
 touch /var/qmail/control/badmailfromdir/@hotmail.com
 touch /var/qmail/control/badmailfromdir/.hotmail.com
 
 echo '=.hotmail.com:allow,GOODMAILFROM="@hotmail.com"' >> /usr/local/etc/tcp.smtp

- multilog は標準入力からログデータを読み込み,オプションでフィルタを通し,自動的にローテーションを処理して 1つ以上のログファイル内に結果を保存します.
~
より多くの情報は [[daemonntools>http://cr.yp.to/daemontools.html]] ホームページ上で見つける事ができます.
/var/qmail/control/badmailfromdir 以下に ''@hotmail.com'' というファイルを作成する事で,@hotmail.com を名乗るメールを全て拒否します.ただし,これだけの場合だと正規のサーバからのメールも拒否する事になる為,tcpserver のルールセットに ''=.hotmail.com:allow,GOODMAILFROM="@hotmail.com"'' を追加します.こうする事で,接続元のホスト名を調べ,ホスト名のドメイン部分が hotmail.com かどうかを判断し,hotmail.com だったら許可,それ以外なら拒否という動作を実現する事が可能になります.

*** ucspi-tcp [#o50df10a]
[[UCSPI>http://cr.yp.to/proto/ucspi.txt]] は UNIX クライアント/サーバプログラムインタフェースです.これは,プロセス間通信のへぷパープログラムの為のコマンドライン体系と環境変数仕様を定義します; これは,クライアントとサーバを書く事をより簡単にします.~
~
[[UCSPI-TCP>http://cr.yp.to/proto/ucspi-tcp.txt]] は TCP アプリケーションの為の UCSPI の別の実装です; これは,特定の環境変数とそれらの詳細について,より多くの詳細な指定をします.~
~
[[ucspi-tcp>http://cr.yp.to/ucspi-tcp.html]] は UCSPI-TCP を実装している [[djb>mailto:djb@cr.yp.to]] のパッケージです.~
** Tips [#kaa02903]
ここでは,antibadmail を使う際に注意しなければならない点を Tips として纏める事にします.

- tcpserver~
inetd ににた,シングルサービス.tcpserver の発動はコネクションポートをリスンし,到達した際に,UCSPI-TCP によって指定されるように tcpserver コマンドライン上で指定された引数,環境変数によってクライアントプログラムを起動します.

- tcprules~
tcpserver の為のアクセス制御ルールをコンパイルし cdb データベースを作成します.

- tcpclient~
クライアントヘルパープログラムです; UCSPI-TCP の仕様火に続き TCP プロトコルの為のネットワーククライアントの為のセットアップを行います.
*** ezmlm を使っている場合 [#k7905b0b]
メーリングリストマネージャとして ezmlm 及び ezmlm-idx を使っている場合,antibadmail を利用する際に注意する点があります.~
~
セキュアな pop3 と imap をサポートする為に必要な ucspi-tcp に有効な SSL/TLS 拡張パッチがあります.パッチは [[qmail-ldap>http://www.qmail-ldap.org/]] ホームページ上で見つける事が可能です.
----

** インストール [#q0437427]
Appendix 1 に従って,ucspi-tcp 及び daemontools のインストールを行って下さい.~
antibadmail は,RCPT TO に現れたメールアドレスから,メールボックスが存在するかをチェックします.ezmlm は,.qmail-[ML] という形式の .qmail ファイルを持ち,そのファイルは,symlink で各 ML 内のファイルを指しています.~
問題が出るのは,各 ML のディレクトリのパーミッションが,''700(drwx------)'' である事です.antibadmail は,qmaild の権限で動作しますので,qmaild からファイル名見える状態でなければなりません.~
~
cr.yp.to から qmail-1.03.tar.gz を取得します..www.qmail-ldap.org からパッチを取得します.両ファイルを展開し,qmail-1.03 ディレクトリへ移動します.ソースツリーにパッチを適用します.
 patch -p1 < /path/to/qmail-ldap-1.03-xxxxxxxx.patch

セットアップに反映する為,Makefile を編集して下さい.以下の値を変更する事が可能です:

- ALTQUEUE~
qmail-queue パッチを有効にすることで,ランタイム上の別の qmail-queue プログラムを選択する事が可能になります.

- BIGBROTHER~
For ISP that need to implement some surveillance method because of some beloved authoroties (like here in switzerland), you can enable a per address queue extra feature. See also the ~control/bigbrother file.

- BIGTODO~
big todo パッチを有効にします.通常は必要ありません.

- BIND_8_COMPAT~
コンパイル中に dns.c のビルドがなんの申告も無く失敗する場合,これを定義する事で助かる場合がります.MacOS X 10.3 で必要になります.

- CLEARTEXTPASSWORD (本当に悪いアイデア)~
ldap において,クリアテキストパスワードを許可します.通常,接頭部の無いパスワードは暗号化パスワードとして扱われます.

- DASH-EXT~
ダッシュ "-" 拡張メカニズムを有効にします.

- DATA_COMPRESS~
有効な場合,SMTP 上で DATA 圧縮が可能になります.ZLIB オプションが必要です.

- EXTERNAL_TODO~
外部の高性能な todo 処理を動作させます.高いメールインジェクションレートによる無分別な qmail シンドロームを回避します.

- IGNOREVERISIGN~
gTLD 上の DNS ワイルドキャラクタマッチを拒否します.ベリサインに感謝.

- QLDAP_CLUSTER~
クラスタリングコードをコンパイルします.注意: これはクラスタリングが有効(on)である事を意味している訳では無く,ただ,on にする事が出来る事を意味します.

- QMQP_COMPRESS~
Use the QMQP on the fly compression for cluster forwards.

- QUOTATRASH~
Trash を Quota 割当て計算に含めます (通常は含めません).

- SMTPEXECCHECK~
DOS/Windows で実行出来る形式及び不正な MIME アタッチメント検出を有効にします.

- LDAPLIBS~
ldap が必要とするライブラリで,通常は -lldap 及び -llber です.幾つかのシステム上では -lresolv が必要となります.コンパイル中に問題が生じた場合,ここを再確認して下さい.
OpenLDAP では一般的に次の通りになります.
 LDAPLIBS=-lldap -llber
NetScape の為には,次の様な何かが必要となるでしょう.
 LDAPLIBS=-L/usr/local/ldap/lib -lldap50 -llber50 -lpthread
 LDAPINCLUDES=-I/usr/local/ldap/include
PATH を調節する事を忘れないで下さい.

- LDAPINCLUDES~
ldap インクルードファイルで,少なくとも ldap.h 及び lber.h へのパスになります.コンパイル中に問題が生じた場合,ここを再確認して下さい.

- ZLIB~
ZLIB は -DDATA_COMPRESS 及び -DQMQP_COMPRESS の為に必要となります.zlib のインストールが標準でない場所にインストールされている場合,ZLIBINCLUDES を設定すべきです.

- TLS~
SSL 経由で SMTP 暗号化を有効にします.OpenSSL が必要となります.qmail-remote で TLS をサポートする為には -DTLS_REMOTE を使用します.また,qmail-smtpd で TLS をサポートする為に,-DTLS_SMTPD を使用します.

- TLSINCLUDES~
OpenSSL インクルードファイルへのパス.TLS を有効にしてコンパイルに問題があった場合はここを再確認して下さい.普段は: /usr/local/include 又は /usr/local/openssl/include になります.

- TLSLIBS~
OpenSSL ライブラリへのパス.普段は: /usr/local/lib 又は /usr/local/openssl/lib になります.
- OPENSSLBIN~
OpenSSL バイナリへのパス.普段は: /usr/sbin/openssl 又は /usr/local/openssl/bin/openssl になります.

- MAKE_NETSCAPE_WORK~
on にすると,Netscape のダウンロードプログレスバー及び qmail-pop3d バグフィックスを行います.

- AUTOMAILDIRMAKE~
auto-MAILdirmake-patch を有効にします.外部のスクリプトは必要ありません.

- AUTOHOMEDIRMAKE~
auto-HOMEdirmake-patch をコンパイルします.homedir を作成する為に ~/control/dirmaker にて外部スクリプトを指定する必要があります.

- SHADOWLIBS=-lcrypt & SHADOWOPTS=-DPW_SHADOW~
OpenBSD を除く殆どのシステム上で必要となります.幾つかのシステ (Linux, Solaris) でシステムユーザを使用する場合 -DSHADOWLIBS=-lcrypt が必要となります.
また,SHADOWOPTS は幾つかのシステム (solaris) 上で shadowlibs をサポートする為に必要となります.

- DEBUG~
デバッギングコードをコンパイルします.詳細は QLDAPINSTALL を見てください.
大抵の場合,ezmlm で作成したディレクトリのオーナは,そのユーザになっており,パーミッションが ''700(drwx------)'' の為,qmaild は .qmail-[ML] の先のファイルを見る事が出来ませんので,antibadmail は RCPT TO が正しくないと SMTP セッションを終了させてしまいます.~
~
qmail-ldap.h において ldap 属性名を変更する事が可能です.また,conf-* ファイルを確認して下さい.幾つかのシステム (少なくとも OpenBSD 3.4 以上) では,conf-spawn 又は conf-cc を修正する必要があります.
その場合,ディレクトリパーミッションを ''701(drwx-----x)'' とし,ディレクトリ以下のファイル名が見える状態にする事で問題を回避する事が可能です.

 echo 125 > /path/to/conf-spawn
    - OR -
 echo "cc -O2 -DFD_SETSIZE=4096" > /path/to/conf-cc

Makefile の修正及び conf-* の確認を行った後,qmail のユーザを追加しなければなりません.コンパイルの前にそれらを追加する事が必要で,コンパイル後はそれらの uid を変更する事は出来ません.INSTALL.ids のサンプルスクリプトを参照して下さい.~
~
さぁ,コンパイルの時間です:
 make setup check

TLS (SSL 暗号化) を使用する場合,証明書を作成する必要があります.証明書については OpenSSL のドキュメントを参照して下さい.

 make cert
  - or -
 make cert-req

----

** 設定例 [#r43eae1f]

*** 基本セットアップ [#u48ae204]

- control ファイルのセットアップ~
全てのファイルが /var/qmail/control にあります.

-- me~
メールサーバの完全修飾ドメイン名 (FQDN) を格納します.
 echo "mail.yourdomain.com" > me


-- rcpthosts~
qmail-ldap がメールを認める全てのドメインを,1行あたり1ドメインで格納します.
 echo "yourdomain.com" > rcpthosts
 echo "mail.yourdomain.com" >> rcpthosts
 echo "otherdomain.com" >> rcpthosts

-- locals~
qmail-ldap がメールをローカル配送する全てのドメインを格納します.rcpthosts と同じフォーマットです.

-- ldapbasedn~
ldap 検索の為の BaseDN.BaseDN についての詳細は OpenLDAP のドキュメントを参照して下さい.必須です.

-- ldapserver~
ldap サーバホスト名.冗長化の為に複数の ldap サーバを必要とする場合,1行あたり1ホストでリストして下さい.LDAP サーバがデフォルトポートの 389 以外で動作している場合はポート番号を付加する事が可能です.必須です.
 ldap.example.com:389
 ldap2.example.com:389

-- ldaplogin~
If you need to authentificate against your ldap server to retrieve the user information, this is the username to do so. Note: this is a ldap dn, not a unix username.~
デフォルト: NULL (認証しません)
 echo "cn=root, o=yourcorp, c=de" > ldaplogin

-- ldappassword~
ldaplogin を定義した際に必要となるユーザのパスワードです.クリアテキストですので,このファイルはオーナが root 且つモードを 600 にするべきです.~
デフォルト: NULL

-- ldaptimeout (20010101 から登場)~
この時間 (秒数) が経過したら,ldaplookup は "失敗" として扱われます.ldap サーバがハングしている時に役立ちます.デフォルト: 30秒

-- ldaplocaldelivery~
ldap ルックアップ時にエントリを見つけられなかった場合に,ローカルの passwd ファイルを参照します.qmail-lspawn 及び auth_pop に影響します.二値で 0 で off,1 で on になります.~
デフォルト: 1
 echo 0 > ldaplocaldelivery

-- ldaprebind~
有効 (1) ならば,qmail-ldap は ldap から userPassword 属性を検索せず,代わりに検索された DN と与えられたパスワード (auth_pop,auth_imap) を使用して,ldap サーバにバインドしようとします.これは ACL を一段と制限する事を可能とし,ユーザ自身を除いた誰もが ldap ディレクトリからのパスワード検索を実行する権利を必要としません.~
デフォルト: 0 (off)

-- ldapobjectclass (20010101 から登場)~
ldap ルックアップはにここで与えられた objectClass を持っているエントリに制限されます.他の目的にも ldap ディレクトリを使用し,特殊な objectClass (例えば qmailuser) を持つものだけがメールアカウントを持つような場合に有益です.
 echo "qmailuser" > ldapobjectclass

注意: 20010101 は壊れていて,効果を発揮しませんでした.

-- ldapuid~
仮想のユーザマップが作られるシステムユーザ id.システムアカウントを持たずにユーザを ldap ディレクトリを必要とするのと同じくらい多く追加する事が可能で,単一のシステムユーザ id にマップされて作ることが可能です - それはここで定義されます.

-- ldapgid~
全ての仮想ユーザマップが作られるシステムグループ id.

-- ldapdefaultdotmode~
.qmail ファイルのデフォルトの解釈

 both (LDAP 属性 "deliveryProgramPath" と .qmail ファイルの両方を使用できます)
 dotonly (.qmail ファイルのみ利用出来ます)
 ldaponly (LDAP 属性 "deliveryProgramPath" と .qmail ファイルの両方が利用できません)
 ldapwithprog (LDAP 属性 "deliveryProgramPath" が利用出来,.qmail ファイルは利用できません)

デフォルト: ldaponly~
注意: もちろん non-ldap 配送 (ldaplocaldelivery が有効ならば /etc/passwd で検索されたユーザ情報) は行われます.

-- ldapmessagestore~
The default prefix for paths in mailmessagestore without leading / If you set this to /maildisk/ for example, the ldap attributes

 mailmessagestore: joe/
 mailmessagestore: /maildisk/joe/

are equivalent.~
~
デフォルト: NULL

-- defaultquotasize~

新たに配送される全てのメッセージを送信者に差し戻す事になるまで,ユーザが利用出来るディスク空間のデフォルトの最大値.サイズはバイト単位で表記します.ユーザの mailquotasize 属性によって上書きされます.デフォルト: NULL (サイズ制限無し)

 echo "1000000" > defaultquotasize

上記の場合: 1000000 byte (1MB) のサイズ.~
quotawarining の設定を忘れないで下さい.忘れてしまっていた場合,全ての quota による警告メッセージは発行されません.



~
----
Hiroyuki Seino  http://www.seichan.org/ http://www.seichan.org/blog/~
Today:&counter(today); Yesterday:&counter(yesterday); All:&counter;