qmail+vpopmail環境にPostfixを導入する(その1)
目標:現在のサーバー環境:qmail+vpopmail+Spamassassin+Courier-IMAP環境に、Postfixを導入しSMTPフロントエンドとして稼働させる。
期待できる効果:外部向けSMTPで現行技術への対応の簡素化・SPAM対策の強化。
まず、SPAM対策の強化として、こちら(http://k2net.hakuba.jp/targrey/)のページで紹介されている、taRgrey手法を利用することにします。taRgreyとは、動的IPっぽいアドレスからの接続に対して、tarpitting(応答の故意遅延)を行い、遅延に対応して待機した場合は受信開始、待機しなかった場合はGreylistを適応して再送させ、再送された場合は受信するような方式です。SPAM対策と、誤判定への対処のバランスが非常に良いと思われ、今回の導入となりました。
taRgreyのため、postgreyを導入します。postgreyの導入に際して、Perl(5.6.0以上)と、Net::Server・IO::Multiplex・BerkeleyDBのPerlモジュールが必要になります。BerkeleyDBのライブラリはデフォルトで導入されていますので、今回はインストールしていません。必要であれば、yumやapt-getを利用してインストールします。(例:yum install db4 db4-utils db4-devel)
[server@hatena hatena]$ wget -q http://postgrey.schweikert.ch/pub/postgrey-1.31.tar.gz [server@hatena hatena]$ wget -q http://k2net.hakuba.jp/pub/targrey-0.31-postgrey-1.31.patch [server@hatena hatena]$ tar xzf postgrey-1.31.tar.gz [server@hatena hatena]$ cd postgrey-1.31 [server@hatena postgrey-1.31]$ patch < ../targrey-0.31-postgrey-1.31.patch patching file postgrey [server@hatena postgrey-1.31]$ su Password: [server@hatena postgrey-1.31]# perl -MCPAN -e shell cpan[1]> install Net::Server (中略) cpan[2]> install Net::Server (中略) cpan[3]> install BerkeleyDB (中略) cpan[4]> quit [server@hatena postgrey-1.31]# mkdir -p /var/spool/postfix/postgrey [server@hatena postgrey-1.31]# /usr/sbin/groupadd -g 288 nogroup [server@hatena postgrey-1.31]# /usr/sbin/groupadd -g 288 -u 288 -d /var/spool/postfix/postgrey -s /sbin/nologin -M postgrey [server@hatena postgrey-1.31]# chown postgrey:nogroup /var/spool/postfix/postgrey [server@hatena postgrey-1.31]# cp postgrey /usr/local/sbin/ [server@hatena postgrey-1.31]# mkdir /etc/postfix [server@hatena postgrey-1.31]# cp postgrey_whitelist_* /etc/postfix/
とりあえず、taRgreyのために、パッチを当ててます。グループ・ユーザーの作成時に、ID:288を指定してますが、特別な意味はありません。システムに合わせて適当に設定します。postgrey自体は、バイナリ(Perlスクリプト)のコピーのみです。RedHat系システム用に、initスクリプトを準備しました。
#!/bin/sh # # # chkconfig: 2345 79 31 # description: Postfix Greylisting Policy Server # # processname: postgrey # pidfile: /var/run/greylist.pid # # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 prog=postgrey postgrey=/usr/local/sbin/$prog DBPATH=/var/spool/postfix/postgrey SOCKET=$DBPATH/socket DOPT="--inet=10023 -d --unix=$SOCKET --pidfile=/var/run/postgrey.pid" OPTIONS="" # Source an auxiliary options file if we have one, and pick up OPTIONS, if [ -r /etc/sysconfig/$prog ] ; then . /etc/sysconfig/$prog fi [ -x $postgrey ] || exit 0 [ -d $DBPATH ] || exit 0 RETVAL=0 start() { echo -n $"Starting $prog: " daemon $postgrey $OPTIONS $DOPT RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/$prog return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc $postgrey RETVAL=$? echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$prog /var/run/$prog.pid } restart() { stop start } reload() { echo -n $"Reloading $prog: " killproc $prog -HUP RETVAL=$? echo return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; reload) reload ;; status) status $prog ;; *) echo "Usage: $prog {start|stop|restart|reload|status}" exit 1 esac exit $?
(postgrey=/usr/local/sbin/$progの行と、DBPATH=/var/spool/postfix/postgreyの行は、インストールした環境に応じて変更が必要です。)
さらに、/etc/sysconfig/postgrey を作成し、taRgreyの設定をします。
# options for postgrey OPTIONS="--tarpit=125 --targrey"
これで、postgreyの準備ができましたので、起動してみます。問題ないようであれば、chkconfigで自動起動設定します。
[server@hatena postgrey-1.31]# /etc/init.d/postgrey start Starting postgrey: [ OK ] [server@hatena postgrey-1.31]# /sbin/chkconfig --add postgrey
続いてPostfixを準備します。tarpittingで遅延時に、相手からの切断を検出してこちらも切断するようにパッチを当てます。また、SMTP-AUTHとSTARTTLSに対応するように、ソースからインストールします。
と思いましたが、続きは次回に。