プロジェクト

全般

プロフィール

PostfixでSPF認証に対応する

※Postfixは運用中のものとする
※DNSを利用できるものとする

送信側の設定

  • DNSのゾーンにTXTレコードをいずれか追加
    # mxからのメールを送信する
    _spf IN TXT v=spf1 mx ~all
    
    # 特定のIPアドレスのメールを送信する
    _spf IN TXT v=spf1 +ip4:192.168.0.1 +ip4:127.0.0.1 ~all
    
  • 正しく設定されているか確認(DNSの浸透まで時間がかかる場合がある)
    # dig example.com txt
    ;; ANSWER SECTION:
    example.com.        299     IN      TXT     "v=spf1 +ip4:192.168.0.1 +ip4:127.0.0.1 -all" 
    

受信側の設定

パッケージの導入

  • EPELリポジトリを導入する。
    # yum install epel-release
    
  • SPFのパッケージをインストールする
    # yum install perl-NetAddr-IP perl-Mail-SPF perl-Sys-Hostname-Long perl-Sys-Syslog wget
    
  • SPF用のperlリソースを取得する
    # wget https://launchpad.net/postfix-policyd-spf-perl/trunk/2.011/+download/postfix-policyd-spf-perl-2.011.tar.gz
    
  • 展開、配置します
    # tar xzf postfix-policyd-spf-perl-2.011.tar.gz
    # cd postfix-policyd-spf-perl-2.011
    # cp -p postfix-policyd-spf-perl /usr/local/lib/policyd-spf-perl
    
  • 他に不足パッケージがないか確認する。下記のように確認できること。
    # perl /usr/local/lib/policyd-spf-perl
    応答なし[ENTER]
    action=DUNNO
    終了[Ctrl+C]
    
    例)
    Can't locate Sys/Syslog.pm in @INC……
    等が出る場合、下記のように実行して不足パッケージを導入する。
    # yum install perl-Sys-Syslog
    
  • Postfixのmaster.cfの末尾に以下を追加する
    # vi /etc/postfix/master.cf
    -----------------------------
    policy     unix  -       n       n       -       0       spawn
      user=nobody argv=/usr/local/lib/policyd-spf-perl
    
  • Postfixのmain.cfに以下を追記する。「smtpd_recipient_restrictions」がすでにある場合、「check_policy_service」を追記する
    # vi /etc/postfix/main.cf
    -----------------------------
    policy_time_limit = 3600
    smtpd_recipient_restrictions =
        permit_mynetworks,
        reject_unauth_destination,
        check_policy_service unix:private/policy
    
  • postfixを再起動する
    # systemctl restart postfix
    

テスト

受信テスト

  • 他のメールサーバから本サーバにメールを送信する。
  • /var/log/maillogに下記の記載があること
    # tailf /var/log/maillog
    postfix/policy-spf[xxxx]: Policy action=PREPEND Received-SPF: pass (……中略……)
    
  • メールを正しく受信できていること

送信テスト

  • SPFチェック可能な他のサーバにメールを送信する
    # mail test@example.com
    Subject: spf-test
    spf-test
    .
    EOT
    
  • メールを送信されたサーバで、/var/log/maillogにDNS設定したSPFチェックを取得しpassしたこと
    # tailf /var/log/maillog
    postfix/policy-spf[xxxx]: Policy action=PREPEND Received-SPF: pass (……中略……)
    
  • メールを正しく受信できていること