*

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

PidoraにZabbix2.2を入れてみた

※完璧な状態ではありません。 こちらの記事のzabbix設定周りを行うと解決する可能性がありま

記事を読む

no image

ZabbixでSSL証明書期限チェック

zabbixは初期状態でhttps系の監視が微妙なため、証明書期限の監視設定などを行ってみたいと思い

記事を読む

no image

CentOS7にGitLab 9をインストールして日本語化

最近CentOS7にGitLabを入れて、日本語化してみました。 最近9が出たようで、あまり参考に

記事を読む

no image

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

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

記事を読む

no image

CentOS7にウイルスソフト(Clamd)を導入

今回はLinuxのウイルス対策ツールのClamdの導入を行いたいと思います。 Windowsマシン

記事を読む

no image

Raspberry Pi/ラズベリーパイ にFedora(Pidora)をインストール

Raspberry PI2にFedoraをインストール 注文していたRaspberry P

記事を読む

no image

RaspberryPI3にCentOS7をインストール (mac利用)

いつの間にやらRaspberryPI 3が発売し、さらにはCentOSまでもがraspberry p

記事を読む

no image

RaspberryPi2のFedora22にOpenVPN構築

コツコツと以前購入してoverclockしたraspberry pi2にOpenVPNを構築していま

記事を読む

no image

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

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

記事を読む

no image

Firewalldで特定IPからの接続をdrop

このサイトは見ての通りwordpressなのですが、wordpressではloginのurlが推測さ

記事を読む

Comment

Message

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

PAGE TOP ↑