インストールメモ

[pop-before-smtp]


1.qpopper の改造
	まずは qpopper のソースを取ってくる
	ftp.rthunter.gr.jp/pub/unix/src/qpopper/qpopper2_53_tar.Z


2.アーカイブの解凍、展開

	# gzip -d qpopper2_53_tar.Z
	# tar -xvf qpopper2_53_tar


3.ソースの改造
  展開したディレクトリに移動し、pop_pass.c を編集する。

	# cd qpopper2.53
	# vi pop_pass.c

  最後の方の認証成功から return する寸前に, --- で挟まれている 3行を加える。
  (--- は入れない事)

	/*  Initialize the last-message-accessed number */
	p->last_msg = 0;

	-----------------------------------------------------------
	pop_log(p, POP_PRIORITY,
	"POPAUTH %s %lu %s %s",
	p->ipaddr, (unsigned long)time(0), p->user, p->client);
	-----------------------------------------------------------

	/*  Authorization completed successfully */
	return (pop_msg (p,POP_SUCCESS,
	    "%s has %d message%s (%d octets).",
	        p->user,p->msg_count, p->msg_count == 1 ? "" : "s", p->drop_size));


4.インストール
  あとは普通にインストールして inetd.conf を変更する。

	# ./configure
	# make
	# cp popper /usr/libexec/popper

  /etc/inetd.conf に下記の行を追加する。

	pop3    stream  tcp     nowait  root    /usr/libexec/popper     popper -s

  inetd に HUP を掛ける。

	# kill -HUP [inetd.pid.NO]


5.ログの吐き出し設定
  /etc/syslog.conf に下記の1行を追加します。

	local0.notice				/var/log/popper.log

  /var/log/popper.log の作成

	# touch /var/log/popper.log

  ssyslogd に HUP を送りましょう。

	# kill -HUP [syslogd.pid.NO]

  popper にアクセスして /var/log/popper.log にログが吐かれる事を確認しましょう。


6.watcher2 の設定
  まずは watcher2 のソースを取ってくる
	ftp.rthunter.gr.jp/pub/unix/src/watcher2/watcher2.1-5.pl

  perl スクリプトそのままなので自分の環境に合わせて書き換えます。
  ハンターネットでは下記を書き換えました。

	#!/usr/bin/perl				<--- perl へのパス

	$popperlog = "/var/log/popper.log";	<--- popper のログ
	$popauthlog = "/var/log/popauth.log";	<--- watcher2 のログ
	$syslogpid = "/var/run/syslog.pid";	<--- syslog.pid の場所
	$popauth = "/etc/mail/popauth";		<--- sendmail が参照するデータベース
	$makemap = "/usr/sbin/makemap";		<--- makemap の場所

	$expire = 600;				<--- pop 認証後 smtp を許可する時間(秒)

  設定が済んだら動かしてみましょう。

	# cp watcher2.1-5.pl /etc/mail/watcher2.1-5.pl
	# chmod 755 watcher2.1-5.pl
	# /etc/mail/watcher2.1-5.pl &

  /etc/mail/popauth.db が出来ていれば OK です。
  最終的に sendmail はこの popauth.db を見て smtp 許可するかどうかの判断をします。


7.sendmail.cf の設定変更
  ここでは sendmail が普通に動作している事を前提に cf ファイルの変更を行います。
  sendmail.cf の先頭の方に --- で挟まれている 1行を加える。
  (--- は入れない事)

	#F{RoamIP} -o /etc/sendmail.roamip
	#C{RoamDom} my.romaing.domain
	#F{RoamDom} -o /etc/sendmail.roamdomain
	-----------------------------------------------
	Kpopauth hash /etc/mail/popauth
	-----------------------------------------------

	##
	## upon MAIL FROM response
	##


  さらに Scheck_rcpt のセクションに --- で挟まれている 2行を加える。
  (--- は入れない事)

	# client address check -- accept messages from hosts within allowed domain
	R$={RoamIP}$* $| $* $| $* $| $*         $@ $>Check_rcpt_roam $4 $| $5
	R$* $| $*$={RoamDom} $| $* $| $*        $@ $>Check_rcpt_roam $4 $| $5
	R$={LocalIP}$* $| $* $| $* $| $*        $@ $>Check_rcpt_inside $4 $| $5
	R$* $| $*$={LocalDom} $| $* $| $*       $@ $>Check_rcpt_inside $4 $| $5
	R$={ClientIP}$* $| $* $| $* $| $*       $@ $>Check_rcpt_inside $4 $| $5
	R$* $| $*$={ClientDom} $| $* $| $*      $@ $>Check_rcpt_inside $4 $| $5
	-----------------------------------------------------------------------------
	R$* $| $* $| $* $| $*                   $: $(popauth $1 $) $| $2 $| $3 $| $4
	ROK $| $* $| $* $| $*                   $@ OK
	-----------------------------------------------------------------------------
	R$* $| $* $| $* $| $*   $: $>Check_rcpt_local $3 $| $4  remove client info
	R                   $@ OK                           destination is local
	R$*                     $@ $>Check_rcpt_outside $1

  以上で sendmail.cf の変更が終わりました。
  sendmail に HUP を掛けて動作試験をしましょう。


8.動作試験
  /etc/popauth に記載されていない IP アドレスから、設定した sendmail に向けて不正中継
  メールを送って、reject されれば OK です。
  次に pop 認証を行ってから再度中継メールを送って、中継される事を確認しましょう。
  中継後、指定の時間が過ぎれば中継不可となります。

<参考> http://www.kuee.kyoto-u.ac.jp/~kitano/popauth/