OpenBSD spamd でメールフィルタリング(FreeBSD9)
OpenBSD spamd でメールフィルタリングを行う設定です。
今回は FreeBSD 上で動作させます。
環境
OS: FreeBSD 9
FreeBSD9を使用していますが、 pkg の spamd が古いらしいため、 後ほど FreeBSD10 の手順も作成します。
準備
OSインストール後、 pf のモジュールをロードさせます。
# kldload pf
kldstat コマンドで「pf.ko」というのがあれば大丈夫です。
# kldstat
Id Refs Address Size Name
1 7 0xffffffff80200000 1611688 kernel
2 1 0xffffffff81a12000 52f2 fdescfs.ko
3 1 0xffffffff81a18000 2bcf pflog.ko
4 1 0xffffffff81a1b000 307d3 pf.ko
上記でうまくいかない場合はカーネルの再コンパイルを行います。
# cd /usr/src/sys/amd64/conf/
# cp GENERIC MYGENERIC
「 MYGENERIC 」に以下を追加します。 # Enabling Packet Filter(PF)| device pf # Packet filter device pflog # Packet filter logging device pfsync # Packet filter state table logging
# Enabling ALTQ (for Packet Filter(PF))
options ALTQ # Enable ALTQ.
options ALTQ_CBQ # Build the ``Class Based Queuing'' discipline.
options ALTQ_RED # Build the ``Random Early Detection'' extension.
options ALTQ_RIO # Build ``Random Early Drop'' for input and output.
options ALTQ_HFSC # Build the ``Hierarchical Packet Scheduler'' discipline.
options ALTQ_CDNR # Build the traffic conditioner.
options ALTQ_PRIQ # Build the ``Priority Queuing'' discipline.
options ALTQ_NOPCC # Required if the TSC is unusable.
# config MYGENERIC
# cd /usr/src
# make buildkernel KERNCONF=MYGENERIC
# make installkernel KERNCONF=MYGENERIC
再起動
# sync
# sync
# sync
# shutdown -r now
環境設定
spamdをインストール
# pkg install spamd
「/etc/fstab」に以下を追加
fdescfs /dev/fd fdescfs rw 0 0
適用
# mount -a
「/etc/rc.conf」を編集
pf_enable="YES"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pf_rules="/etc/pf.rules"
pflog_flags=""
gateway_enable="YES"
obspamd_enable="YES"
obspamd_flags="-h mysntp.local -G 25:4:864 -l 127.0.0.1 "
obspamd_grey="YES"
obspamlogd_enable="YES"
obspamlogd_flags="-I -i lo0"
pfspamd_enable="YES"
pfspamd_flags="-g -v"
「/etc/pf.rules」を編集します。
# インターネットと通信する側の NIC 名
em0_if = "em0"
# spamdへnatさせる
table <spamd-white> persist file "/usr/local/etc/spamd/white-db"
rdr on $em0_if inet proto tcp from any to port smtp -> 127.0.0.1 port 8025
rdr on $em0_if inet proto tcp from <spamd-white> to port smtp -> 127.0.0.1 port 25
# Allow Local Loop back
set skip on lo0
# localhostのみでListen
pass in proto tcp from any to lo0 port spamd keep state
pass in proto tcp from any to lo0 port smtp keep state
# Allow all packets to go out, and keep state of them
pass out all keep state
「rdr on $em0_if inet proto tcp from <spamd-white> to port smtp -> 127.0.0.1 port 25」 については実際に設置されている自分のメールサーバを指定してください。
例えばメールサーバが「192.168.0.10」の場合は、「127.0.0.1」の部分をそのIPにします。
# vim /usr/local/etc/spamd/white-db
許可したいアドレスを「ネットワークアドレス/ネットマスク長」のように記入
192.168.152.1/32
再起動後、適用させる
# pfctl -f /etc/pf.rules
変更したテーブルのみを適用させる場合は以下のようにコマンドを利用する。
# pfctl -t spamd-white -T replace -f /usr/local/etc/spamd/white-db
persist テーブルの内容を表示する
# pfctl -t spamd-white -T show
spamdの設定
設定ファイルをコピーする。
cp /usr/local/etc/spamd/spamd.conf.sample /usr/local/etc/spamd/spamd.conf
必要であれば「/usr/local/etc/spamd/spamd.conf」ファイルを編集します。
今回はホワイトリストはpfで処理しているので、ブラックリストのみ処理させるように、 編集・追加します。
all:\
:uatraps:nixspam:china:korea:myblack: # myblack を追加
myblack:\
:black:\
:method=file:\
:file=/usr/local/etc/spamd/block-db:
ブロックしたいIPのデータを作成
# vim /usr/local/etc/spamd/block-db
作成方法はホワイトリストと同じです。
ブラックリストの取得
「spamd-setup」を実行します。
# spamd-setup
これで公開されているブラックリストを取得してきてくれます。
定期的に実行する必要があるので、cronに登録しておきます。
いったんサーバを再起動させます。
spamdbによる手動登録
man による説明は以下となっています。
whitelisting
# /usr/local/sbin/spamdb -Y foo.example.org -a 1.2.3.4 2.3.4.5
# /usr/local/sbin/spamdb -Y foo.example.org -Y bar.example.org -a 1.2.3.4
blacklisting
# /usr/local/sbin/spamdb -Y foo.example.org -ta 1.2.3.4 2.3.4.5
また、スパム判定用のダミーメールアドレスを登録することもできます。
# /usr/local/sbin/spamdb -T -a 'trapmeil@trapdmain.localhost'
「trapmeil@trapdmain.org」を自分のサイト等に入れて、クローニングさせます。
<a herf="trapmeil@trapdmain.localhost"></a>
これで上記のメールアドレス宛に送信してきた場合はスパマーだと分かります。
状態を確認するときは「spamdb」と入力します。
まとめ
メールフィルタリングのシステムは他にもいくつかありますが、 OpenBSD spamd の場合は既存の環境を壊さずに追加できる点が良いと思います。
また、自身がダミーのメールサーバとして動作し、 実際のメールサーバが何であっても利用可能なのも有用です。
最初に記述しましたが、後ほどFreeBSD10用のものも作成します。
参考資料・リンク
The FreeBSD Diary -- Fighting spam with pf
pf.conf の設定順序 - sparcintosh の気まぐれ日記
FreeBSD Enable PF ALTQ Firewall Support
FreeBSDのローダブルモジュール入門 - syohex’s diary
PF(パケットフィルタ) on FreeBSD | シカでした。
Spamd Greylisting Tarpit Spam Protection @ Calomel.org
更新履歴
2015/10/10 作成
2015/10/22 pf のルールを修正