*

SPFの送受信設定

公開日: : 最終更新日:2015/12/31 投稿者:raru CentOS7, Linux, サーバ, メール

今回はSPFの設定を行います。
SPFとは何かということについてはここでは割愛しますが、メールの送信者が正しいか正しくないか認証する仕組みです。
キャリアメールの「なりますメール」のフィルターなどに利用されたりします。

SPFの送信設定

自分の持っているサーバのメールに正しいSPF送信設定を行うことで、携帯電話などにメールが送信可能になります。
ユーザの設定しているフィルターによっては、何も設定されていないSMTPからのメールは弾かれてしまうのですがSPFを設定することで概ね届くようになります。

SPFレコードの設定

SPFの送信設定は簡単で、DNSサーバのTXTレコードに特定の記法でSPFレコードを追加するだけです。
以下にいくつか例を示します。

v=spf1 +ip4:xxx.xxx.xxx.xxx -all

これはipによる認証を行っています。
+は合格条件ですので、指定のipv4アドレスを持つものは認証に成功。
-は失敗条件なので、それ以外の全ては失敗となります。
失敗にはもう少しゆるい失敗を示す ~ があります。

これらは受信側のSMTPの設定に依存するのですが、基本的には-は受信拒否、~は失敗だけと受信するようなものが多いのではと思います。

v=spf1 +a:hogehoge.com -all

また上記はドメインによる認証を行っており、hogehoge.comのAレコードと一致するIPから送信されているものを合格としています。

詳細はいろいろなサイトにありますが、なんだかんだでwikipediaがわかりやすいので、記法についてはwiki参照ということで。

上記設定を施すことで、自分のサーバから送られるメールが迷惑メールなどにならずに受信されるようになります。

動作確認

自分のサーバからgmailやyahoo mailなどにメールを送信して「メールのソース」を表示してみてください。
その中にspfのヘッダが表示され、PASS等の文字が出ていれば認証に成功しています。

SPFの受信設定

次は受信側の設定を行います。
この設定を行うことで、自分のサーバで受信するメールのうちSPFの正しく指定されていないものを弾いたりできます。
簡易なスパムなどは概ねこれで弾けるのではないでしょうか。
あまり弾きすぎると今度は、メール機能が緩かったりするシステムからメールが届かなくなったりするかもしれませんが大体大丈夫だとは思います。
ASP系のサービスでアカウントごとにメールアカウントを作成するがそのときにenvelope-fromを書き換えていたりするサービスがあると受信できなくなるかもしれません。ヘッダーFromなら大丈夫です。

パッケージのインストール

今回はPythonのspf設定パッケージ群をインストールしてみます。
perlのものもあるのですが、Pythonのものの方が細かい設定が可能とのことです。
私は細かい設定をしていないのでほぼ意味がないのですが、今後を見据えてこちらで。

// pydnsインストール
[root@metal ~]# cd /usr/local/src/
[root@metal src]# wget https://pypi.python.org/packages/source/p/pydns/pydns-2.3.6.tar.gz
[root@metal src]# tar xvzf pydns-2.3.6.tar.gz
[root@metal src]# cd pydns-2.3.6
[root@metal pydns-2.3.6]# python setup.py install

// pyspfインストール
[root@metal pydns-2.3.6]# cd /usr/local/src/
[root@metal src]# wget https://pypi.python.org/packages/source/p/pyspf/pyspf-2.0.9.tar.gz
[root@metal src]# tar xvzf pyspf-2.0.9.tar.gz
[root@metal src]# cd pyspf-2.0.9
[root@metal pyspf-2.0.9]# python setup.py install

// pypolicyd-spfインストール
[root@metal pyspf-2.0.9]# cd /usr/local/src/
[root@metal src]# wget https://launchpad.net/pypolicyd-spf/1.3/1.3/+download/pypolicyd-spf-1.3.tar.gz
[root@metal src]# tar xvzf pypolicyd-spf-1.3.tar.gz
[root@metal src]# cd pypolicyd-spf-1.3
[root@metal pypolicyd-spf-1.3]# python setup.py install

// パッケージインストーラを入れてipaddrをインストール
[root@metal pypolicyd-spf-1.3]# cd /usr/local/src/
[root@metal src]# wget http://peak.telecommunity.com/dist/ez_setup.py
[root@metal src]# python ez_setup.py
[root@metal src]# wget http://peak.telecommunity.com/dist/ez_setup.py
[root@metal src]# easy_install ipaddr
// 何も表示されなければOK Ctrl+Cで停止してください
[root@metal src]# /usr/bin/python /usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf 

