2000/10/14
2000/11/15
この文書はコピーフリー・無保証です。
ここで想定している環境は次のものです。
メールサーバーの不正リレー対策は次のように行います。
おおまかな手順は次のようになります
上記以外にDNSへバーチャルドメインを追加する必要があります。
ここでは TurboLinux-6.1 Server 上の
sendmail-8.9.3
sendmail-8.11.1
で行っていますが、基本的にどのOSでも同じようにできます。
chk-rcpt.m4 を取得する
http://www.sendmail.org/~ca/email/rules/alpha/chk-rcpt.m4
chk-rcpt.m4 は (sendmaildir)/cf/hack にインストールしておきます。
(Windows等で転送した場合は改行コードに注意)
----- config.mc divert(-1) include(`/usr/lib/sendmail-cf/m4/cf.m4') OSTYPE(`linux')dnl define(`confDEF_USER_ID',``8:12'') define(`ALIAS_FILE',`/etc/aliases') define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl undefine(`UUCP_RELAY')dnl undefine(`BITNET_RELAY') dnl FEATURE(always_add_domain) FEATURE(masquerade_entire_domain) FEATURE(masquerade_envelope) EXPOSED_USER('root daemon') FEATURE(`use_cw_file')dnl FEATURE(`local_procmail')dnl FEATURE(`nouucp')dnl FEATURE(`mailertable', `hash -o /etc/mail/mailertable')dnl FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable')dnl FEATURE(`access_db', `hash -o /etc/mail/access')dnl FEATURE(`relay_entire_domain') dnl ## following 3 lines are chk-rcpt.m4 define(`_RELAY_ACCESS_FROM_') define(`_RELAY_ACCESS_FROM_DOMAIN_') HACK(chk-rcpt) dnl ## MAILER(smtp)dnl MAILER(procmail)dnl ----- config.mc end
config.mc を 作成したあと、以後の構築が面倒なので、そこにある Makefile に追加してしまいましょう。
----- Makefile ALL= generic-bsd4.4.cf generic-hpux9.cf generic-hpux10.cf \ generic-osf1.cf generic-solaris2.cf \ generic-sunos4.1.cf generic-ultrix4.cf \ cs-hpux9.cf cs-osf1.cf cs-solaris2.cf \ cs-sunos4.1.cf cs-ultrix4.cf \ s2k-osf1.cf s2k-ultrix4.cf \ chez.cs.cf huginn.cs.cf mail.cs.cf mail.eecs.cf mailspool.cs.cf \ python.cs.cf ucbarpa.cf ucbvax.cf vangogh.cs.cf knecht.cf \ config.mc <--- このへん ----- Makefile end
(sendmaildir)/cf/cf で make コマンドを入力すれば作成されます。
m4 マクロは記述に間違いがあると思わぬところでエラーになるので
*.mc については十分に確認しましょう。
アクセス制限のためのファイルは /etc/mail/access のハッシュDB ( /etc/mail/access.db ) です。
ようにするには、各ドメインに対して RELAY を記述すればそうなります。
REJECT を記述すればそのドメインからのアクセスは拒否されるようになります。
----- /etc/mail/access 3bit.co.jp RELAY tukusi.ne.jp RELAY spammer.domain REJECT <-- 拒否したい場合 ----- /etc/mail/access end
アクセス制限については
http://www.sendmail.org/tips/relaying.html
に有用な情報が記述されています。
バーチャルユーザー登録のためのファイルは/etc/mail/virtusertable のハッシュDB ( /etc/mail/virtusertable.db )です。
このファイルは一度しかパーズされないので、間接参照はできないので注意してください
( info->webmaster->root とはできないので info->root, webmaster->root とする)
----- /etc/mail/virtusertable info@tukusi.ne.jp webmaster@tukusi.ne.jp info@3bit.co.jp sasaki@3bit.co.jp # # webmaster@tukusi.ne.jp sasaki@tukusi.ne.jp とすると # webmaster -> sasaki は通るが # info -> sasaki にはならない ----- /etc/mail/virtusertable end
ここでは、ホスト名をマスクしてメールアドレスを与えるので
受け取るホスト名として、ドメイン部分を sendmail.cw に与えてやる必要があります。
----- /etc/sendmail.cw tukusi.ne.jp 3bit.co.jp ----- /etc/sendmail.cw end
定義ファイル sendmail.cf を作成したあとの作業は、ドメインやユーザーを追加するたびに必要となります。
これらをまとめると、次の手順になります。
ドメイン追加時
ユーザー追加時
sendmail-8.10.x 以降の場合 check_rcpt ルールはデフォルトで存在しますので chk-rcpt.m4 を取得する必要はありません。
sendmail-8.10.x 以降は cf/README にあるように、定義ファイルの名前と位置がかなり変更されていることに注意してください。
----- sendmail-8.11.1/cf/README part +----------------+ | FILE LOCATIONS | +----------------+ sendmail 8.9 has introduced a new configuration directory for sendmail related files, /etc/mail. The new files available for sendmail 8.9 -- the class {R} /etc/mail/relay-domains and the access database /etc/mail/access -- take advantage of this new directory. Beginning with 8.10, all files will use this directory by default (some options may be set by OSTYPE() files). This new directory should help to restore uniformity to sendmail's file locations. Below is a table of some of the common changes: Old filename New filename ------------ ------------ /etc/bitdomain /etc/mail/bitdomain /etc/domaintable /etc/mail/domaintable /etc/genericstable /etc/mail/genericstable /etc/uudomain /etc/mail/uudomain /etc/virtusertable /etc/mail/virtusertable /etc/userdb /etc/mail/userdb /etc/aliases /etc/mail/aliases /etc/sendmail/aliases /etc/mail/aliases /etc/ucbmail/aliases /etc/mail/aliases /usr/adm/sendmail/aliases /etc/mail/aliases /usr/lib/aliases /etc/mail/aliases /usr/lib/mail/aliases /etc/mail/aliases /usr/ucblib/aliases /etc/mail/aliases /etc/sendmail.cw /etc/mail/local-host-names /etc/mail/sendmail.cw /etc/mail/local-host-names /etc/sendmail/sendmail.cw /etc/mail/local-host-names /etc/sendmail.ct /etc/mail/trusted-users /etc/sendmail.oE /etc/mail/error-header /etc/sendmail.hf /etc/mail/helpfile /etc/mail/sendmail.hf /etc/mail/helpfile /usr/ucblib/sendmail.hf /etc/mail/helpfile /etc/ucbmail/sendmail.hf /etc/mail/helpfile /usr/lib/sendmail.hf /etc/mail/helpfile /usr/share/lib/sendmail.hf /etc/mail/helpfile /usr/share/misc/sendmail.hf /etc/mail/helpfile /share/misc/sendmail.hf /etc/mail/helpfile /etc/service.switch /etc/mail/service.switch /etc/sendmail.st /etc/mail/statistics /etc/mail/sendmail.st /etc/mail/statistics /etc/mailer/sendmail.st /etc/mail/statistics /etc/sendmail/sendmail.st /etc/mail/statistics /usr/lib/sendmail.st /etc/mail/statistics /usr/ucblib/sendmail.st /etc/mail/statistics Note that all of these paths actually use a new m4 macro MAIL_SETTINGS_DIR to create the pathnames. The default value of this variable is `/etc/mail/'. If you set this macro to a different value, you MUST include a trailing slash. ----- sendmail-8.11.1/cf/README part end
これらの位置が変更されていることを十分把握した上で、config.mc を下記のように定義します。
aliases の位置など、define()マクロによって変更できます。
(下記の例ではコメントにしています)
なお
MAILER(smtp)dnl
MAILER(procmail)dnl
は procmail が先にあると、エラーとなりますので注意してください。
----- config.mc OSTYPE(`linux')dnl DOMAIN(`generic')dnl dnl ## dnl ## use old aliases location dnl ## define(`confDEF_USER_ID',``8:12'') dnl ## define(`ALIAS_FILE',`/etc/aliases')dnl dnl define(`confPRIVACY_FLAGS', `authwarnings,needmailhelo,noexpn,novrfy')dnl dnl ## define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl undefine(`UUCP_RELAY')dnl undefine(`BITNET_RELAY') dnl FEATURE(`always_add_domain') FEATURE(`masquerade_entire_domain') FEATURE(`masquerade_envelope') EXPOSED_USER('root daemon') FEATURE(`local_procmail')dnl dnl ## sendmail.cw --> /etc/mail/local-host-names FEATURE(`use_cw_file')dnl dnl ## FEATURE(`nouucp', `reject')dnl FEATURE(`mailertable', `hash -o /etc/mail/mailertable')dnl FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable')dnl FEATURE(`access_db', `hash -o /etc/mail/access')dnl FEATURE(`relay_local_from') dnl FEATURE(`promiscuous_relay') dnl FEATURE(`relay_entire_domain') dnl ## following 2 line appere since sendmail-8.10.x FEATURE(`virtuser_entire_domain') FEATURE(`relay_mail_from', `domain') dnl ## MAILER(smtp)dnl MAILER(procmail)dnl ----- config.mc
上記の定義で、ローカルIPと考えられるアドレスからの接続はリレーの対象となり、他からの接続は access に定義されていないものはリレーされないようになります。
なおこの例では access への記述は domain での定義も有効にしています。
もしdomainによるenvelope fromでの許可をしない場合は
FEATURE(`relay_mail_from')
と定義しておけばドメイン名ベースのリレーは行われません。
ここで想定されている環境は次のようなものです。
この例は FreeBSD-3.4R + sendmail-8.11.1 上でのものです。
----- config.mc divert(0)dnl OSTYPE(bsd4.4)dnl DOMAIN(generic)dnl FEATURE(`nullclient', `mail.3bit.co.jp.') MASQUERADE_AS(`3bit.co.jp') FEATURE(`always_add_domain') FEATURE(`masquerade_entire_domain') FEATURE(`masquerade_envelope') EXPOSED_USER(`root daemon news usenet postmaster') FEATURE(`access_db', `hash -o /etc/mail/access') FEATURE(`relay_mail_from', `domain') MAILER(local)dnl MAILER(smtp)dnl ----- config.mc
注意点は2つです。
2001/01/09