taRgreyによるスパム対策(taRgrey)

最終更新日: 2017.02.18

<<トップページ <<新着情報 <<リンク集 <<サイト内検索 <<Scientific Linuxで自宅サーバー構築 <<Fedoraで自宅サーバー構築

■概要

taRgrey(Postgrey+パッチ)でスパムメールをSMTP接続の段階で遮断する。
taRgreyでは、スパム送信元ホストの多数が動的IPである特徴を利用し、動的IPからのSMTP接続にいったん遅延応答する。遅延応答されたスパム送信元ホストは遅延を待たずに接続を切って再送してこないことが多いため、これでスパムを遮断できる。
なお、まともなメールサーバーは遅延応答されたら一定時間後に再送するようになっているため、いったん遅延応答したホストから再送されてきたメールは通常どおりに受信する。これにより、動的IPで構築した自宅メールサーバーからのメールは遮断されない。
また、いったん再送受信したホストは一定期間はホワイトリストへ自動登録して、ホワイトリスト登録ホストからの接続には遅延応答しないようにすることにより、以後はSMTP接続が遅延しないようになっている。
また、遅延応答により応答待ちでSMTPプロセスが増加してメモリを浪費してしまうのを防ぐため、遅延応答したら即座にSMTPプロセスを終了するパッチをPostfixに施行する。

ただし、フリーメール(hotmailやyahoo等)や動的IP以外のホストからのスパムは遮断できないので、taRgreyですり抜けたスパムメールは他の手段でフィルタする。

Postfixによるメールサーバー構築済であること


■Postfixパッチ

[root@centos ~]# yum -y install yum-utils ← yumでSRPMをダウンロードするyumdownloaderを含むyum-utilsをインストール

[root@centos ~]# vi /etc/yum.repos.d/CentOS-Base.repo ← yumリポジトリ設定ファイル編集
以下を最終行へ追加
[base-source]
name=CentOS-$releasever - Base Source
baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[updates-source]
name=CentOS-$releasever - Updates Source
baseurl=http://mirror.centos.org/centos/$releasever/updates/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[extras-source]
name=CentOS-$releasever - Extras Source
baseurl=http://mirror.centos.org/centos/$releasever/extras/SRPMS/
gpgcheck=1
enabled=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

[root@centos ~]# yumdownloader --noplugins --source postfix ← PostfixのSRPMダウンロード

[root@centos ~]# rpm -ivh postfix-2.3.3-2.1.el5_2.src.rpm ← PostfixのSRPM展開
※ユーザー、グループが存在しない旨の警告メッセージが表示されるが問題ない

[root@centos ~]# cd /usr/src/redhat/SOURCES/ ← PostfixのSRPM展開先ディレクトリへ移動

[root@centos SOURCES]# tar zxvf postfix-2.3.3.tar.gz ← Postfixソース展開

[root@centos SOURCES]# cd postfix-2.3.3 ← Postfixソース展開先ディレクトリへ移動

[root@centos postfix-2.3.3]# wget http://k2net.hakuba.jp/pub/postfix-sleep.patch ← postfix-sleep.patchダウンロード

[root@centos postfix-2.3.3]# patch -p1 < postfix-sleep.patch ← postfix-sleep.patch施行
patching file src/smtpd/smtpd_check.c

[root@centos postfix-2.3.3]# cd .. ← 上位ディレクトリへ移動

[root@centos SOURCES]# rm -f postfix-2.3.3.tar.gz && tar czvf postfix-2.3.3.tar.gz postfix-2.3.3 ← Postfixソース再アーカイブ

[root@centos SOURCES]# rm -rf postfix-2.3.3 ← Postfixソース展開先ディレクトリ削除

[root@centos SOURCES]# cd ← ホームディレクトリへ戻る

[root@centos ~]# rpmbuild -bb --clean --define "dist .`echo postfix-*.src.rpm |awk -F. '{print $(NF-2)}'`" /usr/src/redhat/SPECS/postfix.spec ← PostfixのRPM作成
rpmbuildが「ビルド依存性の失敗」で異常終了した場合

