ICON of RYUUO.COM TradeMark

Postfix Amavis Clamav

会員登録(SSL)
会員専用(SSL)


更新日: ??????
Fedora Legacy Projectがメンテナンスの期間を短縮しました。困ったのは私だけではないと思いますが、これからが大変だと荷が思いです。
ここでは自力で...とは言うものの、難解でもなかったのですが、PostfixのVersionUpについてのメモです。条件はpostfix amavis-new clamav sasl2です。compile make installは問題なく出来ると思いますが、daemonのスタート時にerrorが出るようでしたらファイルの所有者を確認することでしょうか。そして、わたしのclamd.conf内でclamd のownerがamavisになっていることに注意
デーモンでエラーが出るような時はファイルの所有者を確認することが先決なような気がします。例として、clamavのネットからvirus dataを書き込むにはそのファイルの所有者がamavisでなければならないし、そのディレクトリに実行権が付与されているかも忘れがちだ....,etc !



 RPMでinstallしていたVersion
$ rpm -qa | grep postfix
postfix-2.1.5-2.2
postfix-debuginfo-2.1.5-5

$ rpm -qa | grep sasl
cyrus-sasl-md5-2.1.19-3
cyrus-sasl-devel-2.1.19-3
cyrus-sasl-2.1.19-3
cyrus-sasl-gssapi-2.1.19-3

がinstallされていました。
また、*****.conf Fileは ****.conf.bakの型でバックアップしました。



 postfix amavisd clamd のサービスを停止
以下のFileをダウンロード
amavisd-new-2.4.4-1.fc3.rf.***.rpm
clamav-0.90.2.tar.gz
postfix-2.4.3
zlib-1.2.3.tar.gz <-- セキュリティ上
zlib-...のVersionUpをしなければamavisd-new-2.4.4が不平を言ってきます。
また、liblaryの依存関係で不平を言ってこなかったので頭をひねることもあまりありませんでした。
ただ、clamavのdefaultのインストール先がFedoraCoreと場所が違うので注意でしょうか、configureの時に修正するようにしました。
あとは /etc/passwd と /etc/group ファイル内にamavis clamav が登録されていることを一様確認。


 amavisd-newのinstall
RPMで供給されている。

# yum install amavisd-new
自分のVersionのrpmがすでに提供されていない場合には最下部の
amavisd-new.spec
で試してみました。今のところ問題なくインストールできました。

# rpm -ivh amavis-version.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -ba /usr/src/redhat/SPECS/amavis.spec
# cd /usr/src/redhat/RPMS/i386
# rpm -ivh amavis-version.i386.rpm

が、定石ですが。


 zlibのVersionUp
$ tar xfvz zlib-1.2.3.tar.gz
$ cd zlib-1.2.3
$ ./configure
$ make

# make install



 clamavのinstall
$ tar xfvz clamav-0.90.2.tar.gz
$ cd clamav-0.90.2
$ ./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --enable-id-check --with-dbdir=/var/clamav

configureのoptionを以下に変更した。--with-dbdir=/var/clamavはclamav.confで修正できるので省略、並びに、--with-libgmp-prefix=/usr/libを追加。これ無しでは
SECURITY WARNING: NO SUPPORT FOR DIGITAL SIGNATURES
のERRORがでる。yum install gmp-devel が必要かも!

$ ./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --enable-id-check --with-libgmp-prefix=/usr/lib

$ make

# make uninstall
# make install




(注意)
Version clamav-0.90より古いclamavは アンインストールしておく
# rpm -e --nodeps clamav
or
# make uninstall

確認としては、
$ whereis freshclam
$ whereis clamscan
で、各Pathのbinディレクトリに二ッ以上ある場合があり、
また、
$ ldd `which freshclam`
のコマンドで、libclamav.soがある場合もあるので必ずアンインストールしておくこと。

(注意)...終了


