taRgrey (S25R + tarpitting + greylisting)

元々S25Rを長年運用してきたのでrejectするリストのメンテナンスなどは慣れっこになってはいるし、メンテナンスを楽にするオレオレスクリプトも使っているものの、やはりドロップしてしまうメールがあることに加え、試しに数日間はS25Rをオフにしてみたが1日100通程度もスパムが届き、やはりS25Rはやめられない。サーバを構築し直したついでにtaRgreyに移行することにした。

参考にさせていただいのは【スパム対策】taRgrey – S25R + tarpitting + greylisting。また投稿時点でRHEL 7.3をベースに書いているので、CentOS 7.3でも同様と思われる。

設定ファイルのバックアップ等を明示しない点については、etckeeperが動いている前提なので悪しからず。

postgreyはEPEL 7で提供されているので、そのままインストール出来る。

# yum -y install postgrey

インストールを確認。

# rpm -qa postgrey
postgrey-1.34-12.el7.noarch

postgrey本体はPerlで書かれたスクリプトで、これにパッチを適用する。

# file `which postgrey`
/usr/sbin/postgrey: Perl script, ASCII text executable
# cd /tmp
# wget http://k2net.hakuba.jp/pub/targrey-0.31-postgrey-1.34.patch
# cd /usr/sbin/
# patch -p0 < /tmp/targrey-0.31-postgrey-1.34.patch 
patching file postgrey
Hunk #8 succeeded at 677 (offset 10 lines).
Hunk #9 succeeded at 691 (offset 10 lines).
Hunk #10 succeeded at 710 (offset 10 lines).
Hunk #11 succeeded at 793 (offset 10 lines).

Postgreyの設定を変更。

# etckeeper vcs diff HEAD^ HEAD
diff --git a/sysconfig/postgrey b/sysconfig/postgrey
index f735afd..b07b419 100644
--- a/sysconfig/postgrey
+++ b/sysconfig/postgrey
@@ -1 +1 @@
-POSTGREY_OPTS="--delay=60"
+POSTGREY_OPTS="--dbdir=/var/spool/postfix/postgrey --inet=127.0.0.1:60000 --tarpit=125 --targrey --retry-count=2 --delay=3600"

Postgreyを起動する。

# systemctl enable postgrey
# systemctl start postgrey
# systemctl status postgrey
* postgrey.service - Postfix Greylisting Service
   Loaded: loaded (/usr/lib/systemd/system/postgrey.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2017-07-02 18:51:56 JST; 7s ago
......

taRgrey用Postfix設定ファイルをダウンロードして、コピーする。

# cd /tmp
# wget http://k2net.hakuba.jp/spam/postfix.conf.2.tar.gz
# tar zxvf postfix.conf.2.tar.gz 
postfix.conf.2/
postfix.conf.2/Rgrey.main.cf
postfix.conf.2/ClamSMTP.master.cf
postfix.conf.2/taRgrey.main.cf
postfix.conf.2/reject_helo
postfix.conf.2/reject_ns
postfix.conf.2/check_ns
postfix.conf.2/prepend_client
postfix.conf.2/reject_mx
postfix.conf.2/whitelist_client
postfix.conf.2/reject_client_blackip
postfix.conf.2/permit_client_nots25r
postfix.conf.2/whitelist_recipient
postfix.conf.2/check_sender_info
# cd postfix.conf.2
# cp permit_client_nots25r /etc/postfix/
# cp whitelist_client /etc/postfix/
# cp whitelist_recipient /etc/postfix/

postmapして.dbファイルが出来たか確認。

# cd /etc/postfix/
# postmap permit_client_nots25r
# postmap whitelist_client
# postmap whitelist_recipient
# ls -t *.db | head -3
whitelist_recipient.db
whitelist_client.db
permit_client_nots25r.db
# chcon system_u:object_r:postfix_etc_t:s0 permit* whitelite*

Postfixの設定を変更する。

# etckeeper vcs diff HEAD^ HEAD
diff --git a/postfix/main.cf b/postfix/main.cf
index 897d3b6..0439747 100644
--- a/postfix/main.cf
+++ b/postfix/main.cf
@@ -710,6 +710,21 @@ smtpd_recipient_restrictions =
     permit_mynetworks
     permit_sasl_authenticated
     reject_unauth_destination
+    reject_non_fqdn_recipient 
+    check_recipient_access hash:/etc/postfix/whitelist_recipient
+    check_client_access hash:/etc/postfix/whitelist_client
+    check_client_access regexp:/etc/postfix/permit_client_nots25r
+    check_policy_service inet:60000
+
+smtpd_data_restrictions =
+    permit_mynetworks
+    permit_sasl_authenticated
+    reject_unauth_destination
+    check_recipient_access hash:/etc/postfix/whitelist_recipient
+    check_client_access hash:/etc/postfix/whitelist_client
+    check_client_access regexp:/etc/postfix/permit_client_nots25r
+    check_policy_service inet:60000
+    permit
 
 smtpd_helo_required = yes

Postfixを再起動する。

# systemctl restart postfix