[root@centos ~]# rpm -Uvh --force /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.1.el5_2.i386.rpm ← 作成したPostfixのRPMインストール
Preparing...                ########################################### [100%]
   1:postfix                ########################################### [100%]

[root@centos ~]# /etc/rc.d/init.d/postfix restart ← Postfix再起動
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

[root@centos ~]# rm -f /usr/src/redhat/RPMS/i386/postfix-* ← 作成したRPMを削除

[root@centos ~]# rpmbuild --rmsource --rmspec /usr/src/redhat/SPECS/postfix.spec ← RPM作成後始末

[root@centos ~]# rm -f postfix-2.3.3-2.1.el5_2.src.rpm ← ダウンロードしたSRPMを削除

■Postgreyインストール

[root@centos ~]# wget http://apt.sw.be/redhat/el5/en/source/postgrey-1.33-1.rf.src.rpm ← PostgreyのSRPMダウンロード

※最新版のURLはダウンロードページで確認すること

[root@centos ~]# rpm -ivh --nomd5 postgrey-1.33-1.rf.src.rpm ← PostgreyのSRPM展開
※ユーザー、グループが存在しない旨の警告メッセージが表示されるが問題ない

[root@centos ~]# cd /usr/src/redhat/SOURCES/ ← PostgreyのSRPM展開先ディレクトリへ移動

[root@centos SOURCES]# tar zxvf postgrey-1.33.tar.gz ← Postgreyソース展開

[root@centos SOURCES]# cd postgrey-1.33 ← Postgreyソース展開先ディレクトリへ移動

[root@centos postgrey-1.33]# wget http://k2net.hakuba.jp/pub/targrey-0.31-postgrey-1.33.patch ← targreyパッチダウンロード

※最新版のURLはダウンロードページで確認すること

[root@centos postgrey-1.33]# patch -p0 < targrey-0.31-postgrey-1.33.patch ← targreyパッチ施行
patching file postgrey

[root@centos postgrey-1.33]# cd .. ← 上位ディレクトリへ移動

[root@centos SOURCES]# rm -f postgrey-1.33.tar.gz && tar czvf postgrey-1.33.tar.gz postgrey-1.33 ← Postgreyソース再アーカイブ

[root@centos SOURCES]# rm -rf postgrey-1.33 ← Postgreyソース展開先ディレクトリ削除

[root@centos SOURCES]# cd ← ホームディレクトリへ戻る

[root@centos ~]# rpmbuild -bb --clean --define "dist .`echo postgrey-*.src.rpm |awk -F. '{print $(NF-2)}'`" /usr/src/redhat/SPECS/postgrey.spec ← PostgreyのRPM作成
rpmbuildが「ビルド依存性の失敗」で異常終了した場合

[root@centos ~]# yum -y install postgrey && rpm -e postgrey ← Postgrey依存パッケージインストール

[root@centos ~]# rpm -Uvh /usr/src/redhat/RPMS/noarch/postgrey-1.33-1.rf.noarch.rpm ← 作成したPostgreyのRPMインストール
Preparing...                ########################################### [100%]
   1:postgrey               ########################################### [100%]

[root@centos ~]# rm -f /usr/src/redhat/RPMS/noarch/postgrey-* ← 作成したRPMを削除

[root@centos ~]# rpmbuild --rmsource --rmspec /usr/src/redhat/SPECS/postgrey.spec ← RPM作成後始末

[root@centos ~]# rm -f postgrey-1.33-1.rf.src.rpm ← ダウンロードしたSRPMを削除

■Postfix設定

[root@centos ~]# vi /etc/postfix/main.cf ← Postfix設定ファイル編集
smtpd_recipient_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
−−追加(ここから)−−
    check_recipient_access hash:$config_directory/whitelist_recipient
    check_client_access    hash:$config_directory/whitelist_client
    check_client_access    regexp:$config_directory/permit_client_nots25r
    check_policy_service   inet:60000
    permit

smtpd_data_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
    check_recipient_access hash:$config_directory/whitelist_recipient
    check_client_access    hash:$config_directory/whitelist_client
    check_client_access    regexp:$config_directory/permit_client_nots25r
    check_policy_service   inet:60000
    permit
−−追加(ここまで)−−

