[solaris Top]

Sendmailのセットアップ

IMAP・POPサーバーのインストールとセットアップ

Sendmailのセットアップ

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


IMAP・POPサーバーのインストールとセットアップ

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