Updateした時のLogFileなどの所有者の変更。これをしておかなければdaemonをスタートした時にお叱りを受けます。

chown -R amavis.clamav /var/lib/clamav .....必要かも(無ければ)

And ---amavisをUpdateしたときには変更されている。amavis.conf, clamd.conf, clamfresh.confで設定したpid File 並びに、socket File(amavis.confとclamav.confで一致していなければならない)の所有者、並びに、そのdirectoryに実行権(+x)を与えているか、注意が必要だ。 # chown amavis /var/run/clamav
And ---clamavをUpdateしたときには変更されている # chown -R amavis /var/clamav
And ---clamavをUpdateしたときには変更されているかも # chmod 700 /var/log/clamav
And the last thing

Open
# emacs /etc/logrotate.d/clamav
# emacs /etc/logrotate.d/freshclam

you see something like
Code:
/var/log/clamav/clamav.log {
create 644 clamav clamav
}

change the first clamav to amavis

# cd /etc/cron.daily
# freshclam
ClamAV update process started at Tue Feb 7 07:03:24 2006
main.cvd is up to date (version: 35, sigs: 41649, f-level: 6, builder: tkojm)
daily.cvd is up to date (version: 1279, sigs: 2390, f-level: 7, builder: arnaud)#

--- OK !! --


また、
latest Version clamav-0.90.2からは /etc/clamd.confの引数を指定しなければならなくなっているので今までの表記法とは異っている。引数をしていしなければならなくなっている。Path or 数値 or yes/no など。
詳しくは、

$ man 5 clamd.conf

で確認した方が良い


先にuninstallした場合、起動時に設定が削除されているかもしれない。

# editor /etc/rc.d/init.d/clamd
#!/bin/sh
#
# Startup script for the Clam AntiVirus Daemon
#
# chkconfig: 2345 61 39
# description: Clam AntiVirus Daemon is a TCP/IP or socket protocol \
#              server.
# processname: clamd
# pidfile: /var/run/clamav/clamd.pid
# config: /etc/clamav.conf

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

[ -x /usr/sbin/clamd ] || exit 0

# See how we were called.
case "$1" in
  start)
	echo -n "Starting Clam AntiVirus Daemon: "
	daemon clamd
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/clamd
	;;
  stop)
	echo -n "Stopping Clam AntiVirus Daemon: "
	killproc clamd
	rm -f /var/clamav/clamd.socket
	rm -f /var/run/clamav/clamav.pid
	RETVAL=$?
	echo
### heres the fix... we gotta remove the stale files on restart
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/clamd 	
	;;
  status)
	status clamd
	RETVAL=$?
	;;
  restart|reload)
	$0 stop
	$0 start
	RETVAL=$?
	;;
  condrestart)
	[ -e /var/lock/subsys/clamd ] && restart
	RETVAL=$?
	;;
  *)
	echo "Usage: clamd {start|stop|status|restart|reload|condrestart}"
	exit 1
esac

exit $RETVAL



# chmod 755 clamd
# ln -s /etc/init.d/clamd /etc/rc3.d/S??clamd
# ln -s /etc/init.d/clamd /etc/rc0.d/K??clamd
??番号は起動する順番、かつ、S??のSはscript中のstartを呼び出す。
K??のKはcript中のstopを実行する。


 postfixのinstall

ちなみに、sendmailのlibを使用しているので最新のSendMailのソースファイルをcompile and installした。(2008/05/31)

$ make -f Makefile.init makefiles
$ make tidy
$ make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL \
                -I/usr/include/sasl" AUXLIBS="-L/usr/lib -lsasl2"
ここでチョイト引っかかった。libraryの場所に注意

$ make

# make install
#



# emacs /etc/postfix/main.cf
ldap使用の時
alias_maps = hash:/etc/aliases ldap:/etc/postfix/ldap-aliases.cf 
/etc/postfix/ldap-alases.cf




