2009年11月6日金曜日

PostfixによるtaRgrey その2

その1からの続きです。

その1ではPostfixの基本構築が完了、これからtaRgreyの設定を行っていきますが、taRgreyでは S25R+tarpitting+greylisting というスパム判定手法を組み合わせて使います。S25Rにて動的IPらしき場合は怪しいと判断してtarpitting(指定時間の遅延処理)を行います。待ちきれず接続を切断されてもすぐにはsmtpdプロセスが終了しません。遅延中に相手が接続を切ったらsmtpdプロセスもすぐに終了するようにPostfixにパッチを適用します。

Postfixのパッチ(メモリ消費を抑える効果がある)
PostfixのSRPM(ソースファイル)をyumからダウンロードするためyum-utilsをインストール
# yum install yum-utils

yumのBaseレポジトリに追記
# vi /etc/yum.repos.d/CentOS-Base.repo
 [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


PostfixのSRPMダウンロード
# yumdownloader --noplugins --source postfix

SRPMの展開
# rpm -ivh postfix-2.3.3-2.1.el5_2.src.rpm (警告が出るが気にしない)

SRPM展開先ディレクトリへ移動
# cd /usr/src/redhat/SOURCES/

ソースの展開
# tar zxvf postfix-2.3.3.tar.gz

展開ディレクトリへ移動
# cd postfix-2.3.3

パッチのダウンロード
# wget http://k2net.hakuba.jp/pub/postfix-sleep.patch

パッチの適用
# patch -p1 < postfix-sleep.patch

上位ディレクトリへ移動
# cd ../

ソースの再アーカイブ化(パッチを適用する前のソースを削除してから再アーカイブ)
# rm -rf postfix-2.3.3.tar.gz && tar czvf postfix-2.3.3.tar.gz postfix-2.3.3

ソース展開先ディレクトリを削除
# rm -rf postfix-2.3.3

ホームディレクトリへ
# cd

PostfixのRPMパッケージを作成
# rpmbuild -bb --clean --define "dist .`echo postfix-*.src.rpm |awk -F. '{print $(NF-2)}'`" /usr/src/redhat/SPECS/postfix.spec
※1行で記述する

作成したRPMパッケージをインストール(アップデート)
# rpm -Uvh --force /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.1.el5_2.i386.rpm

ソースファイル、specファイルの削除
# rpmbuild --rmsource --rmspec /usr/src/redhat/SPECS/postfix.spec

作成したRPMパッケージの削除
# rm -rf /usr/src/redhat/RPMS/i386/postfix-*

ダウンロードしたSRPMの削除
# rm -rf postfix-2.3.3-2.1.el5_2.src.rpm


Postgreyのインストール

PostgreyのSRPMダウンロード
# wget http://apt.sw.be/redhat/el5/en/SRPMS.rpmforge/postgrey-1.32-1.rf.src.rpm

SRPMの展開
# rpm -ivh postgrey-1.31-1.rf.src.rpm(警告が出るが気にしない)

SRPM展開先ディレクトリへ移動
# cd /usr/src/redhat/SOURCES/

ソースの展開
# tar zxvf postgrey-1.32.tar.gz

展開ディレクトリへ移動
# cd postgrey-1.32

パッチをダウンロード(postgreyのバージョンに注意)
# wget http://k2net.hakuba.jp/pub/targrey-0.31-postgrey-1.32.patch

パッチの適用
# patch -p0 < targrey-0.31-postgrey-1.32.patch

上位ディレクトリへ移動

# cd ../

ソースの再アーカイブ化(パッチを適用する前のソースを削除してから再アーカイブ)
# rm -f postgrey-1.32.tar.gz && tar czvf postgrey-1.32.tar.gz postgrey-1.32

ソース展開先ディレクトリを削除
# rm -rf postgrey-1.32

ホームディレクトリへ
# cd

PostgreyのRPMパッケージを作成
# rpmbuild -bb --clean /usr/src/redhat/SPECS/postgrey.spec

Postgrey依存パッケージをインストールためrpmforgeリポジトリを利用
# rpm-ivh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

yumで自動updateされないよう制御
# vi /etc/yum.repos.d/rpmforge.repo
 enabled = 1 ← 0に変更する

依存パッケージのインストール(Postgreyをインストールして即削除)
# yum -y --enablerepo=rpmforge install postgrey && rpm -e postgrey
 
作成したPostgreyのRPMパッケージをインストール
# rpm -ivh /usr/src/redhat/RPMS/noarch/postgrey-1.32-1.rf.noarch.rpm
 
作成したRPMパッケージの削除
# rm -rf /usr/src/redhat/RPMS/i386/postgrey-*

ダウンロードしたSRPMの削除
# rm -rf postgrey-1.31-1.rf.src.rpm

taRgreyの解説ページから設定例を取得
# wget http://k2net.hakuba.jp/spam/postfix.conf.2.tar.gz
# tar zxvf postfix.conf.2.tar.gz

一部のファイルをコピー
# cp postfix.conf.2/whitelist_recipient /etc/postfix/

# cp postfix.conf.2/whitelist_client /etc/postfix/
# cp postfix.conf.2/permit_client_nots25r /etc/postfix/

whitelist_recipient とwhitelist_client はDB参照となるためDB化
# postmap /etc/postfix/whitelist_recipient

# postmap /etc/postfix/whitelist_client

DBがあるか確認
# ls /etc/postfix
whitelist_client.db     whitelist_recipient.db (この2つを確認)

Postfixの設定変更

Postfixの設定変更
# vi /etc/postfix/main.cf
 smtpd_recipient_restrictions =
  permit_mynetworks
  reject_unauth_destination
  reject_non_fqdn_recipient
  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 ← 追記

#以下全文追記
smtpd_data_restrictions =
  permit_mynetworks
  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


main.cfの入力を終了します。

※解説
smtpd_recipient_restrictionsでの一度目のcheck_policy_serviceでtarpittingを掛け、一旦tarpittingブラックリストに登録されます。

tarpittingを抜けた接続はsmtpd_data_restrictionsまで渡ってくるため、再度check_policy_serviceで呼び出し、tarpittingのブラックリストから削除します。
tarpittingのブラックリストに入っているIPからの接続から再送された場合、tarpittingの処理には回さずに、greylistingの処理に回ります。



Postgreyの起動モードを指定(taRgreyモード 125秒)
# vi /etc/init.d/postgrey
 #OPTIONS="--unix=$SOCKET" ← コメント化
 OPTIONS="--dbdir=$DBPATH --inet=127.0.0.1:60000 --tarpit=125 --targrey --retry-count=2 --delay=3600"

Postgreyの起動
# /etc/init.d/postgrey start

Postgreyの自動起動
# chkconfig postgrey on

Postfixの再起動
# /etc/init.d/postfix restart

Postfixがyum cronで自動アップデートしないよう制御
# vi /etc/yum.conf
 [main]内に以下を記述する
 exclude=postfix*


以上でtaRgreyの環境は完了です。

 

0 件のコメント:

Google検索