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>