canonical_maps = hash:/etc/postfix/canonical
		<-- 名前の書換え.....
		./canonical file 内容
		abcde@example.com    abc_123@example.com
		# postmap canonical
		以上で、abc_123@example.comという架空のアドレスで
		送受信できる。もちろん、/etc/aliasesの設定も必要ですが。

header_checks = regexp:/etc/postfix/header_checks
		<-- 
		./header_checks File
		/^Message-ID:*@localhost*/ REJECT Sorry


smtpd_delay_reject = no
                DROP DISCARD など決定した場合には、その場で
		実行する

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_authenticated_header = yes 
         warning: SASL authentication problem: unable to open Berkeley db 
         /etc/sasldb2: No such file or directory ...とログに残る。
	 # touch /etc/sasldb2;chown postfix /etc/sasldb2 を実行する。

	 Lan内部以外からメール転送をする場合には、saslを使用する
	 認証データベースへのuser登録
	 # saslpasswd2 -u (domain) user_name .....登録
	 # sasldblistusers2 ......................確認
	 # saslpasswd2 -d user_name ..............削除
	 
broken_sasl_auth_clients = yes


smtpd_recipient_restrictions = permit_mynetworks,
                permit_sasl_authenticated,
                permit_auth_destination,
                check_relay_domains,
              	reject


smtpd_client_restrictions = reject_invalid_hostname, 
		reject_unknown_recipient_domain,
		reject_unknown_sender_domain,
		reject_rbl_client dnsbl.sorbs.net,
		check_client_access regexp:/etc/postfix/client_restrictions,
		check_client_access  cidr:/etc/postfix/client_cidr

		<-- 毎日毎日spamを遠慮無しに送ってくる
		アドレスはここにカット.....
		client_cidr File
		192.168.1.200  REJECT
        	


smtpd_sender_restrictions = reject_non_fqdn_sender,
		reject_invalid_hostname, 
		reject_unknown_sender_domain

smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/bakayatura
		<-- Fromを擬装してくる大馬鹿者を送り返す
		bakayatura File.....
		example.com REJECT
		# postmap bakayatura




# emacs /usr/lib/sasl2/smtpd.conf

   pwcheck_method: saslauthd
   mech_list: plain login cram-md5 digest-md5




 Last:


# /usr/sbin/postfix start
# /usr/sbin/amavisd start
# /usr/sbin/clamd start

# cd /etc/logrotate.d
# freshclam

# newaliases



# vi /var/log/maillog
May 26 22:23:04 delly postfix/postfix-script[10236]: starting the Postfix mail system
May 26 22:23:04 delly postfix/master[10237]: daemon started -- version 2.4.3, configuration /etc/postfix


前もって、passwd と username を暗号化しておく

$ perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'
dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=


Last Test

$ telnet host.example.com 25
  Trying 192.168.0.113...
  Connected to host.example.com (192.168.0.113).
  Escape character is '^]'.
  220 host.example.com ESMTP Postfix
  EHLO host.example.com
  250-host.example.com
  250-PIPELINING
  250-SIZE 10145728
  250-VRFY
  250-ETRN
  250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
  250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
  250-ENHANCEDSTATUSCODES
  250-8BITMIME
  250 DSN
  AUTH PLAIN
  334
  dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ= <--先ほどの暗号化しておいたもの
  235 2.0.0 Authentication successful
  quit
  221 2.0.0 Bye
  Connection closed by foreign host.
$


# ps aux | grep postfix
root    10374 0.0 0.1 3016 1032 ? Ss  May26 0:00 /usr/libexec/postfix/master
postfix 21338 0.0 0.0 3032  972 ? S   16:41 0:00 pickup -l -t fifo -u
postfix 21343 0.0 0.0 3076 1016 ? S   16:45 0:00 qmgr -l -t fifo - u

postfix masterがrootとして実行されているか。また、pickup、qmgrがpostfixで走っているかを検査