Starpit

Starpitという方法で効果的にスパムを排除できるらしい。

  参考→ Starpitでほぼ誤検出無く98%のスパムを排除

原理は動的IPと思われるところからの送信は一時的に保留にして再送信を要求するというもの。
スパムやウイルスは動的IPから送られる事が多いのと、再送信をしない事が多いという特性を突いた方法。

<7/10訂正 SATOH様ご指摘ありがとうございます。理解不足でスミマセン。。。>

原理は動的IPと思われるところからの送信を遅延させるというもの。
スパムやウイルスは動的IPから送られる事が多いのと、遅延させると待ちきれずに切断してしまう事が多いという特性を突いた方法。

postfix2.3であれば簡単に設定できるのだがsargeはpostfix2.1なので駄目。
(exprimantalに2.3があったが、依存関係でlibcなども上げる必要があり断念)

postfix2.2のソースにパラメータを付けてコンパイルするのでも良いらしい。
幸いにしてsarge-backportsにpostfix2.2がリリースされていたので、今回はそれを利用する。

/etc/apt/sources.listに追加
#backports
deb http://www.backports.org/debian/ sarge-backports main
deb-src http://www.backports.org/debian/ sarge-backports main

/etc/apt/preferences作成
Package: *
Pin: release a=sarge-backports
Pin-Priority: 200
Package: postfix lsb-base libldap2-dev
Pin: release a=sarge-backports
Pin-Priority: 999

まずは2.2をインストール(依存関係からlsb-baseとlibldap2-devも)
/usr/bin/aptitude update
aptitude install lsb-base/sarge-backports
aptitude install libldap2-dev/sarge-backports
aptitude install postfix/sarge-backports

その後backportsからソースを取得
cd /usr/src/
apt-get source postfix

ソースの修正
cd postfix-2.2.10
debian/rulesを修正
CCARGS=-DDEBIAN -DMAX_DYNAMIC_MAPS -DHAS_PCRE -DHAS_LDAP \
 -DHAS_MYSQL -I/usr/include/mysql \
 -DHAS_PGSQL -I`pg_config --includedir` \
 -DHAS_SSL -I/usr/include/openssl \
 -DUSE_SASL_AUTH -I/usr/include/sasl \
 -DSNAPSHOT \          ←この行を追加!!!
 -DUSE_TLS

パッケージのバージョンを変更する際はdebian/changelogも修正

パッケージ作成
ソースからパッケージ作成するには別途依存関係でインストールが必要なものがあった。
aptitude install lsb-release libdb4.3-dev libgdbm-dev libpcre3-dev libmysqlclient14-dev libsasl2-dev postgresql-dev
それらをインストールした後、いよいよパッケージ作成。
dpkg-buildpackage
沢山パッケージが作成されるが、必要なものだけインストールしれば良い。
自分の場合は本体だけ。

インストール
dpkg -i ../postfix_2.2.10-1bpo2.raku1_amd64.deb

パッケージを固定する
echo "postfix hold" | dpkg --set-selections

スパム対策を設定する
/etc/postfix/main.cfを修正
smtpd_client_restrictions = permit_mynetworks,
  check_client_access regexp:/etc/postfix/client_access,  ←この行を追加!!
  reject_rbl_client relays.ordb.org,permit

/etc/postfix/client_access作成
# *** S25R ***
/^unknown$/                                     sleep 90
/^[^\.]*[0-9][^0-9\.]+[0-9]/                    sleep 90
/^[^\.]*[0-9]{5}/                               sleep 90
/^([^\.]+\.)?[0-9][^\.]*\.[^\.]+\..+\.[a-z]/    sleep 90
/^[^\.]*[0-9]\.[^\.]*[0-9]-[0-9]/               sleep 90
/^[^\.]*[0-9]\.[^\.]*[0-9]\.[^\.]+\..+\./       sleep 90
/^(dhcp|dialup|ppp|adsl)[^\.]*[0-9]/            sleep 90

内容をdbに反映
postmap /etc/postfix/client_access

再起動
/etc/init.d/postfix restart