SPF+greylisting

milter-greylistingを利用して、受信メールのSPFを検証し、問題ある結果だった場合はgreylistの対象とします。

milter-greylistのインストールと設定

  1. インストールします。
    # apt install milter-greylist geoip-bin
  2. /etc/milter-greylist/greylist.confを修正します。
    pidfile "/var/run/milter-greylist.pid"
    dumpfile "/var/lib/milter-greylist/greylist.db" 600
    dumpfreq 10m
    
    ※デフォルトはSendmail用の設定になっているので、Postfix用に修正。ただし、ソケットのパスとユーザーは変えます。
    # For sendmail use the following two lines
    #socket "/var/run/milter-greylist/milter-greylist.sock"
    #user "smmsp"
    
    # For Postfix uncomment the following two lines and comment out the
    # sendmail ones above.
    #socket "/var/run/milter-greylist/milter-greylist.sock" 660
    #user "postfix"
    socket "/var/spool/postfix/milter-greylist/milter-greylist.sock" 660
    user "greylist"
    
    ※ログの書き出し先を個別ファイルにした場合は、手動で書き出し先などを作らなければならないようです…
    # Log milter-greylist activity to a file
    #stat ">>/var/milter-greylist/greylist.log" \
    #      "%T{%Y/%m/%d %T} %d [%i] %f -> %r %S (ACL %A) %Xc %Xe %Xm %Xh\n"
    # Same, sent to syslog
    stat "|logger -p local7.info" \
          "%T{%Y/%m/%d %T} %d [%i] %f -> %r %S (ACL %A) %Xc %Xe %Xm %Xh"
    
    # Be verbose (or use -v flag)
    #verbose
    
    # Do not tell spammer how long they have to wait
    quiet
    
    # MX peering
    #peer 192.0.2.17
    #peer 192.0.2.18
    
    ※localhostは[::1]になるので、ipv6も指定します。
    # Your own network, which should not suffer greylisting
    list "my network" addr { 127.0.0.1/8 10.0.0.0/8 192.0.2.0/24 ::1/128 }
    ここから下は、設定を追加します。
    ※(使っていなくても)GeoIPのエラーが出るので、dbの場所を指定。
    # GeoIP database
    geoipdb "/usr/share/GeoIP/GeoIP.dat"
    
    ※if_addr云々というエラー抑止と、spf selfを使用するための設定。グローバルアドレスを指定。
    # localaddr
    localaddr 153.126.xxx.xxx
    
    ※greylistingで待たせる時間を指定(デフォルトの30分は長すぎるため、2分に設定)
    # Greylist default
    greylist 2m
  3. confファイルの下の方には、ホワイトリストやブラックリストの指定があります。これらについては、使用状況によって変わるので適宜メンテナンスしてください。
    SPF+greylistingを使う上で一番簡単なのは、my network以外はすべてgreylistとする設定です。この設定だとすべてのメールがgreylistの対象になるように見えてしまいますが、SPFの結果問題ない場合はgreylistは自動的にスキップされます。
    # And here is the access list
    racl whitelist list "my network"
    #racl whitelist list "my friends"
    #racl whitelist list "broken mta"
    #racl whitelist dnsrbl "MTAWL"
    #racl blacklist urlcheck "userpref" $usrRBL "CBL" dnsrbl "CBL" \
    #               msg "Sender IP caught in CBL blacklist"
    #racl blacklist $usrRBL "SBL" dnsrbl "BBL" \
    #               msg "Sender IP caught in SBL blacklist"
    #racl blacklist $usrRBL "NJABL" dnsrbl "NJABL" \
    #               msg "Sender IP caught in NJABL blacklist"
    #racl greylist list "grey users" dnsrbl "SORBS DUN" delay 24h autowhite 3d
    #racl greylist list "grey users" delay 30m autowhite 3d
    racl greylist default
    
    ただ、私の場合はmilter-greylistの機能であるspf selfを使用しています。spf selfは、DNS側のSPF設定に"+all"が入っていて事実上SPFが無効化されているような状態のものを判別させる設定です。
    詳細については、man greylist.confを参照してください。
    # And here is the access list
    racl whitelist list "my network"
    racl greylist spf self
    racl whitelist spf pass
    racl greylist default
  4. /etc/default/milter-greylistを修正します。こちらは、milter-greylistを起動するときのスクリプトでパラメータとして指定する内容になります。
    また、ここでENABLED=1を指定しないと、そもそも起動できません。
    # Change to one to enable milter-greylist
    # Don't forget to edit the configuration file 
    # /etc/milter-greylist/greylist.conf
    ENABLED=1
    
    PIDFILE="/var/run/milter-greylist.pid"
    # SOCKET="/var/run/milter-greylist/greylist.sock"
    SOCKET="/var/spool/postfix/milter-greylist/milter-greylist.sock"
    # USER="root"
    
  5. milter-greylistのソケットはgreylistの権限が必要になるため、postfixユーザーをgreylistグループに追加します。
    # adduser postfix greylist
    # service postfix restart
  6. milter-greylistを起動します。
    # service milter-greylist start
    ただ、起動しただけだとソケットが作られないようにも見えます。グループを変えたりしていることもあり、まとめてrebootしてしまったほうが安全かもしれません。

Postfixの設定

  1. /etc/postfix/main.cfに、milterの使用を追加します。
    clamav-milterも入れているので、その前に指定して、余計なスパムはアンチウイルスフィルター到達前に拒否するようにしています。
    # milter
    smtpd_milters = unix:/milter-greylist/milter-greylist.sock, unix:/clamav/clamav-milter.ctl
    
  2. Postfixに新しい設定を反映します。
    # service postfix reload

メールの送受信を行い、/var/log/mail.logや、届いたメールのヘッダを見ながら正常に動作しているか確認してください。なお、動作確認中は/etc/milter-greylist/greylist.confのverboseオプションを有効にするとログの内容が増えます。

補足


目次へ戻る