15-4. CF ツ−ルとSPAM対策 (1) SPAM対策の概要と設定 '98/09 ================================================================================ 98年9月記述。SPAMが実際的な問題になってきた。最低限SPAMメ−ルの踏台に されないように、メ−ルリレ−の sendmail.cf を変更する。メ−ル爆弾には対応しない。 ================================================================================ * 概要 万能 sendmail.cf を作成していた時、 メ−ルの配送と転送の制御が案外おおざっぱなも のだと感じていた。これ以外は全てどこどこへとか、 相手の DNS の MX レコ−ドを見て ともかく送れとか。どうも送信元も見る部分がないようであった。オ−プンな時代のイン タ−ネットを感じさせるといえば、そうだが。このオ−プンさの故に、SPAMというメ −ルを許すことになった。SPAMの基本的な問題は、自メ−ルシステムが外部から来た メ−ルを外部にリレ−(中継)することである。SPAMはその中継メ−ルがとんでもな い数の商用メ−ルであったり、MMF と呼ばれるマルチ講の何百という勧誘メ−ルであった りするわけである。 自分が発信した訳ではないのだが、自サイトのメ−ルシステムが悪用されて、結果的にあ なたが発信したと同じことになるのである。この問題はもはや "他山の石" ではない。検 索でSPAMと引いて見れば分かる。今年、98年になってからでも大学を中心にだいぶ 被害にあっていることが分かる。残念なことに、企業サイトの情報はほとんど出ていない。 しかし知らないだけか、意図的に被害を隠しているかで、大学と同じように相当被害は広 がっていると思われる。ファイアウォ−ルは自社サイト内部での問題だが、SPAMは他 人さんに被害を及ぼす。対策の放置は、怠慢としかいいようがない。 SPAMと似たようなので、メ−ル爆弾というのもある。これは自社サイトに向けられた 大量のメ−ルである。最悪の場合、メ−ルシステムが対応できなくなり、マシンがクラッ シュしてしまう。 ただ対応には sendmail.cf で特定のメ−ルアドレスをフィルタリング するしかない。被害を受けてからの対策しかとりようがない。とりあえず社内のユ−ザに は、あまりおかしなサイトを見に行ったり、メ−ルを送らないように注意しておくことだ。 ウェブのサイトを喜んで見ていると、 cookie により勝手にマシンの情報をいろいろ取ら れることになる。常には Netscape Navigator などブラウザの cookie は無効にしておい た方が無難かも知れない。 SPAMやメ−ル爆弾がきたら、発信元に抗議すればそれで問題は解決していくのでない かと考えるのは実態を知らない人の話である。メ−ルの発信元を偽造するのは昔から行わ れてきたことで、技術的にそう難しいことではない。それに1年ぐらい前から無料でメ− ルアドレスを配布するところが出てきた。このサ−ビスを複数利用し、メ−ルを転がした り、またメ−ル転送サ−ビスも使ったりと、容易に発信元が分からないようにできるよう になった。現金受け渡しの刑事ドラマばりである。純粋な技術的発展やサ−ビスと裏腹に いろいろ考える輩はいるものである。別冊宝島なんか読むと面白い。インタ−ネットでは SPAM問題に詳しいサイトは次の所がある。各自参考にして頂きたい。 http://www.ayamura.org/ SPAMの現状と対策 06/05/1998。目を通しておくこと。 http://www.sweet.lang.esys.tsukuba.ac.jp/security/sendmail.html * CF ツ−ルの利用 CF は Wide Project が作ったもので、 和文でドキュメントが書かれているのがうれしい。 本書ではこれまで使わなかったが、万能 sendmail.cf をSPAM対策するのは、 これま た大変なので、CF を使ってみることにした。予想に反して案外簡単だった。 先ずはメ− ルクライアントの INDY で試してみたが、とりたてて問題はなかった。From: アドレスを 少し調整しただけだった。しかしメ−ルリレ−の設定では少々てこずった。このような場 合のダイレクトな説明がなかったので、いろいろやってみるしかなかった。メ−ルサ−バ の設定までは今回やっていない。別に現状のままでも何も問題がないからである。これは 読者の宿題としておこう。 CF ツ−ルのメリットとして、どのマシンの sendmail.cf でも、またどのバ−ジョンのも のでも作ることができることがある。これはとても便利である。まあ、できて当然なのだ が。しかしそれにしても出来た sendmail.cf の長いこと。千行ある。 万能 sendmail.cf はたかだか二百行である。最後に少し注意点。 万能 sendmail.cf はロ−カルのクライア ントのユ−ザを /etc/local_names で指定したが、CF の sendmail.cf に該当する部分は ない。それに制御ファイルの xxx.def は自分で、 必要なとこだけ記述しても構わないみ たいである。 * 現状のメ−ルシステムの確認 / メ−ルリレ− /← DNS MX 配送 ------- / Solaris |hostA| sendmail 8.9.1-BIND 2.5.1 ------- 万能 sendmail.cf | .3 \ -------*-------*------ \ ------------ nix.co.jj 202.241.128.0 | \ | \ ← 静的配送 /etc/hosts | ↓ | メ−ルサ−バ ―――― メ−ルクライアント ------- ------- ------- |hostG| |hostB| SunOS 4.1.4 |hostC| INDY IRIX 5.3 ------- ------- ------- | | .1 | .3 -----------*---------*---------------------*------- 192.168.1.0 sendmail 8.8.5-HOSTS sendmail 8.6.9 オリジナル 万能 sendmail.cf 万能 sendmail.cf [ 対策後の状態 ] ----------------------------------------------------------------------------- |hostname hostA |hostname hostC | |=====================================|=====================================| | sendmail 8.9.1-BIND named 制御 | sendmail 8.9.1-HOSTS /etc/hosts 制御| |-------------------------------------|-------------------------------------| |hostA.def |hostC.def | | | | | CF_TYPE=R8V8 | CF_TYPE=R8V8 | | OS_TYPE=solaris2.5 | OS_TYPE=irix5 | | MX_SENDMAIL=yes | MX_SENDMAIL=no | | MY_DOMAIN='nix.co.jj' | MY_DOMAIN='nix.co.jj' | | OFFICIAL_NAME='mail.nix.co.jj' | OFFICIAL_NAME='hostC.nix.co.jj' | | STATIC_ROUTE_FILE=relay.txt | FROM_ADDRESS='nix.co.jj' | | DIRECT_DELIVER_DOMAINS=all | DIRECT_DELIVER_DOMAINS=none | | MAIL_RELAY_RESTRICTION=yes | DEFAULT_RELAY='smtp:hostB' | | LOCAL_HOST_IPADDR=192.168.1.1 | | | ALLOW_RECIPIENT_DOMAIN=nix.co.jj | | ALLOW_RELAY_FROM=nix.co.jj << 注.STATIC_ROUTE_FILE= relay.txt | | ALLOW_RELAY_TO=nix.co.jj このようにイコ−ルの前後に | | ブランクを開けてはならない。 | | relay.txt | | --------------------------- | | |GW: relay:[192.168.1.1] << [] は MX レコ−ドを見ず指定アドレスへ直接、| | |DOM: nix.co.jj メ−ルをアドレス変換せず:relay 転送せよ。 | | | |-------------------------------------|-------------------------------------| |/etc/hosts |/etc/hosts sendmail 8.9.1 にしたため| | | ↓追加 | | 202.241.128.3 hostA mail.nix.co.jj | 192.168.1.3 hostC hostC.nix.co.jj | | 192.168.1.1 hostB | 192.168.1.1 hostB | | | | |-------------------------------------|-------------------------------------| |/etc/named.hosts | | | | /etc/resolv.conf はメ−ルには関係 | | $ORIGIN nix.co.jj. | ない。WWWアクセスで使われる。 | | IN SOA ns.nix.co.jj. .. ( | | | IN MX 0 mail.nix.co.jj. | | | hostA IN A 202.241.128.3 | | | mail IN A 202.241.128.3 | | | www IN CNAME hostA.nix.co.jj. | | ----------------------------------------------------------------------------- * CF ツ−ルのセットアップ hostC の INDY で全てのマシンの sendmail.cf を、CF ツ−ルで作成することにする。CF ツ−ルは perl を使うということなので、とりあえず新しい perl をインスト−ルしてお く。perl は 4.x 代と 5.x 代ではだいぶ変わり、フリ−ソフトも 5.x 代を使うのが多く なってきているので、古い perl は入れ替えた方がよい。5.x 代はオブジェクト指向にな ったとのこと。5.003 バ−ジョンはバグがあるとのことである。 % perl -v バ−ジョンの確認です。 This is perl, version 5.004_04 built for IP22-irix % cd /usr/local/source % ftp ftp.iij.ad.jp ftp> cd /pub/network/sendmail ftp> get CF-3.7W.tar.gz これは 433894 byte だった。 % zcat CF-3.7W.tar.gz | tar xvf - % cd CF-3.7W; ls -F ChangeLog Master/ Samples/ VERSION support/ Copyright README Standards/ contrib/ Makefile README.jpn Tools/ doc/ % ls Standards nmtc.cf null-v6.def sendmail-v1.in sendmail-v8.cf nmtc.def null-v6.in sendmail-v5.cf sendmail-v8.def nmtc.in null-v7.cf sendmail-v5.def sendmail-v8.in null-v1.cf null-v7.def sendmail-v5.in smtpcheck-v7.cf null-v1.def null-v7.in sendmail-v6.cf smtpcheck-v7.def null-v1.in null-v8.cf sendmail-v6.def smtpcheck-v7.in null-v5.cf null-v8.def sendmail-v6.in smtpcheck-v8.cf null-v5.def null-v8.in sendmail-v7.cf smtpcheck-v8.def null-v5.in sendmail-v1.cf sendmail-v7.def smtpcheck-v8.in null-v6.cf sendmail-v1.def sendmail-v7.in マニュアルには、インスト−ルを % make cleantools、% make tools、% make samplesと やるようにとちょっと見、書いてあるが別にやる必要はない。よく読むとやらんでもいい と書いてある。初めから上記のファイルが展開すると入っている。何かおかしくなったら ア−カイブ CF-3.7W.tar.gz から展開し直した方がいい。 上記の xxx.cf が sendmail.cf の雛型である。sendmail-8.9.x 用のは sendmail-v8.def で、これから sendmail-v8.cf が作られる。sendmail-v8.def を上のディレクトリにもっ てきて、何もいじらずにおいて % make sendmail-v8.cf とやると同じものができる。 し かし上記 xxx.def をよく見ると、CF_TYPE だけしか有効な記述はなく、 後は長々とある が全てコメントになっている。 % ls -F doc 98-0001-05.jis.txt FAQ.prec MANUAL.jpn CheckMTC.cf FAQ.rpath MailerFlags EXTEND.jpn FAQ.shell NetNews/ FAQ.8bit FILES.jpn RulesetNumbers FAQ.AW GlobalOptions antispam.jpn FAQ.error1 INTRO bitnet-wide-gateway.txt FAQ.filter INTRO.jpn check_file FAQ.ident LOCALHACK.jpn cyrus.doc.jpn FAQ.lce LocalhackChar procmail.doc.jpn 先ずドキュメントはREADME.jpn をちらっと見て、INTRO.jpn を読む。 これで設定できな けば詳細ドキュメント MANUAL.jpn を参照する。これはだいぶ長いぞ。 [EOF] まで 3091 行もあった。ファイルはJISコ−ドで記述されているので、 INDY で見るには次のよう にする。% jistoeuc README.jpn [ 使い方の基本 ] % cd /usr/local/source/CF-3.7W temp.def を作成する。 << 何とか .def というファイルならなんでもいい。 % make temp.cf << temp.def から temp.cf を作成する。 % cp temp.cf /etc/sendmail.cf << 所定のマシンにコピ−する。 * CF ツ−ルの確認 `22/04 % ftp ftp.kyoto.wide.ad.jp または ftp://ftp.iij.ad.jp/pub/network/CF ftp> cd /mail/CF -rw-r--r-- 1 admin 2000 272734 Apr 21 1997 CF-3.5Wpl7.tar.gz -rw-r--r-- 1 admin 2000 310867 Dec 25 1997 CF-3.6W.tar.gz -rw-r--r-- 1 admin 2000 433894 Aug 4 1998 CF-3.7W.tar.gz -rw-r--r-- 1 admin 2000 473754 Aug 19 1998 CF-3.7Wpl1.tar.gz -rw-r--r-- 1 admin 2000 1899 Sep 25 1998 CF-3.7Wpl2-smtpcheck.patch1 -rw-r--r-- 1 admin 2000 3689 Oct 5 1998 CF-3.7Wpl2-smtpcheck.patch2 -rw-r--r-- 1 admin 2000 442518 Sep 24 1998 CF-3.7Wpl2.tar.gz CF-3.7Wpl2.tar.gz に patch1, patch2 をあてること。この時点からバ−ジョンアップさ れていない。開発およびメンテナンスはこれで止まった。 難解な sendmail.cf を作成す るのに大きく貢献してくれたフリ−ソフトだった。しかし、新しい sendmail に導入され たユ−ザ認証、暗号化には CF は対応してないが、そうでなければまだまだ使える。 * 参考 「Software Design」 2001/04, P.102〜111 > セキュアなメ−ルサ−バ構築−sendmail 8.11 を使う。ユ−ザ認証の SMTP AUTH、認証 処理の Cyrus SASL。sendmail 自体の暗号化 STARTTLS。m4 で sendmail.cf を作成。 「Software Design」 2000/02, P.18〜27 あやむら氏による記事。 > sendmail によるメ−ルサ−バの運用管理。sendmail 付属の cf ツ−ルにとても詳しい。 http://www.imasy.or.jp/~ume/published/sendmail_auth/ > 近頃の sendmail 事情、梅本肇、FreeBSD PRESS No.4 の記事。 sendmail 付属の "cf" 作成ツ−ルについて。SMTP AUTH 認証について。 http://home7.highway.ne.jp/dayan/tips/ > SMTP AUTH でどこででもメ−ル送信。ちょっと sendmail の記事のおわりに、おまけで sendmail 付属の "cf" ツ−ルの記事も少しある。参考になったバイ。 http://home.jp.FreeBSD.org/~koga/cf 2002/10 再確認 > cf プロジェクト(仮称)、2001/08/14、sendmail-8.11.6 の cf/README 日本語訳がある。 http://www.ki.nu/software/cf は koga から持ってきて、見易くしたもの。 (2) メ−ルリレ−でのSPAM対策 '98/09 * SPAM対策の sendmail.cf を作成する |× |○ [ 踏台にされないように設定する ] 外 ↓外 ↓内 -------------- 外部から内、即ち nix.co.jj ドメイン宛のメ−ルは通す。 |SPAM対応| 外部から外部へのメ−ルは拒否するようにする。 | sendmail | -------------- 内 ↑外 |○ だいぶ手こずりました。設定できるまで1週間もかかってしまった。これぐらいならまだ 早いか?。結局 MANUAL.jp をプリントして、 家で寝そべって一字一句読むハメになった。 「UNIX MAGAZINE」'97/09、P.54〜"電子メ−ル爆弾とSPAMに対抗する方法" によると、 sendmail.cf 内の check_compat, check_relay, check_mail, check_rcpt ル−チンで簡 単に対抗できるようになったとある。対応バ−ジョンは sendmail 8.8.x からである。正 直いって MANUAL.jp を読んでもSPAM対策の xxx.def の書き方はよく分からない。 「UNIX MAGAZINE」の記事から、外部から外部ヘの中継を拒否するのは、check_rcpt らし いことが窺えた。それに xxx.def でSPAM対応にするには、 MAIL_RELAY_RESTRICTION を yes にとりあえずすること。これはデフォルトでそうなっているのだが。 そして yes にすると check_mail と check_rcpt が有効になるということ。これら断片的な情報から 関係するパラメ−タを設定してみることにした。 MAIL_RELAY_RESTRICTION=yes デフォルト、check_mail, rcpt が有効になる。 check_mail は LOCAL_HOST_IPADDR, _DOMAIN を見る。 check_rcpt は ALLOW_RECIPIENT_DOMAIN、ALLOW_RELAY_FROM, _TO を見る。 DIRECT_DELIVER_DOMAINS=all までの記述では、hostB のメ−ルサ−バから hostA のメ− ルリレ−へのメ−ル転送が拒否されてしまった。 MAIL_RELAY_RESTRICTION がデフォルト で yes になっているためだと思い、 とりあえず LOCAL_HOST_IPADDR に hostB のIPア ドレスを入れてみた。これでメ−ルは hostA に転送され、 外に出て行けるようになった。 多分 MAIL_RELAY_RESTRICTION=no にすれば、 LOCAL_HOST_IPADDR は設定する必要はない のだろう。それと LOCAL_HOST_DOMAIN は無指定だが、別に問題はないみたい。 しかし外から内ヘのメ−ルは、この設定では拒否されてしまった。今度は check_rcpt の 部分が多分効いているのだと思って、 ALLOW_XXX に自ドメインの nix.co.jj を記入して みた。何とかこれでうまく行っているみたいである。これはメ−ルのログを見て確認する わけだが。多分他にも細々した設定があるのかも知れないが、とりあえずこれでOKであ る。設定の1つに、 hostA 自身からのメ−ルも netmaster@nix.co.jj というアドレスに するため FROM_ADDRESS='nix.co.jj' も加えておいた方がいいかも知れない。 * 設定 % cd /usr/local/source/CF-3.7W hostA.def --------------------------------- |CF_TYPE=R8V8 |OS_TYPE=solaris2.5 << Master/OSTYPE に solaris2.5 はある。 |MX_SENDMAIL=yes << named を参照する sendmail だと宣言する。 |MY_DOMAIN='nix.co.jj' |OFFICIAL_NAME='mail.nix.co.jj' << このホストの FQDN 名。 | |STATIC_ROUTE_FILE=relay.txt << nix.co.jj ドメイン宛のメ−ルは MX レコ− |DIRECT_DELIVER_DOMAINS=all ドを見ずに直接 192.168.1.1 に転送させる。 | それ以外の全てのメ−ルは MX を見て転送。 |MAIL_RELAY_RESTRICTION=yes |LOCAL_HOST_IPADDR=192.168.1.1 << ここまでの設定だと、メ−ルを出すのはいい | が、入って来れない。メ−ルリレ−が受け付 |ALLOW_RECIPIENT_DOMAIN=nix.co.jj けを拒否してしまう。ALLOW_XXX も設定する |ALLOW_RELAY_FROM=nix.co.jj と、自ドメイン宛のメ−ルは通るようになる。 |ALLOW_RELAY_TO=nix.co.jj relay.txt --------------------------- |GW: relay:[192.168.1.1] << ホスト名指定で hostBでもいいが、IPアド |DOM: nix.co.jj レス指定の方がよりセキュリティ的によい。 % make hostA.cf << hostA.def から hostA.cf を作成する。 MASTERDIR=Master TOOLDIR=Tools \ Tools/Configure hostA.def > hostA.cf.tmp mv -f hostA.cf.tmp hostA.cf % ls -al -rw-r--r-- 1 root sys 32944 .. hostA.cf -rw-r--r-- 1 root sys 27476 .. hostA.def % ftp 202.241.128.3 << ftp で hostA に転送。その前に hostA の現 > put hostA.cf /etc/sendmail.cf 状の sendmail.cf をバックアップしておく。 # ps -e | grep sendmail << ここから hostA の Solaris 2.5.1 での操作。 13321 ? 0:02 sendmail sendmail をいったんキルする。 # kill 13321 # newaliases << 必ずやること。 /etc/mail/aliases: 3 aliases, longest 9 bytes, 48 bytes total # /etc/rc2.d/S88sendmail start << sendmail を再起動する。さてこれでいいかな。 * xxx.def ファイルと sendmail.cf のパラメ−タの関係 sendmail.cf の設定を少し変更するにも、上記のように生成元となるファイル xxx.defを 変更し、% make xxx.def と毎度やらないといけない。 テストでいろいろメ−ルサ−バの 挙動を調べてみたいような場合、これはめんどうである。 それで、diff コマンドで両者 のファイルを比較し、xxx.def の変更が xxx.cf にどう反映されるのか調べてみた。結果、 以下のように単純に対応しているだけだと分かった。これで /etc/sendmail.cf ファイル を、直接いじることができる。 xxx.def | xxx.cf ---------------------------------|------------------------- CLIENT_HOST_IPADDR=192.168.1.1 | C{ClientIP} 192.168.1.1 CLIENT_FROM_DOMAIN=nix.co.jj | C{ClientFrom} nix.co.jj ALLOW_RELAY_FROM=nix.co.jj | C{RelayFrom} nix.co.jj ALLOW_RELAY_TO=nix.co.jj | C{RelayTo} nix.co.jj LOCAL_HOST_IPADDR=192.168.1.1 | C{LocalIP} 192.168.1.1 relay.txt の relay:[192.168.1.1] | DArelay:[192.168.1.1] * 参考:jistoeuc antispam.jpn でマニュアルを表示 -------------------------------------------------------------------------------- |不正転送を防止するための速攻(既存の sendmail.cf をそのまま使う)修正方法 | |1. sendmail 8.8.x か sendmail 8.9.x を使っていることを確かめる。 | |2. ftp://ftp.kyoto.wide.ad.jp/pub/mail/CF/CF-3.7W.tar.gz を入手する(1998/7/19現 | 在は、pre4)。 | |3. cd CF-3.7Wpre;cp Standards/smtpcheck-v8.def . する(sendmail 8.8.x を使ってい | る人は smtpcheck-v7.def を使うこと)。もちろん、sendmail-v[78].def を元にして、 | 全体を作り直してもよい。MAIL_RELAY_RESTRICTION=yes を確認(デフォルトで yes)。 | |4. [smtpcheck] から後の部分を自分のところの状況に応じて設定する。詳細は後述。 | |5. make smtpcheck-v8.cf | を実行する(3 で smtpcheck-v7.def を選んだひとは、make smtpcheck-v7.cf)。 | |6. できあがった smtpcheck-v8.cf を、/etc/sendmail.cf の末尾にくっつける。 | |7. check_file を自分の環境に合わせて修正し、sendmail -bt < check_file で、動作 | 確認をおこなう。 | |8. sendmail の再起動。 | |9. しばらく syslog をチェックして様子をみる。 | |* * * * * | |4. のところの詳細説明 | |a. 使用中の sendmail.cf のままでテストモードを起動し(sendmail -bt)、 以下のよう | になる場合には、WITH_OLD_CF=yes にする。 | > 3 <> | rewrite: ruleset 3 input: < > | rewrite: ruleset 3 returns: @ 以下のようになる場合は問題なし。 | > 3 <> | rewrite: ruleset 3 input: < > | rewrite: ruleset 3 returns: < @ > その他の場合は要相談。 | |b. 組織内のホストが含まれるように LOCAL_HOST_IPADDR と LOCAL_HOST_DOMAIN を設定 | する。(さらに、CLIENT_HOST_IPADDR と CLIENT_HOST_DOMAIN を設定し、組織内から | 発信されるメールの制限を強化する方法もある。) | |c. 様々なメールアドレスを、そのホストのユーザ宛のメールとして受信するようにして | いる場合には、ALLOW_RECIPIENT_DOMAIN にそのアドレスを列挙する。 | |d. 他組織の backup MX を担当している場合には、ALLOW_RELAY_TO にその組織のアドレ | スを列挙する。この代りに LOWER_MX_OK=yes としてDNSの設定に依存する方法もある。 | |e. 組織外から、そのホストをメールサーバにして利用することがある場合は、 | ROAM_HOST_* に発信側ホストのアドレスを記述し、ROAM_USERSにそのような形態でメ | ールを発信するユーザのリストを定義する。ただし、このような定義は、アドレス偽 | 装による SPAM の中継を許す余地を残してしまうことになるので注意。 | |詳しくは、doc/MANUAL.jp をみてね。motonori@wide.ad.jp (3) SPAM対策の確認 '98/09 * チェックしてくれるサイトの利用 [ チェックサイトその1 ] http://www.sweet.lang.esys.tsukuba.ac.jp/security/sendmail.html のペ−ジで、外部 のメ−ルを外部へ中継するかどうかのテストができる。 メ−ルサ−バのアドレスを FQDN で指定するだけでできる。 本書では www.nix.co.jj か mail.nix.co.jj のどちらかを指 定する。くれぐれもこのチェックサイトを悪用したり、いたずらで他のサイトをテストし たりしないように。小生からもお願いしておきます。 ----------------------------------------------------------------------- |メール中継のテスト | | | | * 差出人: postmaster@sweet.lang.esys.tsukuba.ac.jp | | * 受取人: relaychk@sweet.lang.esys.tsukuba.ac.jp | | * SMTP ホスト: www.nix.co.jj | | * SMTP クライアント: sweet.lang.esys.tsukuba.ac.jp | | | | ------------------------------------------------------------ | |トランスクリプト | | | | | | 220 www.nix.co.jj ESMTP Sendmail 8.9.1/3.7W; Thu, 17 Sep | | 1998 18:18:50 +0900 (JST) | | 250 www.nix.co.jj Hello sweet.lang.esys.tsukuba.ac.jp | | [130.158.124.185], pleased to meet you | | 250 ... Sender ok | | 553 ... Relay operation rejected << はねているOK。 | | 503 Need RCPT (recipient) | | 500 Command unrecognized: "From: | | postmaster@sweet.lang.esys.tsukuba.ac.jp" | ----------------------------------------------------------------------- [ hostA での syslog の記録 ] メ−ルリレ−のホスト hostA で syslog を見てみる。 Solaris の syslog は /var/log/ にある。# tail /var/log/syslog で新しいログが表示される。 Sep 16 13:40:19 : ruleset=check_rcpt, arg1=, relay=sweet.lang.esys.tsukuba.ac.jp [130.158.124.185], reject=553 ... Relay operation rejected << はねているOK。 Sep 16 13:40:19 : from=, proto=SMTP, relay=sweet.lang.esys.tsukuba.ac.jp [130.158.124.185] [ チェックサイトその2 ] http://maps.vix.com/tsi/ar-test.html も自ドメインのメ−ルサ−バを FQDN で指定す るとSPAM対策のチェックをしてくれる。"IS my mailer vulnerable ?" のとこをクリ ックして mail.nix.co.jj などと入れる。しかし上のチェックサイトでは対策OKだった のが、NGと出てしまった。よく英文を読んでいないので分からないが、多分内部メ−ル のメ−ルサ−バをリレ−可にしてあるのが、チェックにひかかったのでないかと思う。 * メ−ルを送ってのセルフチェック チェック方法は、ダイアルアップのメ−ルアドレスにメ−ルを送り、あらかじめ設定した メ−ルの自動転送により、また自分にメ−ルを返すというものである。メ−ルリレ−での sendmail.cf、元をたどれば hostA.def がちゃんと設定されていれば、自ドメイン宛のメ −ルは通さなければならない。しかし hostA.def のデフォルト設定により、 自ドメイン 宛のメ−ルも拒否されてしまう。 これは hostA.def 記述の試行錯誤において出てくる現 象である。ともかく、自ドメイン宛のメ−ルが通るかどうか、ログを見てきちんと判断し たい。ただ単にメ−ルが返って来ないのでは、何が原因なのかはっきり分からない。 送った。hostC から katou@nix.co.jj から ikken@tcp-ip.or.jj へ Sep 16 13:35:13 : from=, msgid=<1998..@hostC.nix.co.jj>, relay=hostB [192.168.1.1] Sep 16 13:35:16 : to=, mailer=smtp, relay=mx.tcp-ip.or.jj. [157.14.130.4], stat=Sent (NAA15657 Message accepted for delivery) 返った。ikken@tcp-ip.or.jj から katou@nix.co.jj へ Sep 16 13:36:34 : ruleset=check_rcpt, arg1=, はねられている。 relay=root@mx.tcp-ip.or.jj [157.14.130.4], ↓ reject=553 ... Relay operation rejected Sep 16 13:36:34 : from=, proto=ESMTP, relay=root@mx.tcp-ip.or.jj [157.14.130.4] * 疑問 拒否したメ−ルは一体どうなるのか?。相手の sendmail のキュ−に溜まって、時間が経 ったら何べんでもメ−ルを再送してくるような気がするが、ログファイルを見ても、その 後送って来る様子はない。メ−ルリレ−の sendmail は、メ−ルを実際は破棄しているの かな?。それならそれで結構なことなのだが。ちょっと気になったので。いや、再送して きているはずである。さて、その再送する時間間隔と、最後諦めるまでの日数は幾つだっ たか。sendmail でのデフォルトは5日とか7日間ぐらいのはずである。 ともかくその最 後になるとメ−ルを送信した人に、エラ−メ−ルとして返すようになっているはずである。 * その後の追記 `02/08/11 にも書き直し追加 SPAMをチェックしてくれるサイトがその後増えている。何やらメ−リングリストに入 ろうとしたら問題があるとか出たという輩まで現われてきた。国内のサイトでチェックし てくれるところがあって、試しにやって見たら危険!、対策は当社になんてメッセ−ジが 出たという。さらにほかっておくとブラックリストにのるかも知れませんなんて。中途半 端なテストでこのように不安感を煽るのは困ったものである。チェックは実際何をやって いるかちゃんと公表している大学サイトでやった方が無難である。そのブラックリストと やらは、 http://maps.vix.com/rbl/ と http://www.dorkslayers.com/orbs/ の中にある。 dorkslayers はその後 http://www.orbs.org/ に変わっている。 アクセスしない方が無難かも?。またSPAMメ−ルがきても、やめてなんて返事は出さ ないこと。そんなことでやめてくれるなら相手さんは最初からSPAMなんかやらないだ ろう。sendmail-8.9.1 にはこれらブラックリストを見て、 メ−ルをはねるように設定で きるらしい。sendmail-8.9.1 を展開したソ−スを見たら RELEASE_NOTES に次のように文 章がありました。と言うことはブラックリストのサイトは決しておかしなサイトでないと いうことか。善意の警告をしてくれるサイトということなのか。 CONFIG: new FEATURE(rbl) Turns on rejection of hosts found in the Realtime Blackhole List. You can specify the RBL name server to contact by specifying it as an optional argument. The default is rbl.maps.vix.com. For details, see http://maps.vix.com/rbl/. `02/06 ぐらいのこと。筑波のSPAMチェック・サイトの反応がない。 そんでもってど こか分からんサイトから英文で何やら警告めいたメ−ルが来る。不安を煽られる。そろそ ろ qmail への移行を考えないかんかと思い、qmail のサイトを見ていたら、WIDE プロジ ェクトでSPAMチェックしてくれる所がありました。すぐに、メ−ルサ−バのホスト名 FQDN を入れてチェックしてみました。だいじょうぶでした。 SPAMの警告メ−ルと思 ったのは、いかにもここから http://www.orbs.org/ のような感じだったが、よく英文を 読んだら、ORBS( Open Relay Blocking System )のブラックリストにのったらどうします。 対策は内へという話だった。 http://www.kyoto.wide.ad.jp/mta/relaycheck.html > メ−ルサ−バのホストの FQDN を入れて、SPAMメ−ルをはじくかテストできる。 IPアドレスでもいい。"不正転送を拒否します" と日本語で出て問題なかった。 http://maps.vix.com/vgi-bin/lookup RBL( Realtime Blockhole List ) > MAPS( Mail Abuse Preventation System )、ブラックリストに登録されているか調 べる。IPアドレスを入れる。 ここでは does not apper on the RBL と出て問題 なかった。 http://www.orbs.org/verify_1.html ORBS( Open Relay Blocking System ) > ブラックリストのデ−タベ−スに登録されているか調べる。IPアドレスを入れる。 This server is in the ORBS ... と出た。 これにより登録されていると解釈する。 デ−タベ−スから削除してもらうには、 SPAM対策した後に closed_1.html で 依頼する。勝手に登録したのだから、勝手に削除してくれればいいものを。 http://www.nanet.co.jp/rlytest/ > SPAMと第三者中継(Third-Party Relay)問題。 (有)長崎ネットワ−クサ−ビス。 IPアドレスを入れる。不正な中継をする。 そして ORBS database 登録されてい ます。VIX realtime block list 登録されていませんと出た。 http://www.unicom.com/sw/ の rlytest というSPAMチェックのスクリプト。 > ダウンロ−ドして、% rlytest mail.nix.co.jj でチェックする。 relay accepted と出た。Perl は 5.004 以上を使うこと。チェックをかけるとメ−ルも来て問題が あるよ、安全なメ−ルサ−バにする情報は http://maps.vix.com/tsi/ を見てねと 書いてあった。rlytest スクリプトで $Dflt_domain = "nix.co.jj"; とかする。 以上は上記までで設定した sendmail.cf に対してSPAMチェックした結果である。 そ して一時的に qmail に変更して、qmail でもSPAMチェックしてみた。 チェックサイ トは MAPS、ORBS、長崎のチェックサイトなど幾つかある。 またSPAMチェックと一口 に言っても、簡便なチェックからシビアなレベルまである。中でも ORBS が一番シビアで、 厳し過ぎて実際的でないという話もネット上の議論で目にした。小生も実際調べてみてそ う感じる。しかも登録されているかどうかの結果も分かりにくい。こりゃ ORBS は気にし なくてもいいのでないか。MAPS の方さえ大丈夫ならSPAMは問題ないぞ。 ついでに長 崎ネットワ−クサ−ビスのこと。 ここはどうも rlytest を先ずやって問題ありとなった ら MAPS と ORBS に登録されているか調べているようだ。信用してもよさそうである。 [ rlytest のこと ] rlytest % rlytest www.nix.co.jj ---------------------------------- | |#!/usr/local/bin/perl rlytest: relay accepted - final response |### $Dflt_domain = "example.com"; |$Dflt_domain = "nix.co.jj"; % rlytest usage: rlytest [-f sender_addr] [-u recip_addr] [-c comment] [-t timeout] target _host (4) SPAM対策とメ−ル転送の落し穴 `21/10〜12 * forward によるメ−ル転送機能の確認 Windows パソコンで tomo と ikken という POP ユ−ザがあるとする。実験のため同じパ ソコンで tomo さんは Netscape Messenger を、 ikken さんは Outlook Express とする。 それぞれで SMTP と POP のIPアドレスをメ−ルサ−バ、ここでは 192.168.1.1 を入れ る。メ−ル転送の設定は tomo ユ−ザに仕掛けることにする。そのためメ−ルサ−バのホ ストに /usr/people/tomo ディレクトリを作る。/etc/passwd ファイルの tomo エントリ は /usr/people/tomo となっているとする。POP でメ−ルを取るだけなら tomo ディレク トリはなくて関係ない。 hostB# echo "\tomo, katou" > .forward << tomo でロッグインして .forward hostB# ls -al /usr/people/tomo ファイルを作る。 -rw-r--r-- 1 tomo user .. .forward .forward 別ユ−ザ katou が tomo にメ−ルを送る --> tomo と ikken に届く。 -------------- ikken が tomo にメ−ルを送る --> tomo だけに届く。ikken には届 |\tomo, ikken かない。無視される。 * forward によるメ−ル転送の落し穴 早い話が、これまでの sendmail.cf の設定では forward 指定で、外のメ−ルアドレスに はメ−ルを転送することができない。sendmail.cf のSPAM設定で reject されてしま うのである。外から来たメ−ル、 例えば ikken2@clubaa.com から tomo@nix.co.jj 宛に きたメ−ルを ikken@tcp-ip.or.jj に転送する。ikken2@clubaa.com は朝日新聞のクラブ A&Aという、フリ−のWebメ−ルである。外から何でもいいからメ−ルを送らないこ とにはテストができない。毎度電話して、ダイアルアップIP接続して、メ−ルを送ると いうのもたまらない。ということで、Webメ−ルをここでは使ってみた。 ………… |hostA'| 仮想IPアドレス hostB /usr/people/tomo/~forward ………… ------------------------------- |.3 nix.co.jj 202.241.128.0 |\tomo, ikken@tcp-ip.or.jj -------*--------*------------------ | メ−ルリレ− hostA,G,B は | ------- sendmail 8.9.1-BIND Solaris 2.6 |.2 |hostA| CF 作成 sendmail.cf SPAM対策 ------- ------- WWW/DNS |hostG|.2 |.1 メ−ルサ−バ | |------*-------- ------- sendmail 8.8.5-HOSTS ------- 192.168.2.0 |hostB| 万能 sendmail.cf |.2 ------- InterScan VirusWall | |.1 -----------------*--------------------------*---- | |.3 --------- POP ユ−ザ ------- メ−ルクライアント katou |Windows| tomo と ikken INDY |hostC| sendmail 8.9.1-HOSTS --------- ------- CF 作成 sendmail.cf * 謎解き メ−ルサ−バからメ−ルリレ−へ25番ポ−トに telnet してテスト、直接メ−ルを送る ことにより sendmail の挙動を調べることにする。つまり hostB から hostA のsendmail に直接 telnet でアクセスして、どのようにSPAMチェックが効いているか調べてみる。 テストAの状態が、現状の実際のアクセスということになる。 注目すべき点は hostB の /etc/hosts での hostA のIPアドレスが 192.168.2.1 であるということ。 これは DMZ 構成にした時に、元 202.241.128.3 だったのを変更したのである。 これによりメ−ルサ −バは仮想IPアドレスのメ−ルリレ−のホストにアクセスするようになっている。そし てテストAの結果を見ると、メ−ルリレ−は helo 192.168.1.1 の応答に対し、メ−ルサ −バのホストを何を思ったか hostG.nix.co.jj [202.241.128.2] と解釈している。 この おかしなIPアドレスのため、メ−ルの受け付けを拒否されたのである。 もうこれで、何がいけなかったのかお分かりであろう。sendmail.cf については問題なか った。DMZ 構成による hostB の /etc/hosts ファイルでの hostA のIPアドレスの変更 が災いしていた。なぜ、変更したのか今になっては分からない。業者さんに教えてもらっ たのを、そのまま鵜呑みにしたのかも知れない。テストBでは転送メ−ルは問題なく通っ たので、hostB の /etc/hosts を元に戻した、202.241.128.3 hostA にした。これでしば らく様子を見てみたが、特に問題はなさそうである。外ヘの転送メ−ル拒否ということに 対する対策は、この他にも1、2考えられる。 例えば FireWall-1 で hostB のIPアド レスを HIDE の 202.241.128.2 指定にするとか。 これで多分テストAでも通るようにな るだろう。果たして、そのような設定が本来的に正しいものかどうか。議論の余地がある。 hostB /etc/hosts hostB /etc/sendmail.cf ----------------------- ------------------------------------- |#202.241.128.3 hostA |# [ 2. メ−ルサ−バのホスト用 ] |192.168.2.1 hostA |R$*<@$+>$* $#$M $@hostA $:$1<@$2>$3 hostA /etc/named.hosts hostA /etc/sendmail.cf hostA /etc/hosts ------------------------- ---------------------- ------------------ |hostG IN A 202.241.128.2 |Djmail.nix.co.jj |192.168.1.1 hostB テストA[ これは拒否された ] hostB# telnet 192.168.2.1 25 220 mail.nix.co.jj ESMTP Sendmail 8.9.1/3.7W; Mon, 10 Dec 2001 17:29:27 +0900 (JST) helo 192.168.1.1 250 mail.nix.co.jj Hello hostG.nix.co.jj [202.241.128.2], pleased to meet you mail from: ikken2@clubaa.com ※ ここの hostG は DNS /etc/named.hostsの 250 ikken2@clubaa.com... Sender ok hostG IN A 202.241.128.2 を見ている。 rcpt to: ikken@tcp-ip.or.jj 553 ikken@tcp-ip.or.jj... Relay operation rejected !!! data 503 Need RCPT (recipient) . 500 Command unrecognized: "." quit 221 mail.nix.co.jj closing connection ※ mail.nix.co.jj は hostA の sendmail.cf Connection closed by foreign host. の Djmail.nix.co.jj を見ている。 テストB[ こっちは通過した ] hostB# telnet 202.241.128.3 25 220 mail.nix.co.jj ESMTP Sendmail 8.9.1/3.7W; Mon, 10 Dec 2001 17:31:21 +0900 (JST) helo 192.168.1.1 250 mail.nix.co.jj Hello hostB [192.168.1.1], pleased to meet you mail from: ikken2@clubaa.com ※ ここの hostB は hostA の /etc/hosts の 250 ikken2@clubaa.com... Sender ok 192.168.1.1 hostB エントリを見ている。 rcpt to: ikken@tcp-ip.or.jj 250 ikken@tcp-ip.or.jj... Recipient ok data 354 Enter mail, end with "." on a line by itself 222 . 250 RAA07657 Message accepted for delivery quit 221 mail.nix.co.jj closing connection Connection closed by foreign host. * 転送メ−ルを Reject したエラ−メ−ル hostA の /etc/mail/aliases では "Postmaster: katou, MAILER-DAEMON: katou" として いる。hostB の /etc/mail/aliases では "katou:katou@hostC" となっている。そのため katou へエラ−メ−ルが届くことになる。なぜSPAMチェックにひっかかるのか。フォ ワ−ドから出た ikken@tcp-ip.or.jj 宛へのメ−ル、 この From: メ−ルアドレスが外部 だから、ikken2@clubaa.com だからいけないのか。次はそのエラ−メ−ルである。 ------------------------------------------------------------------------------ |From: Mail Delivery Subsystem |To: postmaster@nix.co.jj |---------------------------------------------- ヘッダ−部全部表示のめぼ |From MAILER-DAEMON Fri Oct 12 15:58:49 2001 しいとこだけ記しています。 |Return-Path: <> |Received: from hostB.nix.co.jj by hostC.nix.co.jj for |Received: from localhost by hostB.nix.co.jj |From: Mailer-Daemon@nix.co.jj (Mail Delivery Subsystem) |Subject: Postmaster notify: User unknown |To: postmaster@nix.co.jj | |The original message was received at Fri, from localhost | | ----- The following addresses had permanent fatal errors ----- | | | ----- Transcript of session follows ----- |... while talking to hostA: |>>> RCPT To: |<<< 553 ... Relay operation rejected |550 ... User unknown | | ----- Original message follows ----- | |Return-Path: |Received: from localhost by hostB.nix.co.jj |From: Mailer-Daemon (Mail Delivery Subsystem) |Subject: Returned mail: User unknown |To: | |The original message was received at Fri, .. from localhost | | ----- The following addresses had permanent fatal errors ----- |ikken@tcp-ip.or.jj | (expanded from: ) | | ----- Transcript of session follows ----- |... while talking to hostA: |>>> RCPT To: |<<< 553 ... Relay operation rejected |550 ikken@tcp-ip.or.jj... User unknown | | ----- Original message follows ----- | |Received: from hostA.nix.co.jj by hostB.nix.co.jj |Received: from XXX.commtouch.co.jp by hostA.nix.co.jj for |Received: from xxx by XXX.commtouch.co.jp for tomo@nix.co.jj |From: ikken2@clubaa.com |To: tomo@nix.co.jj | |こんにちは (5) CF ツ−ルをメ−ルクライアントで使う -------------------------------------------------------------------------------- クライアントのホストは hostC、INDY IRIX 5.3、sendmail はオリジナルで 8.6.9、万能 sendmail.cf 使用。これを 8.9.1 にして、CF の sendmail.cf に変更してみる。 -------------------------------------------------------------------------------- * 先ず sendmail-8.9.1 をインスト−ルする % cd sendmail-8.9.1 % ls -F BuildTools/ Makefile contrib/ makemap/ src/ FAQ README doc/ praliases/ test/ KNOWNBUGS RELEASE_NOTES mail.local/ rmail/ LICENSE cf/ mailstats/ smrsh/ % cd src % sh Build nocompile Configuration: os=IRIX, rel=5.3, rbase=5, rroot=5.3, arch=IP22, sfx= Using M4=/sbin/m4 Creating obj.IRIX.5.3.IP22 using ../BuildTools/OS/IRIX.5.x Making dependencies in obj.IRIX.5.3.IP22 cc -M -I. -DNDBM -DNIS -DIRIX5 *.c >> Makefile | version.c: Making in obj.IRIX.5.3.IP22 % cd obj.IRIX.5.3.IP22 % pwd /usr/local/source/sendmail-8.9.1/src/obj.IRIX.5.3.IP22 Makefile 注意すべきところ ------------------------------- |CC= cc |SHELL= /bin/sh |O= -O 0%) |MAPDEF= -DNDBM -DNAMED_BIND=0 << named は参照しない。/etc/hosts で解決する。 |LIBS= -lmld -lmalloc % make sendmail << 最後にワ−ニングが出たが、特に問題ないみたい。 % make install % ls -al /usr/lib/send* -r-sr-xr-x 1 root sys 825004 .. /usr/lib/sendmail << インスト−ル分。 -rwsr-xr-x 1 root sys 357760 .. /usr/lib/sendmail-8.6.9 << 前のをとっておく。 /etc/sendmail.cf << sendmail.cf.8.6.9 で前のをとっておく。 ------------------------------ |DDnix.co.jj |Dj$w << Dj$w.$D だった。ここだけ変更した。 |DMtcp | |# [ メ−ルクライアント用 ] |FL/etc/local_names |DRhostB << メ−ルサ−バのホスト名。hostB です。 | | |# [ 3.メ−ルクライアント用 ] |R$=L $#local $:$1 |R$+ $#$M $@$R $:$1 /etc/hosts ↓これ追加しておくこと。 -------------------------------------- |192.168.1.3 hostC hostC.nix.co.jj 注.hostC.nix.co.jj を記述しないと、newaliases コマンドを入れるとワ−ニングのた め1分ほどかかってしまう。これは何かおかしいというサインである。 WARNING: local host name (hostC) is not qualified; fix $j in config file [ sendmail の再起動 ] sendmail をいったんキルして、newaliases をやり、% /etc/rc2.d/S50mail start で再 起動する。 % newaliases << ワ−ニングはここでは気にしなくてよい。 Warning: .cf file is out of date: sendmail 8.9.1 supports version 8, .cf file is WARNING: Group writable directory /var/spool/mqueue version 0 /etc/aliases: line 19: MAILER-DAEMON... cannot alias non-local names | /etc/aliases: 0 aliases, longest 0 bytes, 0 bytes total [ 確認テスト ] % ./sendmail -bt -d0.4 << 何かこのようにやってみるらしい。 Version 8.9.1 Compiled with: LOG MATCHGECOS MIME7TO8 MIME8TO7 NDBM NETINET NETUNIX QUEUE SCANF SMTP XDEBUG canonical name: hostC.nix.co.jj a.k.a.: hostC a.k.a.: hostC.nix UUCP nodename: hostC a.k.a.: hostC.nix.co.jj a.k.a.: [192.168.1.3] a.k.a.: [127.0.0.1] ============ SYSTEM IDENTITY (after readcf) ============ (short domain name) $w = hostC.nix.co.jj (canonical domain name) $j = $w << つまり hostC.nix.co.jj ということ。 (subdomain name) $m = nix.co.jj (node name) $k = hostC ======================================================== Warning: .cf file is out of date: sendmail 8.9.1 supports version 8, .cf file is WARNING: Group writable directory /var/spool/mqueue version 0 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter
> Ctrl+D で抜ける。 % Mail -v ikken@tcp-ip.or.jj << おしゃべりモ−ドでメ−ルを送る様子を見る。 Subject: test katou kun desuyo . ダ−と出てくる。 * CF ツ−ルから sendmail.cf を作成する % cd /usr/local/source/CF-3.7W % ls Master/OSTYPE/irix* irix irix4 irix5 irix6 % cp Standards/sendmail-v8.def hostC.def hostC.def -------------------------------- |CF_TYPE=R8V8 << 試しに R8V8-null にしたらダメだった。 |OS_TYPE=irix5 |MX_SENDMAIL=no << named を参照しない sendmail ですと宣言。 |MY_DOMAIN='nix.co.jj' |OFFICIAL_NAME='hostC.nix.co.jj' |FROM_ADDRESS='nix.co.jj' << ここもちゃんと記述すること。 |DIRECT_DELIVER_DOMAINS=none << named を参照しない sendmail の場合は none。 |DEFAULT_RELAY='smtp:hostB' << ともかくメ−ルは hostB に送ります。 注.FROM_ADDRESS='nix.co.jj' と設定すること。もしなにも設定しないとメ−ルに From: katou と言うようにマシン名までついてしまう。 % make hostC.cf MASTERDIR=Master TOOLDIR=Tools \ Tools/Configure hostC.def > hostC.cf.tmp mv -f hostC.cf.tmp hostC.cf % ls -al -rw-r--r-- 1 root sys 32482 .. hostC.cf -rw-r--r-- 1 root sys 27141 .. hostC.def % cp hostC.cf /etc/sendmail.cf << etc ディレクトリに入れること。 % newaliases << 一応やって、sendmail を起動し直す。 WARNING: Group writable directory /var/spool/mqueue /etc/aliases: 31 aliases, longest 10 bytes, 479 bytes total % /usr/lib/sendmail -bt -d0.4 Version 8.9.1 Compiled with: LOG MATCHGECOS MIME7TO8 MIME8TO7 NDBM NETINET NETUNIX QUEUE SCANF SMTP XDEBUG canonical name: hostC.nix.co.jj a.k.a.: hostC a.k.a.: hostC.nix UUCP nodename: hostC a.k.a.: hostC.nix.co.jj a.k.a.: [192.168.1.3] a.k.a.: [127.0.0.1] ============ SYSTEM IDENTITY (after readcf) ============ (short domain name) $w = hostC (canonical domain name) $j = hostC.nix.co.jj (subdomain name) $m = nix.co.jj (node name) $k = hostC ========================================================