// 不要ファイルの削除
[root@metal src]# rm pydns-2.3.6.tar.gz 
[root@metal src]# rm pypolicyd-spf-1.3.tar.gz 
[root@metal src]# rm pyspf-2.0.9.tar.gz 

PythonのSPFパッケージは三位一体となっているようでして、上記全てのインストールが必要でした。
正直各々のパッケージの役割を理解しておりません。
dns周りの機能群とspfそのものと、policy設定系の3つなんだなぁという予想くらいです。

一旦以上でインストールは完了です。

設定ファイル修正

今度は設定ファイルを編集していきます。

[root@metal src]# vi /etc/postfix/master.cf
[root@metal src]# diff /etc/postfix/master.cf.org /etc/postfix/master.cf
...
127a129,132
> #
> policy-spf  unix  -       n       n       -       0       spawn
>   user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/python-policyd-spf/policyd-spf.conf
[root@metal src]# vi /etc/postfix/main.cf
[root@metal src]# diff /etc/postfix/main.cf.org /etc/postfix/main.cf
...
> smtpd_recipient_restrictions =
...
>     check_policy_service unix:private/policy-spf
> 
> policy-spf_time_limit = 3600s

// SELinuxの設定
[root@metal src]# yum install policycoreutils-python
[root@metal src]# semanage fcontext -a -t postfix_etc_t "/usr/lib/python2.7/site-packages/ipaddr-2.1.11-py2.7.egg"
[root@metal src]# restorecon -R /usr/lib/python2.7/site-packages/ipaddr-2.1.11-py2.7.egg
[root@metal src]# systemctl restart postfix

master.cfとmain.cfを編集して、spfの機能を有効にしています。

またその次にSELinuxの設定を行っています。
普段SELinuxを無効化している方は不要です。

動作検証

gmailやyahoo mailなどから自分のサーバ宛にメールを送信し/var/log/maillogに以下のように出力されていれば動作しています。

policyd-spf[xxxxx]: Pass

エラーが出力されている場合には、master.cfで追加した設定のパスや、インストールしたパッケージ群の権限が悪い場合が多いので確認してみてください。

あとがき

正直このあたりの設定は動いてるだけで、あまり理解できていないです。
SPFという仕組み自体はシンプルなので理解しやすいのですが、spfのパッケージ群やpostfixのmaster.cfの書き方、意味が理解できていません。

そろそろ体系的に勉強した方がいいのかな、と感じ始めています。

参考サイト

参考というより、SELinux以外ほぼまんまです。
レンタルサーバー・自宅サーバー設定・構築のヒント

関連記事

no image

RaspbianにZabbixをインストール

今回はRaspbianにZabbixをインストールしてみたいと思います。 前回のPidoraでは「

記事を読む

no image

Raspberry Pi 2(Raspbian) 初期設定

性懲りもせずにRaspberry pi2を購入しました。 初代に比べて相当スペックが向上しており、

記事を読む

no image

RaspbianにRedmine3を導入

普段Zabbixを入れて運用しいてるRaspbianにRedmineも入れてみました。 ややスペッ

記事を読む

no image

CentOSにSSH鍵認証で接続するGitリポジトリを作成

今回友人と共同開発を行なうと思い、ざっくりとGitサーバを建ててみました。 私はSVNの方が好きな

記事を読む

no image

iptablesで特定のIPからの接続を遮断

WordPressを利用して作成しているこのブログなのですが、管理画面へのログインリンクがあるせいな

記事を読む

no image

Raspbian(jessie)にssh鍵認証で接続

Debianがjessieになって、sshd_configのデフォルトの設定が変わりました。 それ

記事を読む

no image

apache2.4でBOTからのアクセスを排除

私は何か数字が動くものを見るのが好きでgoogle analyticsのリアルタイム情報をよく見てい

記事を読む

no image

CentOS 7 で ruby on rails 環境構築

気づいたらCentOS7が出てから時間が立っていました。 そろそろ新しく建てるサーバはCentOS

記事を読む

no image

Raspbianでメール送信 ssmtp編

Raspbianで監視などをおこなっているとメールが送信したくなります。 とりあえず何かと管理用に

記事を読む

no image

SSL脆弱性/セキュリティ設定

昨今POODLEやらFREAKやらと大きめなOpenSSLの脆弱性が多発していました。 最近では安

記事を読む

Comment

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