Solaris7マシン sendmail-8.12.1インストール SMTP AUTHにする これ以前に groff-1.10 bind-8.2.5 BerkeleyDB3.3(http://www.sleepycat.com/) libsasl SASL用のライブラリ (Simple Authentication and Security Layer) ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/ バージョン 1.5.24 ------------------- DIGEST-MD5の認証を使う場合はlibdesの共有ライブラリが必要である。 要らないかもしれないが他でも使うことがあるかもしれないので、 インストールすることにした。 ftp://ftp.meiji.ac.jp/pub/security/Crypto/DES などにソースがあるらしいが、以前Crackをインストールした時に中にlibdesが あったことを思い出し、それを流用することにした。 ~/ftp/c50a/src/libdes/ デフォルトではlibdes.aしか作成しない。これをシェアドライブラリにするには Makefileに手を加える。(下にdiffの出力結果のみ記す) ! CFAG= -03 -fomit-frame-pointer -fPIC ($OPT) (-fPICというのが、シェアドライブラリにする、という意味だ。) + SHLIB_MAJOR= 3 + SHLIB_MINOR= 0 (これは全く意味不明。なぜメジャ番号が3なのか?参考にしたネットのを まねしただけ) + DSHLIB= libdes.so.3 $(DLIB): $(OBJ) の所で、arをする前にこれをいれる + gcc -shared -o $(DSHLIB) $(OBJ) これでlibdes.so.3ができるのでこれを/usr/local/lib/にコピーし、 # cd /usr/local/lib; ln -s libdes.so.3 libdes.so # cd /usr/lib; ln -s ../local/lib/libdes.so.3 ./libdes.so ついでにコンパイルした場所から # cp des.h /usr/local/include/ # chmod 644 /usr/local/include/des.h # cp des /usr/local/bin/ # chmod 755 /usr/local/bin/des # cp libdes.a /usr/local/lib/ # chmod 644 /usr/local/lib/libdes.a ---------- saslインストール 環境変数を読み込ませることが必要。 ルートのシェルに注意すること。 shならenv cshならsetenvコマンド ちゃんとconfigureを読まないと、要らないものまでインストールしてしまい その結果エラーメッセージが出るはめになる。 実は一回やってみてlibgssapiが参照シンボルを見つけられないといわれてしまった。 Kerberos、GSSAPIは使わないのだから困らないが、もう一回作り直す必要がある。 また、このエラーメッセージは、シェアドライブラリをちゃんとリンクしていない ことが原因だろう。 ネットで調べると、GNU ld を使うと良いようなことがかいてあったが、もうひとつの 方法でクリアすることにした。それは env LD "gcc -Xlinker"というおまじないのような方法だ。 そういうわけで、configureは以下のようになった。 % env CPPFLAGS="-I/usr/local/BerkeleyDB.3.3/include" \ LDFLAGS="-L/usr/local/BerkeleyDB.3.3/lib -R/usr/local/BerkeleyDB.3.3/lib \ LD="gcc -Xlinker" ./configure --with-dblib=berkeley --with-des=/usr/local \ --with-plugindir=/usr/local/lib/sasl --enable-krb4=no --enable-gssapi=no \ --enable-login=yes これですんなりとconfigureは終り、makeも順調、make installもすぐに終った。 (-Rオプションは共有ライブラリの指定で、Solarisならばつけておく) # ln -s /usr/local/lib/sasl /usr/lib/sasl プラグインを指定しているのでシンボリックリンクは必要ないとも思ったが 雑誌に書いてあったのでやった。悪いことはないだろう。 ------------------ Sendmail-8.12.1 展開 devtools/Siteに行き site.config.m4を作成する devtools/README devtools/SIte/READMEを参照のこと 以下行 % cat site.config.m4 APPENDDEF(`confENVDEF', `-DSASL') APPENDDEF(`conf_sendmail_LIBS', `-lsasl') APPENDDEF(`confINCDIRS', `-I/usr/local/include -I/usr/local/bind/include -I/usr/local/BerkeleyDB.3.3/include') APPENDDEF(`confLIBS', `-ldes') APPENDDEF(`confLIBDIRS', `-L/usr/local/lib -L/usr/local/bind/lib -L/usr/local/BerkeleyDB.3.3/lib') topdirでBuildを行う % ./Build -c -c オプションで新しい設定でコンパイルする。 # ./Build install % cd cf/cf ひながたになるhostname.mcをつくる。 以下がつくったmc % cat hogehoge.mc divert(0)dnl VERSIONID(`$Id: generic-solaris.mc,v8.13 2001/06/27 21:46:30 gshpiro Exp $') OSTYPE(solaris2)dnl DOMAIN(generic)dnl FEATURE(`use_cw_file')dnl FEATURE(`access_db', `hash -T/etc/mail/access')dnl FEATURE(`always_add_domain')dnl MAILER(local)dnl MAILER(smtp)dnl define(`confMAX_HOP', `30') define(`confAUTH_MECHANISMS', `LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl % ./Build hogehoge.cf # ./Build install-cf cfファイルの整合性のチェック。 ここがgamba-netだと仮定して、 (1)アドレス変換のチェック # /usr/lib/sendmail -bt (-Chogehoge.cf) 別のcfファイルを指定する場合 ADDRESS TEST MODE (ruleset....) >3,0 murasaki rewriteがずらずらと出てくるが、最後に return <$# local $$: murasaki となればOK >3,0 murasaki@gamba-net.com これもまたずらずらと出るが、最後にローカルになればOK >3,0 tomodachi@away-net.com 外部のアドレスへのメール送信 最後に returns: <$# esmtp $@ となればOK (2)次にresolvできないアドレスから来たメールは受信拒否するかチェック > .D{client_addr}12.34.56.78 > .D{client_name}connect.host > check_mail user@spam.cracker.com ......... $#error で終れば拒否 (3)次にちゃんとresolvできるアドレスでも、リレイなら拒否をチェック > .D{client_addr}12.34.56.78 > .D{client_name}connect.host > .Dfuser@gamba-net.com > check_rcpt user@foo.bar.com ........ $#error で終ればリレイ拒否 > check_rcpt user@gamba-net.com ........ returns: $# OK gamba-netユーザーあてなら受け取る # /usr/lib/sendmail -bt -d8.8 とやると、 見に行くネームサーバーの情報がでる。 /etc/resolv.confが反映される。 その他 Solaris の sendmailで注意する点は 1)/etc/nsswitch.conf または /usr/lib/netsvc/yp/ypstart などで、 必ずhostsにDNSを見にいく設定にしておくこと。 2)smmsp gid 25のユーザーを作っておくこと set-Group-IDをたてること -r-xr-sr-x root smmsp /usr/lib/sendmail drwxrwx--- smmsp smmsp /var/spool/clientspool drwx------ root whell /var/spool/mqueue -r--r--r-- root whell /etc/mail/sendmail.cf -r--r--r-- root whell /etc/mail/submit.cf ----------------------- SMTP AUTHのチェック # /usr/lib/sendmail -d0.1 -bv root Version 8.12.1 Compiled with: ¥¥¥¥¥¥¥¥ここにSASLの文字が出る。 # /usr/lib/sendmail -bd -q30m ここで/var/log/syslogをみる。 group writableのワーニングが出ている場合は、/usr /usr/libをg-wにすること # telnet localhost smtp ehlo localhost このコマンドで 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 という行がでてくればOK quit # vi /usr/lib/sasl/Sendmail.conf pwcheck_method: sasldb # cd /usr/local/sbin # ./saslpasswd -u gamba-net.com murasaki passwd: XXXXXX Again: XXXXXX これは/etc/sasldbに保存される。 通常のパスワードとは異なるものにしたほうが良いと思う。 削除するときは # saslpasswd -d -u gamba-net.com murasaki