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