SPFの導入
SPFですよ。SPF!
Sun Protection Factorでも、Specific Pathogen Freeでもないですよ。
Sender Policy Frameworkのことですよ。
詳しくは、IT用語辞典などを見てもらうことにして、
spam対策として期待されている技術だそうですよ。
まぁ、私個人としてはあまり期待していないんですが・・・(をひ
これを入れないと、メールが送れなくなっちゃうかもしれないので導入しておきましょう。
少なくとも、送信側は。
「あまり期待していない」
だって、結局はDNSを自分で操作できるspamerには何の意味も無いから。
spamerって結構自分でドメイン持っちゃってるからねぇ・・・
まぁ、「やっていないよりはマシ」位の気持ちで設定しましょう(゚ω゚)b
やること一覧 ・送信側の設定 ・受信側の設定
関連ページ ・postfix with smtp auth ・独自ドメインの取得(VALUE DOMAINの場合) ・メール転送時にSPF認証が失敗する
メールを送信するとき、「このメールは正式なメールですよ」と証明する方法。
送信の証明は、単にドメインのtxtレコードを編集するだけですが・・・
システム全体としてみれば、MTA:DNSの各管理者が協力しないといけないものらしい。
自宅鯖だから、全部1人でやってると思うけど・・・
まぁ、設定。
VALUE DOMAINさんでは、そのまんまTXTレコードが編集可能なので書き込めばいいです。
はい。
書式としては、
(例:au one netの場合)
txt @ v=spf1 +mx +a:nmomta.auone-net.jp +ip4:211.5.2.125 ~mx:auone-net.jp -all
といった感じになる。
それぞれで説明していくと
"txt @":VALUE DOMAINで、TXTレコードを書くときのお約束。 "v=spf1":SPFを使いますよ〜といった宣言文。その後は、メール送信の条件文。 "+":続く条件のところから「メールが送信されます(肯定:pass)」という記号。 "~":続く条件のところから「メールが送信されるかも知れない(弱い否定:softfail)」という記号。 "-":続く条件のところから「メールは送信されません(強い否定:fail)」という記号。 "mx":DNSに登録されているメール鯖(MXレコード) "a:":ホスト名を指定するときの記号。 "ip4:":IP(ver4)を指定するときの記号。 "all":それ以外の全てをあらわす記号。全部通して意訳すると、
--IP/domain-- nmomta.auone-net.jp=>ラウンドロビン(多数のIP)<=>nm0[1-9]omta0[1-9].auone-net.jp relay-mta.dion.ne.jp=>211.5.2.125<=>rns01.dion.ne.jp dion.ne.jp(mx)=>ispmail01.dion.ne.jp/ispmail02.dion.ne.jp<=>61.200.164.[33,36] --outboundリレー-- 自分のドメイン>relay-mta.dion.ne.jp>nmomta.auone-net.jp(ラウンドロビン動作)>[internet] relay-mta.dion.ne.jp>nmomta.auone-net.jpのリレーは相変わらず謎。設定したSPFがきちんと機能しているかは に
受信側の設定ではMTAへのSPF確認の実装が必要になります。
で、うちで紹介しているpostfixにはSPFの確認手段が搭載されていませんし、
今後、搭載される予定も無いようです。
なので、大抵の方は外部のソフトを利用されているようですが・・・
そのソフトで一番有名なpostfix-policyd-spf-perlは、まんまperlなんですよ。
つまり、純正玄箱の貧弱なperlでは動きません(確認済み)
で、見つけたのがpolicyd-spf-fsというもの。
これはC言語で書かれているとのことで、postfix-policyd-spf-perlより高速に動いてくれる・・・
と思います。
まぁ、うちでは動いてくれればそれで御の字なんですけどねw
で、事前準備です。
libspf2のインストール
libspf2-1.2.5.tar.gzを手に入れる
libspf2 - SPF Library - Home
そのままコンパイルすると以下のようなエラーが出るので修正が必要。
make時のエラー内容 ┃make[4]: Entering directory `/mnt/home/[username]/libspf2-1.2.5/src/spfquery' ┃source='spfquery.c' object='spfquery.o' libtool=no \ ┃depfile='.deps/spfquery.Po' tmpdepfile='.deps/spfquery.TPo' \ ┃depmode=gcc /bin/sh ../../config/depcomp \ ┃gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../src/include -I../../src \ ┃ -g -O2 -Wall -c spfquery.c ┃spfquery.c: In function `response_print_errors': ┃spfquery.c:265: parse error before `int' ┃spfquery.c:275: `i' undeclared (first use in this function) ┃spfquery.c:275: (Each undeclared identifier is reported only once ┃spfquery.c:275: for each function it appears in.)例のあれ
$ tar xvfz libspf2-1.2.5.tar.gz $ cd libspf2-1.2.5 $ ./configure --prefix=/usr $ patch -p0 <~/libspf2-1.2.5p1.obj libspf2-1.2.5パッチ1(libspf2-1.2.5p1.tar.gz) md5sum crc32:4127A48C 参考:building libspf2 on NetBSD and Linux: questions and patches 注:パスはパッチを置いた場所を指定する。 $ make $ make check # make installインストールされるもの
[prefix]/bin/ spf_example spfd spfquery spftest spf_example_static spfd_static spfquery_static spftest_static [prefix]/include/spf2/* [prefix]/lib/ libspf2.a libspf2.la libspf2.so libspf2.so.2 libspf2.so.2.0.0おまじない
# strip -p /usr/bin/spf*
policyd-spf-fsのインストール
$ tar xvfz policyd-spf-fs_23.tar.gz $ cd policyd-spf-fs_23 $ patch -p0 <~/policyd-spf-fs_23p1.objspf_dns_internal.hがねぇよヽ(`Д´)ノ といわれるので、
spf_dns_internal.h(spf_dns_internal.tar.gz) md5sum crc32:D7DE1D09 を、/usr/include/spf2/に置く。# cd /usr/include/spf2# wget http://csourcesearch.net/data/package/libspf2/libspf2-1.2.5/src/include/spf_dns_internal.h参考:csourcesearch.net File: libspf2-1.2.5/src/include/spf_dns_internal.h
$ vi Makefile (変更) ┃PREFIX ?= /usr ┃BIN = $(PREFIX)/sbin ┃CFLAGS = -g -O2 -Wall -DHAVE_GETOPT_LONG_ONLY -DHAVE_NS_TYPE 注:prefixを/usr/localから/usrに変更 注:インストール先を$(PREFIX)/binから$(PREFIX)/sbinに変更 注:コンパイルオプションに"-DHAVE_NS_TYPE"を追加 $ make # make installインストールされるもの
[prefix]/sbin/policyd-spf-fs
postfixにポリシーを組み込む(READMEの通り)
# vi /etc/postfix/master.cf (追加) ┃# Policy daemon for SPF ┃spf-policy unix - n n - - spawn ┃ user=nobody argv=/usr/sbin/policyd-spf-fs --debug=1 # vi /etc/postfix/master.cf (追加) ┃smtpd_sender_restrictions = ┃ ・・・(自分の設定)・・・ ┃ reject_unknown_sender_domain ┃ reject_unverified_sender ┃ check_policy_service unix:private/spf-policy 注:順番を間違えないこと。postfixのリロード
# /etc/init.d/postfix reload 注:一応、不正中継テストをしておくべき。ちなみに、デフォルトでの動作は、
戻るなら押せ!