taRgrey設定


SPAM対策の一つである「taRgrey(Postgrey)」の設定を行います。

■taRgrey(postgrey)とは
http://k2net.hakuba.jp/targrey/

taRgreyを使用するには、postfixにtaRgrey用のパッチを当てる必要があります。
もし、postfixをインストールしている場合は、再インストール(上書き)する必要があります。

(1)「Postfix」インストール手順は以下のURL(4)まで同じです。
http://www.kurobuti.com/linux_server/?page_id=325
)ここでは、postfix-2.7.2を使って説明します。

(2)「Postfix」に「sleep」パッチを当てる。
[root@mail1 postfix-2.7.2]# wget http://k2net.hakuba.jp/pub/postfix-sleep.patch
[root@mail1 postfix-2.7.2]# patch -p1 < postfix-sleep.patch
patching file src/smtpd/smtpd_check.c
Hunk #2 succeeded at 3550 (offset 121 lines).

(3)必要なパッケージをインストールする。
[root@mail1 postfix-2.7.2]# yum -y install db4*-devel mysql mysql-devel pcre-devel cyrus-sasl-devel openldap-devel

(4)「Postfix」のインストールを行う。

「Postfix」を「MySQL」に対応させるため以下のスクリプトをダウンロードし「postfix」ディレクトリに保存する。
OSが32bit こちら
OSが64bit こちら

以下の例はwgetコマンドで、64bitのスクリプトをダウンロードし実行しています。
[root@mail1 postfix-2.7.2]# wget http://www.kurobuti.com/download/sqlsetting_x86_64.sh
[root@mail1 postfix-2.7.2]# chmod +x sqlsetting_x86_64.sh
[root@mail1 postfix-2.7.2]# ./sqlsetting_x86_64.sh

次に、「Postfix」をインストールするのに必要なアカウント(Postfix,postdrop)を作成する。
[root@mail1 postfix-2.7.2]# groupadd -g 90 postdrop
[root@mail1 postfix-2.7.2]# useradd -u 89 -s /sbin/nologin -d /var/spool/postfix -M postfix

アカウント作成後、「Postfix」のインストールを行う。
[root@mail1 postfix-2.7.2]# make
[root@mail1 postfix-2.7.2]# make install

起動スクリプトを以下のURL(7)を参照して作成する。
http://www.kurobuti.com/linux_server/?page_id=325

(5)「taRgrey(postgrey)」に必要なユーザーを作成する。
[root@mail1 ~]# useradd -s /sbin/nologin -d /var/lib/postgrey -M postgrey

(6)CPANでPerlモジュールをインストールする。

perlモジュールをインストールするのにCPANを使用します。
CPAMのセッティングは以下URLの(6)「CPAN」で「SPF」に必要な「Perlモジュール」をインストールする、を参照
http://www.kurobuti.com/linux_server/?page_id=412
[root@mail1 ~]# cpan -i Net::Server
[root@mail1 ~]# cpan -i IO::Multiplex
[root@mail1 ~]# cpan -i BerkeleyDB

(7)「postgrey」をダウンロードする。
[root@mail1 ~]# wget http://postgrey.schweikert.ch/pub/postgrey-1.33.tar.gz

(8)「postgrey」を解凍する。
[root@mail1 ~]# tar zxvf postgrey-1.33.tar.gz

(9)「postgrey」に「taRgrey」モードで起動できるようにパッチを当てる。
[root@mail1 ~]# cd postgrey-1.33
[root@mail1 postgrey-1.33]# wget http://k2net.hakuba.jp/pub/targrey-0.31-postgrey-1.33.patch
[root@mail1 postgrey-1.33]# patch -p0 < targrey-0.31-postgrey-1.33.patch
patching file postgrey

(10)「taRgrey(postgrey)」のスクリプトとホワイトリストをコピーする。
[root@mail1 postgrey-1.33]# cp postgrey /usr/local/sbin/
[root@mail1 postgrey-1.33]# cp postgrey_whitelist_* /etc/postfix/

(11)「taRgrey」がデータベース保存先に使用するディレクトリを作成する。
[root@mail1 postgrey-1.33]# mkdir /var/lib/postgrey
[root@mail1 postgrey-1.33]# chown postgrey /var/lib/postgrey

(12)「Postfix」を「taRgrey」に対応させる。
[root@mail1 ~]# vi /etc/postfix/main.cf
#--最終行にでも追加--
# Setting of postgrey.
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
check_client_access regexp:$config_directory/permit_client_nots25r
check_policy_service inet:60000
permit

smtpd_data_restrictions =
permit_mynetworks
permit_sasl_authenticated
check_client_access regexp:$config_directory/permit_client_nots25r
check_policy_service inet:60000
permit

[root@mail1 ~]# vi /etc/postfix/permit_client_nots25r
/\.dip\.t-dialin\.net$/       WARN
/\.dyn\.optonline\.net$/      WARN
!/(^unknown$)|(^[^.]*[0-9][^0-9.]+[0-9].*\.)|(^[^.]*[0-9]{5})|(^([^.]+\.)?[0-9][^.]*\.[^.]+\..+\.[a-z])|(^[^.]*[0-9]\.[^.]*[0-9]-[0-9])|(^[^.]*[0-9]\.[^.]*[0-9]\.[^.]+\..+\.)|(^(dhcp|dialup|ppp|[achrsvx]?dsl)[^.]*[0-9])/ OK
/./                           WARN

