15-3. sendmail と DNS のアップデ−ト '98/07 (1) sendmail-8.8.5 に先ずアップ '97/02 * 最新 sendmail のソ−スの入手 ftp.iij.ad.jp/pub/network/sendmail/ 97年2月時点でのバ−ジョンは 8.8.5 268701 CF-3.5Wpl4.tar.gz : WIDE 作成の sendmail.cf 作成ツ−ル。 270953 db.1.85.tar.gz : 新しいデ−タベ−ス 3377 security-patch : ???。こんなんもあった。 35399 sendmail.8.8.5+2.7Wbeta5.patch.gz : WIDE プロジェクトのパッチ。 128484 sendmail.8.8.5.patch : このパッチは何。8.4 から上げるの?。 992815 sendmail.8.8.5.tar.gz : これが本体です。 152 sendmail.8.8.5.tar.sig : PGP による電子署名。 # zcat sendmail.8.8.5.tar.gz | tar xvf - << 本体だけ解凍する。あとのはいい。 # ls sendmail-8.8.5 FAQ KNOWNBUGS Makefile READ_ME RELEASE_NOTES cf contrib doc mail.local mailstats makemap praliases rmail smrsh src test インスト−ルは src ディレクトリにある専用の makesendmail スクリプトを使うことが 推奨されている。しかし内部では、Cコンパイラに gcc を使うようになっている。 これ だけなら純正Cコンパイラを使うよう # sh makesendmail CC=cc で変更できるが、 この 他 -DNIS -DNISPLUS 等 NIS 絡みの指定もあるので、直接各OS用の Makefile を修正し てコンパイルした方が早い。とりあず gcc をまだ入れてないという仮定で以下説明する。 * 事前の知識 WIDE プロジェクトのパッチの中にコメントが書いてある。 それを読むと別にパッチをさ して当てる必要もないらしい。この WIDE パッチは UUCP でメ−ルをやりとりしている時 代の特殊事情に基くものらしい。 BANG 形式( hostname!user 形式のメ−ルアドレス )が どうのこうのということらしいが、今となってはほとんど関係ない。 CF-3.5Wpl4.tar.gz は WIDE が作った sendmail.cf 作成ツ−ルである。本書では万能 sendmail.cf を用いる ので関係ない。security-patch、これはよくわからない。 db.1.85.tar.gz のは、BSD OSの新しいハッシュド・デ−タベ−スである。 これはメ− ルの aliases ファイルに対して newaliases とやる。すると aliases.dir、aliases.pag の2つのファイルができる。 これらは aliases の内容を高速に解釈するためにできたデ −タベ−スである。デフォルトでは /usr/lib/libdbm.a が入っているが、 aliases ファ イルの1行に 1024 byte を超えて、だらだら並べたい場合は、上記の db.1.85 を使わな いけないらしい。何十人ものメ−リング・リストでも記述するのでなければ関係ない。 それとどうもDNSの named の実装、BIND との関係があるらしい。 sendmail は内部で /etc/hosts を見たり、NISやDNSを見たりする。 その時どのように見るのかを制御 するのは /etc/resolv.conf とホスト名検索リゾルバである。このリゾルバはライブラリ としてEWSに組込まれていて、通常は意識することはない。 BIND もバ−ジョンアップ されていて、リゾルバには BIND 4.9.x のもの、BIND 4.8.3 を元にした resolv+ がある ようである。これらのインスト−ルも結構めんどいみたいである。別にOSに入っている のでも、セキュリティ上特に問題はないので、ここのところも関係なしとする。 * インスト−ル後 /usr/ucb/newaliases --> /usr/lib/sendmail /usr/ucb/mailq --> /usr/lib/sendmail SunOS には最初ない。 /usr/ucb/hoststat --> /usr/lib/sendmail Apollo にも SunOS にも最初ない。 /usr/ucb/purgestat --> /usr/lib/sendmail 〃 /usr/lib/sendmail /usr/lib/sendmail.hf ../sendmail-8.8.5/src/sendmail : 実行モジュ−ル sendmail.hf : ヘルプファイル aliases : aliases ファイルのサンプル mailq.1 : mailq のマニュアル aliases.5 : aliases のマニュアル newaliases.1 : newaliases のマニュアル sendmail.8 : sendmail のマニュアル * 注意事項 a) ホスト名検索 sendmail-8.8.5 はデフォルトで DNS を見るようになっている。見に行ってなければ /etc/hosts をみる。それにデフォルトの src/Makefile は NIS や NIS+ も見るよう にオプション設定してある。必要がなければ消すこと。 MX レコ−ドを見ない静的配 送用の sendmail を作るには、Makefile で -DNAMED_BIND=0 を指定して DNS を見な いようにする。このオプションの説明は src/READ_ME を見ること。 b) sendmail.cf は /etc におくこと。パ−ミッションは 644 にすること。 # chmod 666 sendmail.cf 不当なパ−ミッションの場合。 # /usr/lib/sendmail -bd -q1h ↓ # /etc/sendmail.cf: WARNING: dangerous write permissions c) newaliases コマンドを打って aliases デ−タベ−スを作り直すこと。 d) /etc/hosts にメ−ルのホスト FQDN を入れること。 # hostname mail # cat /etc/hosts 127.0.0.1 localhost 192.9.201.1 mail mail.nix.co.jj # newaliases .. mail sendmail[244]: unable to qualify my own domain name (mail) -- using /etc/mail/aliases: 3 aliases, longest 10 bytes, 52 bytes total short name /etc/hosts に mail.nix.co.jj がないと、すごく時間かかる。通常はすぐ終わる。 e) 万能 sendmail.cf を使う場合の注意 /etc/sendmail.cf ---------------------------------------- |# [ 共通、ドメイン名が nix.co.jj の例 ] |DDnix.co.jj |Dj$w << Dj$w.$D はダメである。Dj$w にすること。 |DMtcp # hostname << マシン名は FQDN ではない場合で Dj$w を確認した。 mail f) 上記の設定をしたら、一度リブ−トしてちゃんと新しい sendmail を起動させること。 メ−ル回りの設定は微妙である。理由はわからないが、変更が効かない場合がある。 * Solaris 2.5.1 へ sendmail-8.8.5 を入れる '97/02 [ コンパイル ] *** NIS, NIS+ を使わない DNS と /etc/hosts 制御の sendmail *** # cd /opt/source/sendmail-8.8.5/src # sh makesendmail Configuration: os=SunOS, rel=5.5.1, rbase=5, rroot=5.5, arch=sun4, sfx= Creating obj.SunOS.5.5.1.sun4 using Makefile.SunOS.5.5 Making dependencies in obj.SunOS.5.5.1.sun4 make: Nothing to be done for `depend'. Making in obj.SunOS.5.5.1.sun4 gcc -I. -O -I/usr/sww/include -DNDBM -DNIS -DNISPLUS -DSOLARIS=20500 -c alias.c make: gcc: Command not found -o alias.o make: *** [alias.o] Error 127 # cp Makefiles/Makefile.SunOS.5.5 . # make -f Makefile.SunOS.5.5 cc -I. -O -I/usr/sww/include -DNDBM -DSOLARIS=20500 -c alias.c -o alias.o | cc -I. -O -I/usr/sww/include -DNDBM -DSOLARIS=20500 -c version.c -o version.o cc -o sendmail alias.o .. -L/usr/sww/lib -lresolv -l44bsd -lsocket -lnsl -lkstat ld: fatal: library -l44bsd: not found ld: fatal: File processing errors. No output written to sendmail make: *** [sendmail] Error 1 Makefile.SunOS.5.5 -------------------------------------------------------- |# This has been tested on Solaris 2.5. |# @(#)Makefile.SunOS.5.5 8.8 (Berkeley) 1/16/97 | | |CC= cc << gcc から cc に変更。この時まだ gcc を入れてなかったので。 | |# define the database mechanism used for alias lookups: |#DBMDEF= -DNDBM -DNIS -DNISPLUS |DBMDEF= -DNDBM << NIS のところの指定をとる。NIS は使わないよう。 | | |# libraries required on your system |# delete -l44bsd if you are not running BIND 4.9.x |#LIBS= -lresolv -l44bsd -lsocket -lnsl -lkstat |LIBS= -lresolv -lsocket -lnsl -lkstat << 変更。l44bsd ライブラリはデフォル | | トではマシンに入っていない。 # make -f Makefile.SunOS.5.5 # make -f Makefile.SunOS.5.5 install /usr/ucb/install -o root -g sys -m 6555 sendmail /usr/lib | groff -Tascii -mandoc sendmail.8 > sendmail.0 /bin/sh: groff: コマンドが見つかりません。 make: *** [sendmail.0] Error 1 ※インスト−ル後のファイル。sendmail.org は元の、バ−ジョンは SMI-8.6/SMI-SVR4 # ls -al /usr/lib/send* -r-sr-sr-x 1 root sys 418896 4月 18日 13:39 /usr/lib/sendmail -r-sr-x--x 1 root other 235180 4月 18日 13:19 /usr/lib/sendmail.org * Apollo でもコンパイルしていた $ wd /nix/source/sendmail-8.8.5;ld FAQ KNOWNBUGS Makefile READ_ME RELEASE_NOTES cf/ contrib/ doc/ mail.local/ mailstats/ makemap/ praliases/ rmail/ smrsh/ src/ test/ $ ld cf README cf/ domain/ feature/ hack/ m4/ mailer/ ostype/ sh/ siteconfig/ cf/ostype 内に domainos.m4 ファイルあり。 src/Makefile.DomainOS --------------------------------------------------------------------------- |# This Makefile is designed to work on the old "make" program. It does |# not use the obj subdirectory. It also does not install documentation |# automatically -- think of it as a quick start for sites that have the |# old make program (I recommend that you get and port the new make if you |# are going to be doing any signficant work on sendmail). |# |# This has been tested on DomainOS 10.3.5 |# |# @(#)Makefile.DomainOS 8.11 (Berkeley) 9/20/96 |# |# use O=-O (usual) or O=-g (debugging) |O= -O |# define the database mechanisms available for map & alias lookups: |# -DNDBM -- use new DBM |# -DNEWDB -- use new Berkeley DB |# -DNDBM -DNEWDB -DYPCOMPAT -- use both plus YP compatility |# -DNIS -- include client NIS support |# The really old (V7) DBM library is no longer supported. |# If YPCOMPAT is defined and /var/yp/Makefile exists, sendmail will build |# both the NEWDB and DBM libraries (the DBM just for YP). |# |DBMDEF= -DNDBM -DNAMED_BIND=0 |# environment definitions (e.g., -D_AIX3) |ENVDEF= |# see also conf.h for additional compilation flags |# include directories |INCDIRS= |# loader options |LDOPTS= |# library directories |LIBDIRS= |# libraries required on your system |# You might want to use the BIND 4.9 resolver library here |#LIBS= -ldb |#LIBS= -lresolv |LIBS= -ldbm |# location of sendmail binary (usually /usr/sbin or /usr/lib) |BINDIR= ${DESTDIR}/usr/lib |# location of sendmail.st file (usually /var/log or /usr/lib) |STDIR= ${DESTDIR}/usr/lib |# location of sendmail.hf file (usually /usr/share/misc or /usr/lib) |HFDIR= ${DESTDIR}/usr/lib |# additional .o files needed |OBJADD= |# additional pseudo-sources needed |BEFORE= unistd.h dirent.h |################### end of user configuration flags ###################### |CFLAGS= -I. -A nansi $O ${INCDIRS} ${DBMDEF} ${ENVDEF} |OBJS= alias.o arpadate.o clock.o collect.o conf.o convtime.o daemon.o \ | deliver.o domain.o envelope.o err.o headers.o macro.o main.o \ | map.o mci.o mime.o parseaddr.o queue.o readcf.o recipient.o \ | savemail.o srvrsmtp.o stab.o stats.o sysexits.o \ | trace.o udb.o usersmtp.o util.o version.o ${OBJADD} |LINKS= ${DESTDIR}/usr/ucb/newaliases ${DESTDIR}/usr/ucb/mailq \ | ${DESTDIR}/usr/ucb/hoststat ${DESTDIR}/usr/ucb/purgestat |INSTALL=install |BINOWN= root |BINGRP= kmem |BINMODE=6555 |ALL= sendmail aliases.0 mailq.0 newaliases.0 sendmail.0 |all: ${ALL} |sendmail: ${BEFORE} ${OBJS} | ${CC} -o sendmail ${LDOPTS} ${OBJS} ${LIBDIRS} ${LIBS} |unistd.h: | cp /dev/null unistd.h |dirent.h: | echo "#include " > dirent.h | echo "#define dirent direct" >> dirent.h |#NROFF= nroff -h |NROFF= groff -Tascii |MANDOC= -mandoc |aliases.0: aliases.5 | ${NROFF} ${MANDOC} aliases.5 > aliases.0 |mailq.0: mailq.1 | ${NROFF} ${MANDOC} mailq.1 > mailq.0 |newaliases.0: newaliases.1 | ${NROFF} ${MANDOC} newaliases.1 > newaliases.0 |sendmail.0: sendmail.8 | ${NROFF} ${MANDOC} sendmail.8 > sendmail.0 |install: install-sendmail install-docs |install-sendmail: sendmail | ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} sendmail ${BINDIR} | for i in ${LINKS}; do rm -f $$i; ln -s ${BINDIR}/sendmail $$i; done | ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 644 /dev/null \ | ${STDIR}/sendmail.st | ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 sendmail.hf ${HFDIR} |# doesn't actually install them -- you may want to install pre-nroff versions |install-docs: aliases.0 mailq.0 newaliases.0 sendmail.0 |clean: | rm -f ${OBJS} sendmail aliases.0 mailq.0 newaliases.0 sendmail.0 |# dependencies |# gross overkill, and yet still not quite enough.... |${OBJS}: sendmail.h conf.h |depend: (2) JPCERT の警告アナウンスとアップ手順 * 概要 98年初めからコンピュ−タ緊急対応センタ−( JPCERT/CC )より、 ネットワ−ク管理者 に sendmail と DNS のセキュリティ上の弱点についての報告がメ−ルされている。 これ までも時々、このようなメ−ルは来ていたが、どうやら少々問題がありそうである。特に DNS の bind 4.9.7 以前の in.named では、 root 権限でアクセスされる危険性があると、 98年4月8日に米国 CERT から一早くアナウンスされている。そこで安全を期すために WWWホストの電子メ−ルと DNS のデ−モンを、 98年7月時点での最新バ−ジョンに アップデ−トすることにする。 | 現状 変更 WWWホスト:Solaris 2.5.1 ---------|------------------- sendmail | 8.8.5 8.9.1 万能 sendmail.cf を使用。 in.named | 4.9.3 4.9.7 バ−ジョンアップに当っては、慎重にやらねばならない。 sendmail は in.named のライ ブラリと関係しているため、in.named をコンパイル&インスト−ルしてから、 sendmail のコンパイルにかからなければならない。同時にバ−ジョンアップする必要があるわけで ある。これはちょっと危険である。それで、現状の in.named のライブラリでもって、新 しい sendmail をコンパイル&インスト−ルし、様子をみてから両者をバ−ジョンアップ することにする。 他にも、いろいろセキュリティのアナウンスはこれまであったが、特に対策すべき内容で もなかった。sendmailの古いバ−ジョンを使っていて侵入されたとか、パスワ−ド管理が ずさんだったとか。初歩的な問題に起因するものがほとんどだった。sendmailは昔から年 中、セキュリティ・ホ−ルが見つかっている。プロバイダなんか年に100回位バ−ジョ ンアップしているという記事もあった。しかし本書の管理者はそこまでとてもやできない。 JPCERT からのメ−ルなどを見て、クリティカルな場合だけ対応するしかないだろう。 * 問題点 bind の -l44bsd ライブラリの扱いをどうするか。 そもそもこれは BSD 系OSの互換用 のライブラリであり、この Solaris 2.x でいるのかどうかよく分からない。 bind-4.9.7 の Makefile をいろいろコメント部をかえても lib44bsd.a ができる。まあ必要だという ことにしよう。in.named 自体はなくても構わないみたいでもある。事実 4.9.3 はそれで 稼働している。関係するのは sendmail をコンパイルする際である。インタ−ネットで大 学のサイトなんか見ると、sendmail の Makefile で -l44bsd を使うようにしたのがほと んどだった。理由は特に書かれていない。sendmail-8.9.1 の README を見ると、-l44bsd はいらないと書いてあるようなのだが。 ================================================================================ Some people have had a problem with BIND 4.9; it uses some routines that it expects to be externally defined such as strerror(). It may help to link with "-l44bsd" to solve this problem. This has apparently been fixed in later versions of BIND, starting around 4.9.3. In other words, if you use 4.9.0 through 4.9.2, you need -l44bsd; for earlier or later versions, you do not. BIND 4.9 には問題があり、strerror() といった外部定義された幾つかのル−チンを使っ ていることである。この問題の解決には -l44bsd をリンクすることが助けになる。 しか しこの問題は 4.9.3 以降、最新バ−ジョンでは解決されている。言葉を変えれば、4.9.0 から 4.9.2 では -l44bsd をリンクする必要があり、それ以降のバ−ジョンでは必要ない ということである。 ================================================================================ * アップデ−トの手順 [ 手順 ] 1. 現状の関連ファイルをバックアップしておく。 2. sendmail だけ先ずアップデ−トする。 3. DNS と sendmail 両方をアップデ−トする。 [ 条件 ] ・コンパイルは Sun 純正Cコンパイラを使う。 ・純正CコンパイラはWWWホストにある。 ・/usr/local/bin に GNU の gunzip, make, patch が入っている。 [ 準備 ] 環境変数の PATH を追加する。デフォルトでは /usr/ccs/bin、/usr/local/bin が入って いない。/usr/ccs/bin の ar や ld がリンクに必要である。 /opt/SUNWspro/bin には純 正Cコンパイラの cc が入っている。 # setenv PATH /usr/local/bin:/usr/ccs/bin:/opt/SUNWspro/bin:$PATH 純正Cコンパイラを使うために、ライセンス・サ−バを起動させる。これで suntechd と lmgrd.st デ−モンが起動される。使い終わったら kill で殺しておく。 # /etc/rc2.d/K85lmgrd Starting License Manager Daemon [ 作業 ] WWWホストで直にコンパイル等の作業をするのは、少し環境が悪い。なんせウィンドウ システムもセキュリティのため止めてあるのだから。これでは作業ログもとることがまま にならない。そこで内部ネットのEWSから telnet で入ってやることにする。WWWホ ストで # inetd -s & とやり、すぐに内部EWSで telnet アクセスする。 telnet で入 ったら先ず # kill -9 inetd_PID で inetd デ−モンを殺す。その後じっくりと作業にか かるわけだ。もちろん内部EWSからWWWホストに telnet をかけるには、FireWall-1 でそのように許可しておく。 WWWホストでは telnetd が動いてはいるが、 別の telnet アクセスへのサ−ビスはし ない。telnet や ftp はあくまでも inetd の制御下で、 telnetd, ftpd デ−モンが新た に起動されてサ−ビスを行うようになっている。外部から telnet アクセスが3本きてい るなら、そのホストでは telnetd デ−モンが3つ稼働しているわけである。 * 関連ファイルのバックアップ sendmail と bind のところで # make -n install とやる。これで何をインスト−ルして 行くか分かる。-n をつけると実際のインスト−ルは行われず、 スクリプトだけ表示して くれる。上書きされるファイルをコピ−しておくわけだが、バ−ジョン名でどうか。例え ば in.named は in.named.4.9.3 とする。別に xxx.org でもいいが。 もし新しいのをイ ンスト−ルした後で、前のに戻す場合は、ファイル・プロテクションに注意すること。 # ls -al /usr/lib/send* -r-sr-sr-x 1 root sys 418896 .. sendmail -r-sr-sr-x 1 root other 418896 .. sendmail-8.8.5 << group ID が違っている。 * bind 4.9.7 のアップデ−ト [ 上書きされるファイル ] バックアップとること -r-xr-xr-x 1 bin bin 138572 /usr/sbin/in.named -r-xr-xr-x 1 bin bin 34928 /usr/sbin/named-xfer -r--r--r-- 1 bin bin 1753 /usr/lib/nslookup.help -rwxr-xr-x 1 bin bin 60284 /usr/lib/libresolv.so.2 -rw-r--r-- 1 bin bin 9661 /usr/include/netdb.h -rw-r--r-- 1 bin bin 11167 /usr/include/resolv.h -rw-r--r-- 1 bin bin 1643 /usr/include/arpa/inet.h -rw-r--r-- 1 bin bin 11507 /usr/include/arpa/nameser.h [ 追加されるファイル ] /usr/lib/libresolv.a /usr/lib/lib44bsd.a /usr/bin/nslookup /usr/sbin/in.named.reload, in.ndc, in.named.restart /usr/bin/host, dig, dnsquery, addr /usr/include/sys/cdefs.h, bitypes.h [ 注意点 ] 現状 libresolv.so.1 は使われていない。libresolv.so は libresolv.so.2 へのリンク となっている。 -rwxr-xr-x 1 bin bin 35380 /usr/lib/libresolv.so.1 lrwxrwxrwx 1 root other 16 libresolv.so -> ./libresolv.so.2 bind をインスト−ルすると、新しい libresolv.so.2 ができてリンクが張り直される。 # rm -f /usr/lib/libresolv.so # ln -s libresolv.so.2 /usr/lib/libresolv.so nslookup は /usr/bin にインスト−ルされる。元のは下記にそのまま残る。 -r-xr-xr-x 1 bin bin 54532 /usr/sbin/nslookup * sendmail 8.9.1 のアップデ−ト [ 上書きされるファイル ] バックアップとること -r-sr-sr-x 1 root sys 418896 /usr/lib/sendmail -r--r--r-- 1 root sys 4912 /etc/mail/sendmail.hf [ 注意点 ] lrwxrwxrwx 1 root other 17 /usr/bin/newaliases -> /usr/lib/sendmail lrwxrwxrwx 1 root other 17 /usr/bin/hoststat -> /usr/lib/sendmail lrwxrwxrwx 1 root other 17 /usr/bin/mailq -> /usr/lib/sendmail lrwxrwxrwx 1 root other 17 /usr/bin/purgestat -> /usr/lib/sendmail newaliases 以下4つのファイルは sendmail へのリンクである。 別に何もする必要はは ない。/etc/mail/sendmail.st も上書きされるが、ちょっとした sendmail のログ用であ り、別にバックアップすべきファイルではない。sendmail.st はすぐ下の追記を参照。 * メ−ルの数を計測すること `28/09 sendmail.st というファイルは長い間、何のファイルかは知らなかった。流れているメ− ルの数、エラ−になったメ−ルの数、そうしたメ−ルの統計情報を格納したファイルであ ることに気付いたのは、sendmailを最初に設定してから10年も経ってのことだった。初 期の sendmail のバ−ジョンでは sendmail.st というファイル名だった。 それがある時 期から statistics というファイル名になり、mailstats という専用コマンドが用意され た。sendmail.st の統計情報をどうやって見るのかは今もって不明である。statisticsフ ァイルは sendmail-8.12.x では /etc/mail/statistics であり、sendmail をインスト− ルするとこのファイルも作られることになっていた。しかし sendmail をコンパイルして できた sendmail 実行モジュ−ルを、これまで手作業で /usr/lib 等にコピ−したりした 場合もあり、statistics ファイルが /etc/mail になかったりもした。 # which mailstats mailstats コマンドは /etc/mail/statistics ファイ /usr/bin/mailstats ルをみてメ−ルの数を表示する。なければ作ること。 (3) sendmail と BIND の入手と展開 * sendmail のソ−ス入手 # cd /usr/local/source << sendmail、DNS のソ−スはここに入れるとする。 # ftp ftp.iij.ad.jp ftp> cd pub/network/sendmail ftp> dir | -r--r--r-- 1 root wheel 210326 Jul 2 18:55 sendmail.8.9.1.patch -r--r--r-- 1 root wheel 1046322 Jul 2 18:44 sendmail.8.9.1.tar.gz -r--r--r-- 1 root wheel 152 Jul 2 18:49 sendmail.8.9.1.tar.sig -rw-r--r-- 1 root daemon 888 Mar 19 1994 sendmail.cf-maeno -r--r--r-- 1 root wheel 5719 Feb 22 1995 sendmail_wrapper.c drwxr-xr-x 2 root wheel 512 Apr 25 1996 smrsh ftp> binary 200 Type set to I. ftp> get sendmail.8.9.1.tar.gz 1046322 bytes received in 1.3e+03 seconds (0.81 Kbytes/s) # ls -al sendmail.8.9.1.tar.gz -rw-r--r-- 1 root other 1046322 7月 17日 13:05 sendmail.8.9.1.tar.gz * DNS の BIND のソ−ス入手 # ftp ftp.jpcert.or.jp Name (ftp.jpcert.or.jp:root): anonymous 331 Guest login ok, send your complete e-mail address as password. Password: ftp> cd /pub/security/tools/bind/src/4.9.7 ftp> dir | -r--r--r-- 1 root wheel 2003579 May 11 19:06 bind-4.9.7-REL.tar.gz -r--r--r-- 1 root wheel 284 May 11 19:06 bind-4.9.7-REL.tar.gz.asc ftp> binary ftp> get bind-4.9.7-REL.tar.gz 2003579 bytes received in 2.3e+02 seconds (8.4 Kbytes/s) * ソ−スの展開 [ sendmail 8.9.1 の展開 ] # cd /usr/local/source # gunzip sendmail.8.9.1.tar.gz # tar xvf sendmail.8.9.1.tar # cd sendmail-8.9.1 # ls -aF ./ KNOWNBUGS RELEASE_NOTES mail.local/ rmail/ ../ LICENSE cf/ mailstats/ smrsh/ BuildTools/ Makefile contrib/ makemap/ src/ FAQ README doc/ praliases/ test/ # ls src Build conf.c mailq.1 readcf.c sysexits.c Makefile.m4 conf.h mailstats.h recipient.c sysexits.h README convtime.c main.c safefile.c trace.c TRACEFLAGS daemon.c makesendmail savemail.c udb.c alias.c deliver.c map.c sendmail.0 useful.h aliases domain.c mci.c sendmail.8 usersmtp.c aliases.0 envelope.c mime.c sendmail.h util.c aliases.5 err.c newaliases.0 sendmail.hf version.c arpadate.c headers.c newaliases.1 snprintf.c cdefs.h ldap_map.h parseaddr.c srvrsmtp.c clock.c macro.c pathnames.h stab.c collect.c mailq.0 queue.c stats.c # cd src # sh Build nocompile << コンパイルはしない。 Configuration: os=SunOS, rel=5.5.1, rbase=5, rroot=5.5, arch=sun4, sfx= Using M4=/usr/ccs/bin/m4 Creating obj.SunOS.5.5.1.sun4 using ../BuildTools/OS/SunOS.5.5 Making dependencies in obj.SunOS.5.5.1.sun4 gcc -M -I. -DNDBM -DNIS -DNISPLUS -DMAP_REGEX -DSOLARIS=20500 *.c >> Makefile /bin/sh: gcc: コマンドが見つかりません。 make: *** [depend] Error 1 Making in obj.SunOS.5.5.1.sun4 make: *** No rule to make target `nocompile'. Stop. これで obj.SunOS.5.5.1.sun4 というディレクトリができ、Solaris 2.5.1 用のソ−スが 展開される。# sh Build nocompile をやり直す場合は、 # rm -r obj.SunOS.5.5.1.sun4 とやって obj.SunOS.5.5.1.sun4 ディレクトリをいったん消去すること。 Makefile はこ のディレクトリの中にできる。以下関係のある部分のみ示す。 ../sendmail-8.9.1/src/obj.SunOS.5.5.1.sun4/Makefile -------------------------------------------------------------- | | |# @(#)Makefile.m4 8.23 (Berkeley) 6/16/98 |# C compiler |CC= gcc |# Shell |SHELL= /bin/sh |# use O=-O (usual) or O=-g (debugging) |O= -O %) |# location of sendmail source directory |SRCDIR= . |# the database mechanisms available for map & alias lookups: |# -DNDBM -- use new DBM |# -DNEWDB -- use new Berkeley DB |# -DNIS -- NIS support |# The really old (V7) DBM library is no longer supported. |# See README for a description of how these flags interact. |# |MAPDEF= -DNDBM -DNIS -DNISPLUS -DMAP_REGEX |# environment definitions (e.g., -D_AIX3) |ENVDEF= -DSOLARIS=20500 |# see also conf.h for additional compilation flags |# directories |INCDIRS= | %) |# loader options |LDOPTS= |# library directories |LIBDIRS= |# libraries required on your system |# delete -l44bsd if you are not running BIND 4.9.x |LIBS= -lresolv -lsocket -lnsl -lkstat | | [ bind 4.9.7 の展開 ] # cd /usr/local/source # gunzip bind-4.9.7-REL.tar.gz << xxx.tar になる。xxx.gz はなくなる。 # mkdir bind-4.9.7 << ディレクトリを作って、そこで tar 展開する。 # mv bind-4.9.7-REL.tar bind-4.9.7 # cd bind-4.9.7 # tar xvf bind-4.9.7-REL.tar # ls -F README doc/ TODO include/ BSD/ bin/ man/ CHANGES bind-4.9.7-REL.tar named/ INSTALL compat/ res/ Makefile conf/ shres/ OPTIONS contrib/ tools/ # ls /conf/master 記述のサンプルがある。 README named.boot.master named.local root.cache named.boot named.hosts named.rev (4) Solaris 2.5.1 へのインスト−ル * 先ず sendmail のアップデ−ト、DNS は現状の in.named を使う # cd /usr/local/source/sendmail-8.9.1/src/obj.SunOS.5.5.1.sun4 Makefile 関係する所のみ表示。 ----------------------------------------- |CC= cc << gcc を cc に変える。 |MAPDEF= -DNDBM << NIS は使わない。 |ENVDEF= -DSOLARIS=20500 |LIBS= -lresolv -lsocket -lnsl -lkstat # make sendmail << sendmail だけコンパイルする。マニュアルも作りたければただ の # make とする。 # make install << インスト−ルする。 ../../BuildTools/bin/install.sh -c -o root -g sys -m 4555 sendmail /usr/lib for i in /usr/bin/newaliases /usr/bin/mailq /usr/bin/hoststat 続く /usr/bin/purgestat; do rm -f $i; ln -s /usr/lib/sendmail $i; done ../../BuildTools/bin/install.sh -c -o root -g sys -m 444 sendmail.hf /etc/mail ../../BuildTools/bin/install.sh -c -o root -g sys -m 644 sendmail.st \ /etc/mail/sendmail.st groff -Tascii -mandoc aliases.5 > aliases.0 /bin/sh: groff: コマンドが見つかりません。 << 無視して構わない。マニュアル作成 make: *** [aliases.0] Error 1 の話である。 # newaliases << sendmail の aliases デ−タベ−スを作り直す。 Warning: .cf file is out of date: sendmail 8.9.1 supports version 8, .cf file is WARNING: Group writable directory /var version 0 WARNING: Group writable directory /var/spool WARNING: Group writable directory /etc WARNING: Group writable directory /etc/mail dbm map "Alias0": unsafe map file /etc/mail/aliases WARNING: cannot open alias database /etc/mail/aliases Cannot create database for alias file /etc/mail/aliases 幾つかワ−ニングが出た。 最初は sendmail.cf のバ−ジョンが8じゃないよと警告して いる。これは別に無視してもいいらしい。version 0 と出ているのは、万能 sendmail.cf を現状そのまま使ったためである。セキュリティ的にどうなのかは、今少し検討する必要 がある。どうも sendmail のバ−ジョンが上がって、SPAM対策ができるようになった のだが、それは sendmail.cf の記述とともにできるようである。 SPAM対策しなけれ ば、万能 sendmail.cf でも問題はないのでないかという気がしている。 次のワ−ニングは、親切にもディレクトリがグル−プ書込みはダメだよと教えてくれてい る。またグル−プ書込みになっているため dbm map 以下、 aliases ファイルからデ−タ ベ−スが作れないことになっている。ともかく上記ディレクトリを、グル−プ書込み禁止 にする。現状では drwxrwxr-x となっていたので、# chmod 755 var 等とやっていく。復 習の意味で 755 の意味を確認しておこう。rwx は2ビット単位で、4,2,1 で、 それを足 しているだけのことである。 421 421 421 rwx r-x r-x owner group other # newaliases << 以下のようなメッセ−ジでOK。 Warning: .cf file is out of date: sendmail 8.9.1 supports version 8, .cf file is /etc/mail/aliases: 3 aliases, longest 9 bytes, 48 bytes total version 0 # /etc/rc2.d/S88sendmail start << マシンをリブ−トするか、これで sendmail 起動。 * 両方、同時にアップデ−トする [ 手順 ] # ps -e | grep in.named 90 ? 0:04 in.named # ps -e | grep sendmail 130 ? 0:01 sendmail # kill -9 90 << kill 90 でもいいが、-9 をつけた方が確実にプロセスを殺すみたい。 # kill -9 130 { bind のコンパイル&インスト−ル } { sendmail のコンパイル&インスト−ル } # shutdown -i0 -g0 > boot 各 Makefile やインスト−ルは下記を見ること。これで特に問題はない。 bind はライブ ラリの変更が伴うので、ちょっとびびっていたが、あっさりと終わってしまった。ちゃん とバックアップをとっておけば、恐れることはない。セキュリティ・アップのため、やっ てない人はどんどんやろう。 << インスト−ル後の主要ファイルのサイズなど >> -r-sr-xr-x 1 root sys 462856 .. /usr/lib/sendmail -r--r--r-- 1 root sys 5174 .. /etc/mail/sendmail.hf -r-xr-xr-x 1 bin bin 806912 .. /usr/sbin/in.named -r-xr-xr-x 1 bin bin 272952 .. /usr/sbin/named-xfer -rw-r--r-- 1 bin bin 607724 .. /usr/lib/libresolv.a -rw-r--r-- 1 bin bin 135960 .. /usr/lib/lib44bsd.a -rwxr-xr-x 1 bin bin 106448 .. /usr/lib/libresolv.so.2 lrwxrwxrwx 1 root other 14 .. libresolv.so -> libresolv.so.2 [ bind のコンパイル&インスト−ル ] # cd /usr/local/source/bind-4.9.7 # make # make install /usr/local/source/bind-4.9.7/Makefile ---------------------------------------------------------------------------- |# Makefile for BIND>=4.9 top level |# vixie@decwrl December, 1992 [original] |# |# $Id: Makefile,v 8.53 1998/05/11 04:19:41 vixie Exp $ | |## Copyright (c) 1989 |## The Regents of the University of California. All rights reserved. | | |VER = 4.9.7-REL |SHELL = /bin/sh |MAKE = make |DESTDIR = | |INCL = include |RES = res/libresolv.a |COMPLIB = compat/lib/lib44bsd.a | | |#(solaris2.x/sunos5.x) |#be careful with installation - note in particular that the system ships |#with /usr/sbin/in.named (with in.) and /usr/sbin/named-xfer (without in.) |#to emulate this naming, INDOT should be set to 'in.' while XFER_INDOT |#should be empty. also, under solaris2.x, use 'make install' at your own risk. |#don't include sys/stream.h via netinet/in.h by defining _SYS_STREAM_H. |#->and note that sun moved their nslookup to /usr/sbin for some odd reason; |# when you install this one in /usr/bin you should delete sun's or else you |# will get confusing results since you never know which nslookup you're using. |PIDDIR = /etc |LEX = lex |#uncomment next line for Sun C compiler |CC = /opt/SUNWspro/bin/cc $(CPPFLAGS) -R$(DESTLIB) << コメントを外したところ。 |#uncomment next two lines for GNU C compiler |#CC = gcc $(CPPFLAGS) |#LDFLAGS=-Xlinker -R$(DESTLIB) |#otherwise uncomment the next line and hope for the best |#CC = cc $(CPPFLAGS) |CDEBUG = -g |CPPPFLAGS = -DSVR4 -D_SYS_STREAM_H -DMAXHOSTNAMELEN=256 |CPPFLAGS = $(CPPPFLAGS) $(SOLCOMPAT) |INDOT = in. |XFER_INDOT = |LIBS = -ll -lnsl -lsocket |DESTEXEC = /usr/sbin |DESTHELP = /usr/lib |INSTALL_COMPAT = install-compat |LDS = : |INSTALL = /usr/ucb/install |RANLIB = : |ARPREF = `lorder |ARSUFF = | tsort` |MANDIR = man |MANROFF = cat SOLCOMPAT 以下、皆さんがやっている |CATEXT = $$$$N のと同じようにした。本当かどうかは |PS = ps -p 知らない。でも問題ないみたい。 |IOT = IOT |#uncomment next line for link-compatibility with Solaris resolver library |SOLCOMPAT = -Dgethostbyname=res_gethostbyname \ << | -Dgethostbyaddr=res_gethostbyaddr -Dgetnetbyname=res_getnetbyname \ << | -Dgetnetbyaddr=res_getnetbyaddr -Dsethostent=res_sethostent \ << | -Dendhostent=res_endhostent -Dgethostent=res_gethostent \ << | -Dsetnetent=res_setnetent -Dendnetent=res_endnetent \ << | -Dgetnetent=res_getnetent << |# for details on shared library building, see shres/solaris/INSTALL |#uncomment next line to build a shared library version of libresolv |SHRES = shres/solaris << |#uncomment next line to build tools and named with shared libresolv |#if you do so, you *must* define SOLCOMPAT as well (and it must be in CPPFLAGS) |RES = $(SHRES)/libresolv.so << |# uncomment only one of the triplets of lines below |# -- if you use gcc (recommended) |# (if -fpic doesn't work, see shres/solaris/ISSUES) |#SHCC = gcc -B/usr/ccs/bin/ $(CPPPFLAGS) |#PIC= -fpic |#SHLD = /usr/ccs/bin/ld -G |# -- if you use Sun's cc |SHCC = /opt/SUNWspro/bin/cc $(CPPPFLAGS) << |PIC = -Kpic << |SHLD = /opt/SUNWspro/bin/cc -G << | | |#(apollo domainos) |#CC = cc $(CPPFLAGS) |#CDEBUG = -g |#CPPFLAGS = -U_APOLLO_SOURCE -D_BSD_SOURCE -DSPRINTF_CHAR -D_CLASSIC_BSD_SPRINTF |#LIBS = -ll |#DESTSBIN = /etc |#DESTEXEC = /etc |#DESTHELP = /usr/lib |#DESTMAN = /usr/man |#PIDDIR = /etc |#LEX = lex |#PS = /bsd4.3/bin/ps |#IOT = IOT | | |gcc2-lint: FRC | @-make CC="gcc2 -Wall -Wno-comment -Wno-parentheses -Dlint" all \ | 2>&1 | grep '\.[ch]:[0-9]' | |FRC: [ sendmail のコンパイル&インスト−ル ] # cd /usr/local/source/sendmail-8.9.1/src/obj.SunOS.5.5.1.sun4 Makefile 関係する所のみ表示。 ------------------------------------------------- |CC= cc |MAPDEF= -DNDBM |ENVDEF= -DSOLARIS=20500 |LIBS= -lresolv -lsocket -lnsl -lkstat -l44bsd # make sendmail cc -O -I. -DNDBM -DSOLARIS=20500 -c alias.c -o alias.o | cc -O -I. -DNDBM -DSOLARIS=20500 -c util.c -o util.o cc -o sendmail alias.o ... version.o -lresolv -lsocket -lnsl -lkstat -l44bsd cp /dev/null sendmail.st # make install # newaliases Warning: .cf file is out of date: sendmail 8.9.1 supports version 8, .cf file is /etc/mail/aliases: 3 aliases, longest 9 bytes, 48 bytes total version 0 (5) Solaris 2.6 へのインスト−ル '99/07 * インスト−ルの概要 OSを 2.5.1 から 2.6 に上げた時の話である。両者ではバイナリ互換のはずだから問題 はないと思ったが、ごちゃごちゃしている内におかしくなってしまった。仕方ないのでコ ンパイルから始めることにした。その前に99年7月時点での bind と sendmail のバ− ジョンを確認する。bind は 4.9.7 のままだった。sendmail は 8.9.3 が出ていたが、特 に 8.9.1 で問題は報告されていないので、そのまま使うことにする。 Solaris 2.6 になって画面が変わった。デフォルトでは Motif ベ−スの CDE になったの だ。画面はほかっておくとスクリ−ンセ−バが働き、パスワ−ド入力する画面になる。セ キュリティ的に望ましくなっている。このマシンはWWWサ−バのホストを想定している ので CDE も何も関係ないが。プレ−ン画面で作業するには、 パスワ−ド入力画面でコマ ンドライン入力を選択する。他、特に Solaris 2.5.1 と違いはない。 標準シェルが変わ っていることに、ともかく注意されたい。 # /bin/csh << Cシェルにかえる。この方が作業がしやすい。 # setenv PATH /usr/local/bin:/usr/ccs/bin:/opt/SUNWspro/bin:$PATH * Solaris 2.6 でのオリジナル -r-xr-xr-x 1 bin bin 148976 /usr/sbin/in.named -r-xr-xr-x 1 bin bin 36448 /usr/sbin/named-xfer -r-xr-xr-x 1 bin bin 55476 /usr/sbin/nslookup -rwxr-xr-x 1 bin bin 92952 /usr/lib/libresolv.so.2 -rw-r--r-- 1 bin bin 1831 /usr/include/arpa/inet.h -rw-r--r-- 1 bin bin 11359 /usr/include/arpa/nameser.h -rw-r--r-- 1 bin bin 10662 /usr/include/netdb.h -rw-r--r-- 1 bin bin 11637 /usr/include/resolv.h -r-sr-xr-x 1 root bin 346996 /usr/lib/sendmail -rw-r--r-- 1 root bin 4911 /etc/mail/sendmail.hf * bind のコンパイル&インスト−ル [ そのままだとエラ− ] # cd /usr/local/source/bind-4.9.7 # make clean << 一度きれいにしておこう。Makefile は前のをそのまま使う。 # make /usr/local/source/bind-4.9.7/res make[1]: Entering directory `/usr/local/source/bind-497/res' /opt/SUNWspro/bin/cc -DSVR4 -D_SYS_STREAM_H -DMAXHOSTNAMELEN=256 ... "../compat/include/sys/bitypes.h", line 78: warning: typedef redeclared: int8_t "../compat/include/sys/bitypes.h", line 80: warning: typedef redeclared: int16_t "../compat/include/sys/bitypes.h", line 82: warning: typedef redeclared: int32_t "./../conf/portability.h", line 643: identifier redeclared: gethostname res_debug.c に対して、acomp が失敗しました。 | [ ファイルを修正する ] ../conf/portability.h 関係する所のみ表示。 ---------------------------------------------- |/* #if defined(SVR4) && defined(sun) << ここが 643 行目。コメント |extern int gethostname __P((char *, size_t)); にする。 |#endif */ ../compat/include/sys/bitypes.h 関係する所のみ。 --------------------------------------------- |/* typedef */ /*signed*/ /* char int8_t; */ << 3ヵ所コメントにする。 |/* typedef short int16_t; */ |/* typedef int int32_t; */ # make # make install * sendmail のコンパイル&インスト−ル # cd /usr/local/source/sendmail-8.9.1/src # ls -F obj.SunOS* obj.SunOS.5.5.1.sun4/ obj.SunOS.5.6.sun4/ << いつの間に 5.6 なんて出来た?。 # cd obj.SunOS.5.6.sun4 Solaris 2.6 はこれである。 Makefile 関係する所のみ表示。 --------------------------------------------------- |CC= cc |MAPDEF= -DNDBM << 元は -DNDBM -DNIS -DNISPLUS -DMAP_REGEX。 |ENVDEF= -DSOLARIS=20600 << こうなっていた。 |# delete -l44bsd if you are not running BIND 4.9.x |LIBS= -lresolv -l44bsd -lsocket -lnsl -lkstat # make sendmail << 先に bind をインスト−ルする。そうしないと # make install lib44bsd.a がないと怒られる。 # newaliases << パ−ミッションを直しておくこと。 WARNING: Group writable directory /var/spool /etc/mail/aliases: 3 aliases, longest 9 bytes, 48 bytes total [ bind をインスト−ルする前にやるには ] # cd /usr/local/source/bind-4.9.7/compat/lib/ # cp lib44bsd.a /usr/lib/ # make sendmail * SPAM対策の sendmail.cf Solaris 2.6 になっても 2.5.1 で作った sendmail.cf はそのまま使える。2.5.1 の時の 定義ファイル hostA.def をコピ−して、 OS_TYPE を solaris2.5 から solaris2.6 に変 更した。それで cf ファイルを作成したが違いはなかった。筑波のチェックサイトの結果 も、ちゃんと reject していた。OKです。 # cd /usr/local/source/CF-3.7W # cp hostA.def hostB.def hostB.def --------------------- | | |CF_TYPE=R8V8 |OS_TYPE=solaris2.6 << 2.6 にする。Master/OSTYPE に solaris2.6 はある。 | | # make hostB.cf MASTERDIR=Master TOOLDIR=Tools \ Tools/Configure hostB.def > hostB.cf.tmp mv -f hostB.cf.tmp hostB.cf $ cmf hostA.cf hostB.cf << Apollo のコマンドで違いを確認してみた。違いはない。 A58 ##### with hostA.def A59 ##### at Fri Sep 18 12:51:36 JST 1998 changed to B58 ##### with hostB.def B59 ##### at Tue Aug 3 18:07:08 JST 1999