[root@centos ~]# wget http://k2net.hakuba.jp/spam/postfix.conf.2.tar.gz ← taRgrey用Postfix設定ファイルダウンロード

[root@centos ~]# tar zxvf postfix.conf.2.tar.gz ← taRgrey用Postfix設定ファイル展開

[root@centos ~]# cp postfix.conf.2/whitelist_recipient /etc/postfix/ ← whitelist_recipientコピー

[root@centos ~]# cp postfix.conf.2/whitelist_client /etc/postfix/ ← whitelist_clientコピー

[root@centos ~]# cp postfix.conf.2/permit_client_nots25r /etc/postfix/ ← permit_client_nots25rコピー

[root@centos ~]# rm -rf postfix.conf.2 ← taRgrey用Postfix設定ファイル展開先ディレクトリを削除

[root@centos ~]# rm -f postfix.conf.2.tar.gz ← ダウンロードしたファイルを削除

[root@centos ~]# postmap /etc/postfix/whitelist_recipient ← whitelist_recipientのDB化

[root@centos ~]# postmap /etc/postfix/whitelist_client ← whitelist_clientのDB化

■Postgrey設定

[root@centos ~]# vi /etc/rc.d/init.d/postgrey ← Postgrey起動スクリプト編集
OPTIONS="--unix=$SOCKET"
↓
OPTIONS="--dbdir=$DBPATH --inet=127.0.0.1:60000 --tarpit=125 --targrey --retry-count=2 --delay=3600"
 ← 起動オプションをtaRgreyモードにする

■Postgrey起動

[root@centos ~]# /etc/rc.d/init.d/postgrey start ← Postgrey起動
Starting postgrey:                                         [  OK  ]

[root@centos ~]# chkconfig postgrey on ← Postgrey自動起動設定

[root@centos ~]# /etc/rc.d/init.d/postfix restart ← Postfix再起動(Postgrey連携有効化)
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]


■taRgrey確認

[root@centos ~]# grep postfix/smtpd /var/log/maillog|grep "NOQUEUE: warn" ← 遅延応答ログ
Apr 10 12:28:04 centos postfix/smtpd[17343]: NOQUEUE: warn: RCPT from cpe-76-190-156-156.neo.res.rr.com[76.190.156.156]: ; from=<pop.netaddress.nettraybaryoran@nimation.nl> to=<billing@mydomain.com> proto=ESMTP helo=<cpe-76-190-156-156.neo.res.rr.com>

[root@centos ~]# grep postfix/smtpd /var/log/maillog|grep "NOQUEUE: sleep" |grep pipelining ← 遅延を待たずにDATAを送ってきたログ
Apr 10 12:28:38 centos postfix/smtpd[17343]: NOQUEUE: sleep: RCPT from cpe-76-190-156-156.neo.res.rr.com[76.190.156.156]: pipelining after 33 sec; from=<pop.netaddress.nettraybaryoran@nimation.nl> to=<billing@mydomain.com> proto=ESMTP helo=

[root@centos ~]# grep postfix/smtpd /var/log/maillog|grep "NOQUEUE: sleep" |grep "lost connection" ← 遅延を待たずに切断したログ
Apr 10 12:30:34 centos postfix/smtpd[17527]: NOQUEUE: sleep: RCPT from 24-176-106-174.dhcp.jcsn.tn.charter.com[24.176.106.174]: lost connection after 15 sec; from=<ocode1987@a2s.si> to=

■PostfixとPostgreyの自動アップデート無効化

yumにより自動アップデートされるとパッチがはがれてしまうため、PostfixとPostgreyをyumによる自動アップデート対象外にする。
yumによる自動アップデートを無効化するには参照

■logwatch設定

logwatchからのメールにPostfixパッチによる遅延応答ログが大量に出力されてしまわないようにする。
[root@centos ~]# echo NOQUEUE >> /etc/logwatch/conf/ignore.conf



▲このページのトップへ戻る

LPIロゴ Copyright© 2005-2017 fallenangels, All rights reserved.
ご自由にリンクしてください(連絡は不要です)
本ページへのご意見・ご要望、誤字・脱字・リンク切れ等のご連絡はこちらからお願いします