(13)「taRgrey」の起動スクリプトを作成する。
[root@mail1 ~]# vi /etc/rc.d/init.d/postgrey
#!/bin/sh
#
# postgrey(taRgrey) script
#
# chkconfig: 2345 75 25
# description:postgrey(taRgrey) is a filter to remove a spam \
#             mail and a virus email.
#             Please refer to following URL for details.
#             http://k2net.hakuba.jp/targrey/index.en.html
#

# include functions
. /etc/rc.d/init.d/functions

USER=postgrey
GROUP=postgrey
POSTGREY=/usr/local/sbin/postgrey
DBDIR=/var/lib/postgrey
PID=/var/lib/postgrey/postgrey.pid
PORT=127.0.0.1:60000
TARPIT=125
RETRY=2
DELAY=3600
prog=postgrey

r_output() {

          if [ $RESULT -eq 0 ] ; then

                echo -n $"Starting $prog: " && success
                echo ""
                touch /var/lock/subsys/postgrey

          else

                echo -n $"Starting $prog: " && failure
                echo ""

          fi

        }

rr_output() {

          if [ $RESULT -eq 0 ] ; then

                echo -n $"Stopping $prog: " && success
                echo ""
                rm /var/lock/subsys/postgrey

          else

                echo -n $"Stopping $prog: " && failure
                echo ""

          fi

        }

start() {

        if [ -s "$POSTGREY" ] ; then

                $POSTGREY --user="$USER" --group="$GROUP" --dbdir="$DBDIR" --pidfile="$PID" \
                --daemonize --inet="$PORT" --tarpit="$TARPIT" --targrey --retry-count="$RETRY" \
                --delay="$DELAY"
                RESULT=$?
                r_output


        fi

        }

stop() {

        kill `cat "$PID"` > /dev/null 2>&1
        RESULT=$?
        rr_output

        }

reload() {

        kill -HUP `cat "$PID"` > /dev/null 2>&1

        }

case "$1" in

        start )
        start ;;

        stop )
        stop ;;

        restart )
        stop
        sleep 1
        start ;;

        reload )
        reload ;;

        * )
        echo $"Usage: $0 {start|stop|restart|reload}" ;;
esac
[root@mail1 ~]# chmod +x /etc/rc.d/init.d/postgrey

(14)「taRgrey」を起動する。
[root@mail1 ~]# /etc/rc.d/init.d/postgrey start
postgrey を起動中:                               [ OK ]
[root@mail1 ~]# ps aux | grep postgrey
postgrey 20915 0.0 1.1 115944 12040 ? Ss 16:28 0:00 /usr/local/sbin/postgrey --user=postgrey --group=postgrey --dbdir=/var/lib/postgrey --pidfile=/var/lib/postgrey.pid --daemonize --inet=127.0.0.1:60000 --tarpit=125 --targrey --retry-count=2 --delay=3600
[root@mail1 ~]# lsof -i:60000
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
postgrey 20915 postgrey 5u IPv4 63282 TCP mail1.local:60000 (LISTEN)

※上のようにtaRgreyが起動すること
※60000ポートでLISTENしていること

(15)「Postfix」を起動する。
[root@mail1 ~]# /etc/rc.d/init.d/postfix start
Starting postfix:                               [ OK ]

(16)メールを受信して逆引きができなかった時のログ
Feb 19 16:35:38 mail1 postfix/smtpd[21338]: connect from unknown[192.168.0.61]
Feb 19 16:35:38 mail1 postfix/smtpd[21338]: NOQUEUE: warn: RCPT from unknown[192.168.0.61]: ; from=<root@mail.local> to=< kurobuti@example2.com> proto=ESMTP helo=<mail.example.com>

※送信元が強制的に接続を切らない場合は、遅延後受信する。

(17)遅延中(16)にメールが再度送られてきた時のログ
Feb 19 16:38:57 mail1 postfix/smtpd[21349]: connect from unknown[192.168.0.61]
Feb 19 16:38:57 mail1 postfix/smtpd[21349]: NOQUEUE: warn: RCPT from unknown[192.168.0.61]: ; from=<root@mail.local> to=< kurobuti@example2.com> proto=ESMTP helo=<mail.example.com>
Feb 19 16:38:57 mail1 postgrey[20915]: action=greylist, reason=early-retry (3401s missing), client_name=unknown, client_address=192.168.0.61, sender=root@mail.local, recipient= kurobuti@example2.com
Feb 19 16:38:57 mail1 postfix/smtpd[21349]: NOQUEUE: reject: RCPT from unknown[192.168.0.61]: 450 4.2.0 < kurobuti@example2.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/example2.com.html; from=<root@mail.local> to=< kurobuti@example2.com> proto=ESMTP helo=<mail.example.com>
Feb 19 16:38:57 mail1 postfix/smtpd[21349]: disconnect from unknown[192.168.0.61]

(18)遅延中(16)に送信元が接続を切った時のログ
Feb 19 16:41:19 mail1 postfix/smtpd[21338]: NOQUEUE: sleep: RCPT from unknown[192.168.0.61]: pipelining after 3 sec; from=<root@mail.local> to=< kurobuti@example2.com> proto=ESMTP helo=<mail.example.com>

Comments are closed.