梅本肇 / ume@mahoroba.org
を実行します。 FreeBSDをmake installworldすると元に戻ってしまいますので、chmod u+s /usr/libexec/mail.local
.if ${.CURDIR} == "/usr/src/libexec/mail.local"
BINMODE=4555
INSTALLFLAGS=-fschg
.endif
と書いておくと良いでしょう。
2)の場合は、sendmail.cfでMlocalのF=にSを追加します。CFをお使いなら、
LOCAL_MAILER_FLAG_ADD='S'を加えます。 どうしてもfetchmailのmda指定を使用したいなど特別の事情がない限り、できるだけ2)を選択しましょう。
cf/READMEの日本語訳プロジェクト - cfプロジェクト(仮称)
URL: http://www.isoternet.org/~y-koga/cf/
SENDMAIL_MC=/etc/mail/myconfig.mc書いておくと、図1のように作業できるようになります。
加えて、accessやmailertableなどのsendmailが使用するマップファイルをmakemapしたり、sendmailの再起動ができたりとか、非常に便利になっています。(表1)
図1 /etc/mail/でのsendmail.cfの生成 # cd /etc/mail # make /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/ /usr/share/sendmail/cf/m4/cf.m4 /etc/mail/myconfig.mc > /etc/mail/myconfig.cf # make install install -c -m 444 /etc/mail/myconfig.cf /etc/mail/sendmail.cf
4.3-RELEASEではこの機能が使えることでしょう。
表1 /etc/mail/Makefileのターゲット ターゲット 内容 all cf、マップ、aliases を生成します cf .mcファイルから.cfファイルを生成します maps 各種機能用マップを生成します aliases エリアスファイルを生成します install .cfファイルを/etc/mail/sendmail.cfとしてインストールします start /etc/defaults/rc.confまたは/etc/rc.confで設定されているフラグを使用してsendmailを起動します stop sendmailを停止します restart sendmailを再起動します
リスト1 freebsd.mc divert(-1) # # Copyright (c) 1983 Eric P. Allman # Copyright (c) 1988, 1993 # The Regents of the University of California. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by the University of # California, Berkeley and its contributors. # 4. Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # # これは 4.4 BSD をベースとするシステム一般用の設定です。 # カスタマイズする場合は、あなたの環境に見合った適切な名称のファイルに # コピーし、そちらを変更して下さい。 # # .mc ファイルの最良のドキュメントは # /usr/share/sendmail/cf/README または # /usr/src/contrib/sendmail/cf/README です。 # divert(0) VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.8 2001/03/06 02:12:59 gshapiro Exp $') OSTYPE(bsd4.4) DOMAIN(generic) FEATURE(access_db, `hash -o /etc/mail/access') FEATURE(blacklist_recipients) FEATURE(local_lmtp) FEATURE(mailertable, `hash -o /etc/mail/mailertable') FEATURE(relay_based_on_MX) FEATURE(virtusertable, `hash -o /etc/mail/virtusertable') dnl リアルタイムブラックホールリストを利用する場合はコメントを外し dnl ます (推奨!)。情報は http://maps.vix.com/rbl/ にあります。 dnl FEATURE(dnsbl) dnl RBL 用のあなた独自のリジェクトメッセージを設定したい場合、こちらを dnl 代わりに有効にします。 dnl FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}') dnl その他の DNS ベースなブラックホールリスト dnl ----------------------------------------- dnl MAPS リアルタイム SPAM スットパー (RSS): http://mail-abuse.org/rss/ dnl FEATURE(dnsbl, `relays.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected; see http://mail-abuse.org/cgi-bin/nph-rss?" $&{client_addr}') dnl MAPS ダイアルアップユーザリスト (DUL): http://maps.vix.com/dul/ dnl FEATURE(dnsbl, `dialups.mail-abuse.org', `"550 Mail from dial-up rejected; see http://mail-abuse.org/dul/enduser.htm"') dnl ORBS も DNS ベースなブラックホールリストの多くを提供しています。 dnl http://www.orbs.org/usingindex.html を参照。 dnl ダイアルアップユーザはコメントを外しこれを適切に定義しましょう。 dnl define(`SMART_HOST', `your.isp.mail.server') dnl デフォルトである /etc/mail/local-host-names の位置を変更したい場合 dnl は、最初の行のコメントを外し、次の行をコメントにします。 dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw') define(`confCW_FILE', `-o /etc/mail/local-host-names') dnl IPv4 に加えて IPv6 でもメイルを受信したい場合は、以下の行の両方と dnl ものコメントを外します。 dnl DAEMON_OPTIONS(`Name=IPv4, Family=inet') dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6') define(`confMAX_MIME_HEADER_LENGTH', `256/128') define(`confNO_RCPT_ACTION', `add-to-undisclosed') define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy') MAILER(local) MAILER(smtp)
LOCAL_MAILER_FLAG_ADD='z' LOCAL_MAILER_ARGS='mail.local -l'を指定するのと等価です。 FreeBSDのローカル配信エージェントである
@foo.org %1@example.comのように書くこともできます。
To: undisclosed-recipients:;を付加します。
これまで見てきましたように、freebsd.mcでは、標準で/etc/mail/access、
図2 makemapの実行 # makemap hash /etc/mail/mailertable < /etc/mail/mailertable
LOCAL_DOMAIN(`example.com')CFのACCEPT_LOWER=に相当するマクロはcfにはありません。 等価な処理をさせたい場合は、LOCAL_RULE_0を使って直接ルールを埋め込みます。 リスト2にACCEPT_LOWER=yes相当の例を挙げておきます。
リスト2 ACCEPT_LOWER=yesの代用 LOCAL_RULE_0 R$* < @ $* .$m. > $* $1 < @ $m. > $3($mはホスト名のドメイン部分を保持している定義マクロです。 もちろん、ドメイン名を明に指定しても構いません。)
FROM_ADDRESS='$m'を指定していることでしょう。 cfでは、
MASQUERADE_AS(`$m')と書きます。 ただし、REWRITE_GENERIC_FROM=yes相当の動きをし、最初から From:にFQDNが指定されていた場合も、ホスト名が消えるよう書き換えられてしまいます。 あらかじめFrom:が付いていた場合は書き換えないようにするには、
FEATURE(`masquerade_envelope')
FEATURE(`limited_masquerade')も併せて指定すると良いでしょう。 このオプションを指定すると、MASQUERADE_DOMAIN()またはMASQUERADE_DOMAIN_FILE()で指定されたドメインのみが書き換えられるようになります。
FEATURE(`allmasquerade')も併せて指定します。
define(`confTRUSTED_USERS', `uucp majordom')のように指定します。 あるいは、
define(`confCT_FILE', `-o /etc/mail/trusted-users')を指定して、/etc/mail/trusted-usersに信頼できるユーザ記述するようにすることもできます。 ちなみに、以前はこのファイルはsendmail.ctという名称でしたが、変更になっています。
DIRECT_DELIVER_DOMAINS='example.com'のような設定をしていると思います。 cfだとSMART_HOSTを使います。
DEFAULT_RELAY='smtp:gateway.example.com'
define(`SMART_HOST', `gateway.example.com')を指定することで、ローカル宛以外のメイルはgateway.example.com宛に送られるようになります。
example.com smtp:example.comというように書いてあげれば良いです。 ここで、第1フィールドは転送したいドメイン名です。 第2フィールドは転送先の指定で、メイラ:ホスト名のペアです。 上記例の1行目はexample.comにのみマッチしそのサブドメインはマッチしません。 サブドメインを含めて全てマッチさせたい場合は2行目も必要です。
.example.com smtp:%1.example.com
example.com smtp:[mail.example.com]のようにホスト名を[]で囲んで記述します。
リスト3 LOCAL_NET_CONFIGによる記述例 LOCAL_NET_CONFIG R$* < @ $* example.com. > $* $#smtp $@ $2example.com. $: $1 < @ $2example.com. > $3
FEATURE(`nocanonify', `canonify_hosts')を入れておきましょう。
FEATURE(`accept_unresolvable_domains')を加えて、エンベロープFROMのチェックを行わないようにする必要があります。 これはCFでUSE_SENDER_DNS_CHECK=noを指定するのと等価です。
FEATURE(`accept_unqualified_senders')を指定します。 CFでNEED_SENDER_DOMAIN=noとCHECK_FROM_FQDN=noを指定するのに相当します。
RELAY_DOMAIN(`example.com')RELAY_DOMAINには、ドメイン名やIPアドレスを指定することができます。
リスト4 Message-Id:不正メイルへの対処 LOCAL_RULESETS HMessage-Id: $>CheckMessageId SCheckMessageId R< $+ @ $+ > $@ OK R$* $#discard $: discard
pwcheck_method: pwcheckと書いた/usr/local/lib/sasl/Sendmail.confを用意しましょう。
オフィシャルドメイン名をconfDOMAIN_NAMEで明示的に指定している場合は注意して下さい。 hostnameコマンドが返すホスト名と異なる名前を指定している場合、saslpasswdコマンドでユーザを登録する際に、-uオプションで同じホスト名を指定してあげる必要があります。*7)
図3 SASLパスワードの登録 ume@mille:125# saslpasswd ume Password: ******** Again (for verification): ******** (パスワードはエコーバックされません)
図4 SASL登録ユーザの一覧表示 ume@mille:127# sasldblistusers user: ume realm: mille.mahoroba.org mech: DIGEST-MD5 user: ume realm: mille.mahoroba.org mech: PLAIN user: ume realm: mille.mahoroba.org mech: CRAM-MD5
さあ、sendmailを作り直しましょう。図5のようにmakeを行います。
リスト5 SASL用フラグ SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL -D_FFR_UNSAFE_SASL SENDMAIL_LDFLAGS=-L/usr/local/lib SENDMAIL_LDADD=-lsasl
図5 SASL対応sendmailの作成 # cd /usr/src/lib/libsmutil # make obj && make depend && make # cd /usr/src/usr.sbin/sendmail # make obj && make depend && make && make install
では、それぞれの意味を説明していきましょう。
リスト6 SMTP AUTHのための.mcファイルの設定 define(`confDONT_BLAME_SENDMAIL', `GroupReadableSASLFile') define(`confRUN_AS_USER', `root:mail') define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5') TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5')
図6 sasldbのパーミッション -rw-r----- 1 cyrus mail 16384 Feb 9 00:48 /usr/local/etc/sasldb.db
これで、SMTP AUTHで認証されればリレーが許可されるようになります。
図7 EHLOに対する応答 ume@mille:147> telnet localhost smtp Trying ::1... Connected to localhost. Escape character is '^]'. 220 mille.mahoroba.org ESMTP Sendmail 8.11.3/8.11.3/mille; Sun, 4 Mar 2001 03:47:34 +0900 (JST) EHLO localhost 250-mille.mahoroba.org Hello ume@localhost [::1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-SIZE 250-DSN 250-ONEX 250-ETRN 250-XUSR 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 <----- 使用できる認証メカニズム 250 HELP
(setq mew-smtp-auth t)と設定すると、SMTP AUTHを喋るようになります。 SMTP AUTHで認証するユーザ名がローカルのログイン名と異なる場合は、
(setq mew-smtp-user "ユーザ名")で設定します。 また、認証に使用したい認証メカニズムをmew-smtp-auth-listで設定できるようになっています。
図8 MewでSMTP AUTHを使う ![]()
define(`_REC_AUTH_', `_REC_FULL_AUTH_')を加えると、どの認証メカニズムを使って誰が認証されたのか記録されるようになります。 図9の例はSMTP AUTHを使用した場合のReceived:ヘッダです。 CRAM-MD5を使用して認証されていることがお分かりだと思います。
ただし、_REC_AUTH_はドキュメントに書かれていない内部変数なので、将来的に使えるかどうかはわかりません。きちんと公開仕様に従うなら、confRECEIVED_HEADERを使うべきでしょう。(リスト7)
図9 認証時のReceived:ヘッダ Received: from mille.mahoroba.org (ume@mille.mahoroba.org [2001:200:301:0:202:2dff:fe0a:6bee]) (authenticated as ume with CRAM-MD5) <----- CRAM-MD5で認証された by peace.mahoroba.org (8.11.3/8.11.3/peace) with ESMTP/inet6 id f23KAE373219 for <ume@FreeBSD.org>; Sun, 4 Mar 2001 05:10:14 +0900 (JST) (envelope-from ume@mahoroba.org)
リスト7 confRECEIVED_HEADERを使用した設定例 define(`confRECEIVED_HEADER', `$?sfrom $s $.$?_($?s$|from $.$_) $.$?{auth_type}(authenticated$?{auth_ssf} (${auth_ssf} bits)$.) $.by $j ($v/$Z)$?r with $r$.$?{daemon_family}/${daemon_family}$. id $i$?{tls_version} (using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify})$.$?u for $u; $|; $.$b$?g (envelope-from $g)$.')
DAEMON_OPTIONS(`Name=MTA-v4, Family=inet')と書いてあげると、どちらもlistenするようになります。 ちなみに、なぜデフォルトでそうしてないかというと、IPv4のみのkernelだとsendmailが動かなくなるためです。
DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6')
define(`_REC_BY_', `$.by $j ($v/$Z)$?r with $r$.$?{daemon_family}/${daemon_family}$. id $i$?{tls_version}')と書いておきましょう。 ただし_REC_BY_は_REC_AUTH_と同様にドキュメント化されていませんので注意して下さい。
| CF-3.7Wpl2-smtpcheck.patch1とCF-3.7Wpl2-smtpcheck.patch2の2つのパッチが出ています。 | |
| FreeBSDでは/usr/share/sendmail/以下にあります。 | |
| RFC2033 - Local Mail Transfer Protocol | |
| 筆者は使わないようにしています。 | |
| RFC2554 - SMTP Service Extension for Authentication | |
| ports / packagesからインストールしていれば、ユーザcyrusの権限が必要です。 あるいはroot。 | |
| FQDNをそのまま指定している場合は問題ありませんが、$w.$mのように定義マクロを使用していると、sasldbをうまく検索できなくなるようです。 | |
| sendmail-8.12.0.Beta5では標準になりましたので-D_FFR_UNSAFE_SASLは必要ありません。 また、GroupReadableSASLFileはGroupReadableSASLDBFileに変更になっています。 | |
| FreeBSDのsendmailは-DSTARTTLS付でコンパイルされれていますので設定を入れるだけで使用できます。 | |
|
http://asg.web.cmu.edu/cyrus/ 執筆時点での最新は2.0.12です。 安定版である1.6.24がports/mail/cyrus/に、2.0.12がports/mail/cyrus-imapd/にあります。 ちなみに、ports/mail/cyrus-imapd/の方はIPv6対応してあります。 | |
|
RFC1734 - POP3 AUTHentication command RFC2195 - IMAP/POP AUTHorize Extension for Simple Challenge/Response | |
| 筆者はとある事情でcyrus-imapd 2.0.Xを導入しましたが、日頃APOPを使用していますので、APOPが使えないと知り愕然としました。 生パスワードは絶対に使いたくないので、作者にお願いしてMewでPOP AUTHを使えるようにして頂きました。:-) |