solaris8にはsendmail8.9.3ベースのsendmailが標準で入っているので、そのまま使うことにし、sendmail.cfはCF-3.7にて作成します。
CF-3.7の入手と設定
CF-3.7は多数のサイトから入手可能ですが、以下からCF本体とパッチを入手します。
ftp.iij.ad.jp/pub/network/CF/CF-3.7Wpl2.tar.gz CF-3.7本体
ftp.iij.ad.jp/pub/network/CF/CF-3.7Wpl2-smtpcheck.patch1 パッチ1
ftp.iij.ad.jp/pub/network/CF/CF-3.7Wpl2-smtpcheck.patch2 パッチ2
展開とパッチファイル適用
上記ファイルは/tmpにあるものとします。
% tar -xvzf CF-3.7Wpl2.tar.gz
% cd CF-3.7Wpl2/Master
% patch < ../../CF-3.7Wpl2-smtpcheck.patch1.txt
% patch < ../../CF-3.7Wpl2-smtpcheck.patch2.txt
solaris用設定
solarisで使用するsendmail.cfではlocal.mailerフラグに'E'を追加するようなので、MasterディレクトリにあるCFのテンプレートファイルmailer.v7ファイルを変更します。
#|#M_SMTP=smtp
: ${LOCAL_MAILER_PATH='/bin/mail'}
: ${LOCAL_MAILER_FLAG_BASE='lsDEFMAw5:/|@qrmn'}
: ${LOCAL_MAILER_TYPE='DNS/RFC822/X-Unix'}
: ${LOCAL_MAILER_ARGS='mail -d $u'}
82行目付近:
: ${LOCAL_MAILER_FLAG_BASE='lsDFMAw5:/|@qrmn'}
赤字部分を追加
: ${LOCAL_MAILER_FLAG_BASE='lsDEFMAw5:/|@qrmn'}
NISドメインが未定義だとsendmailが起動しないようなので、rootになり次のコマンドを実行する。
# domainname b-dash.net
再起動用に/etc/defaultdomainというファイルを作成しておく
/etc/defaultdomain
b-dash.net
defファイル作成
Standardsフォルダのsendmail-v8.defファイルを名前を変えてコピーし、編集します。たとえばホスト名.defのような名前を付けておきます。
% cd /tmp/CF-3.7Wpl2
% cp Standards/sendmail-v8.def ./sol.def
以下が変更部分
| CF_TYPE=R8V8 | sendmail8.9用定義 |
| VERSION=3.7W | sendmail.cfバージョン情報 |
| LOCAL_VERSION=`date +%y%m%d%H` | 日付形式 |
| OS_TYPE=solaris2.6-ml | osタイプ |
| MY_DOMAIN=b-dash.net | ドメイン名 |
| MY_NAME=sol | ホスト名 |
| MY_ALIAS='www mail ftp' | ホスト名の別名定義 |
| SMTP_GREETING_MSG='' | sendmailの情報を表示しない |
| FROM_ADDRESS='$m' | 送信メールのfromアドレスにホスト名を記入しない。('user@sol.b-dash.net'ではなく'user@b-dash.net'となる) |
| RECIPIENT_GENERIC=yes | 前項のアドレス'user@b-dash.net'を受け付ける。 |
| REWRITE_GENERIC_FROM=lower | 外部に送り出すメールのFromからホスト名を取り除く。 |
| ACCEPT_ADDRS='$m' | ドメイン表記のメールも受領 |
| ACCEPT_LOWER=yes | ドメインに属する全てのホスト宛メールを受領。 |
| LOWER_MATCH_STYLE=any | サブドメインも受領 |
| REJECT_SOURCE_ROUTE_RELAY=yes | ソースルーティング指定の中継を拒否する。 |
| RES_NUMERIC=no | IPアドレス形式を展開する |
| DELIVER_NUMERIC=no | IPアドレス指定のメールを配送しない |
| MAIL_RELAY_RESTRICTION=yes | 転送制限を行う |
| CHECK_HOST_DENY=/etc/mail/sendmail.deny | 接続拒否のホストリスト |
| LOCAL_HOST_IPADDR=/etc/mail/sendmail.localip | 接続許可のホストリスト |
| ALLOW_RECIPIENT_DOMAIN=/etc/mail/sendmail.acceptdomain | メールを受信するドメイン名のリスト。ACCEPT_ADDRSで指定したものは含まれる。 |
| ALLOW_RELAY_FROM=/etc/mail/sendmail.relay.from | 中継を許可するメールのFromドメインを限定するリスト |
転送制限ファイルの内容
| sendmail.localip | 192.168.0. |
| sendmail.acceptdomain | b-dash.net |
| sendmail.relay.from | 表から使わなければ空にしておく |
| sendmail.deny | 普通は空でいいでしょう |
cfファイルの作成
sol.dfを編集したらmakeを実行します
% make sol.cf
これでsol.cfのできあがり
aliases.dbの作成
必要によりユーザーの別名定義をしておきます。たとえばpostmaster宛メールをuserに配信するにはaliasesファイルを編集します。
/etc/mail/aliases
Postmaster: user
aliasesファイルを編集後、newaliasesを実行します。
# newaliases
配送確認
出来上がったsol.cfをテストします。sendmailが起動中の場合停止します。
# ps -ef | grep sendmail
root 5033 4998 0 21:13:19 pts/7 0:00
grep sendmail
root 5030 1 0 21:13:14 ? 0:00 /usr/lib/sendmail
-bd -q15m
# kill 5030
# /usr/lib/sendmail -bt -C./sol.cf
ADDRESS TEST MODE (ruleset 3 NOT automatically
invoked)
Enter <ruleset> <address>
> 3,0 user←ローカルユーザー宛
rewrite: ruleset 3 input: user
rewrite: ruleset 3 returns: user
rewrite: ruleset 0 input: user
rewrite: ruleset 0 returns: $# local $: user←ローカルへ格納
> 3,0 user@b-dash.net←ドメイン付きローカルユーザー宛
rewrite: ruleset 3 input: user @ b-dash .
net
rewrite: ruleset 96 input: user < @ b-dash
. net >
rewrite: ruleset 96 returns: user < @
b-dash . net >
rewrite: ruleset 3 returns: user < @ b-dash
. net >
rewrite: ruleset 0 input: user < @ b-dash
. net >
rewrite: ruleset 97 input: user
rewrite: ruleset 3 input: user
rewrite: ruleset 3 returns: user
rewrite: ruleset 0 input: user
rewrite: ruleset 0 returns: $# local $: user
rewrite: ruleset 97 returns: $# local $:
user
rewrite: ruleset 0 returns: $# local $: user←ローカルへ格納
> 3,0 user@hoge.ne.jp←他ドメインのユーザー宛
rewrite: ruleset 3 input: user @ hoge . ne
. jp
rewrite: ruleset 96 input: user < @ hoge
. ne . jp >
rewrite: ruleset 96 returns: user < @
hoge . ne . jp >
rewrite: ruleset 3 returns: user < @ hoge
. ne . jp >
rewrite: ruleset 0 input: user < @ hoge
. ne . jp >
rewrite: ruleset 88 input: < smtp : hoge
. ne . jp > . user < @ hoge . ne .
jp >
rewrite: ruleset 88 returns: $# smtp $@ hoge
. ne . jp . $: user < @hoge . ne . jp
>
rewrite: ruleset 0 returns: $# smtp $@ hoge
. ne . jp . $: user < @hoge . ne . jp
>←smtpで配送
>^D ←ctrl+Dで終了
#
配送の確認後、cfファイルを入れ換え、sendmailをデーモンで起動します。
# mv /etc/mail/sendmail.cf /etc/mail/sendmail.cf.org
# cp ./sol.cf /etc/mail/sendmail.cf
# /usr/lib/sendmail -bd -q15m
sendmailが稼働したら、popサーバーとIMAPサーバーをインストールします。
popサーバー、IMAPサーバはワシントン大学版IMAPを使います。http://www.washington.edu/imap/
ソースの入手は日本にあるミラーサイトより入手。(2000年11月時点の最新版はのタイムスタンプは2000-10-25でした)
http://mirror.nucba.ac.jp/mirror/imap/imap.tar.Z
展開して、コンパイルします。Solaris+gccの場合、makeオプションはgsoになります(その他の場合はMakefile参照のこと)
$ tar -xvzf imap.tar.Z
$ cd imap-2000
$ make gso
コンパイル後、手動でインストールします。インストール先は/usr/local/sbinにします。
ディレクトリがない場合は作成しておきます。
$ su
# /usr/sbin/install -c /usr/local/sbin -m
755 -u root -g root imapd/imapd
# /usr/sbin/install -c /usr/local/sbin -m 755 -u root -g root ipopd/ipop2d
# /usr/sbin/install -c /usr/local/sbin -m
755 -u root -g root ipopd/ipop3d
# /usr/sbin/install -c /usr/local/lib -m
755 -u root -g root c-client/c-client.a
# /usr/sbin/install -c /usr/local/include
-m 755 -u root -g root c-client/c-client.h
# /usr/sbin/install -c /usr/local/include
-m 755 -u root -g root c-client/rfc822.h
# /usr/sbin/install -c /usr/local/include -m 755 -u root -g root c-client/utf8.h
# /usr/sbin/install -c /usr/local/include
-m 755 -u root -g root c-client/mail.h
# /usr/sbin/install -c /usr/local/include
-m 755 -u root -g root c-client/linkage.h
# cp src/imapd/imapd.8c /usr/local/man/man8/imapd.8
# cp src/ipopd/ipopd.8c /usr/local/man/man8/ipopd.8
/etc/servicesにプロトコルとポートを追加。
デフォルトで設定されているようですが、pop3、imapが設定されているか確認。
pop2 109/tcp pop-2 # Post Office Protocol - V2 pop3 110/tcp # Post Office Protocol - Version 3 sunrpc 111/udp rpcbind sunrpc 111/tcp rpcbind imap 143/tcp imap2 # Internet Mail Access Protocol v2
/etc/inetd.confの設定
/etc/inetd.confに以下の行を追加します。
(以下の例はTCPWrapperを使っていますので、TCPWrapperの設定を参照)
imap stream tcp nowait root /usr/local/sbin/tcpd /usr/local/sbin/imapd pop3 stream tcp nowait root /usr/local/sbin/tcpd /usr/local/sbin/ipop3d
inetdの再起動
# ps -ef |grep inet
root 170 1 0 Nov 23 ? 0:00 /usr/sbin/inetd
-s -t
# kill -HUP 170