メールサーバのSPF(Sender Policy Framework)対応化

送信元アドレスを偽称した迷惑メール、フィッシングサイトへの誘導メールなどの被害を軽減できる仕組み。

【送信側の設定】
送信側がSPFに対応するメリットは、自分の管理ドメインになりすまされたメールの送信をSPFチェックによって判定できるようになる。(受信側が対応されていれば、自分の管理ドメインによるなりすましメール被害を軽減できる)

DNSサーバにSPFレコード(TXTレコード)を登録しておく
IN TXT v=spf1 +ip4:(送信元IPv4アドレス) -all”

MyDNSの場合には自動的にSPFレコードが追加される。
SPFレコードの詳細は送信ドメインを認証するためのSPFレコードに詳しくなろうが詳しい。

併せて、DMARCレコードにも対応しておくことが望ましい
_dmarc IN TXT v=DMARC1; p=none; rua=mailto:(集計レポートの送付先)
DMARCレコードは、MyDNSを使っている場合には、個別にレコード定義する必要がある。

【受信側】
受信側がSPFに対応するメリットは、SPFレコードが登録されたドメインにてなりすましされたメールを受信しないようにできることで、なりすましメールの被害を軽減できる。

Postfixの場合には、「備忘録」 Postfix(CentOS)でSPF対応しちゃう。に従って実装するとSPF対応できるようになる。

SPF対応するとメールヘッダに
Received-SPF: Pass (sender SPF authorized) …
のようなヘッダが付加されるようになる。

また、
$sudo grep ‘policyd-spf’ /var/log/maillog
とすることで正常に動作していることを確認することが出来る。

また、SPFチェックに引っかかる場合には、
Received-SPF: Permerror (SPF Permanent Error: Void lookup limit of 2 exceeded)
Received-SPF: Softfail (domain owner discourages use of this host)
Received-SPF: Neutral (access neither permitted nor denied)
Received-SPF: Fail (SPF fail – not authorized)
のようなヘッダが記録される。

SPFレコードが登録されていないドメインからのメールを受信した場合には、
Received-SPF: None (no SPF record)
のようなヘッダが記録される。

Received-SPF の内容については、postfix で postfix-policyd-spf-python ( or postfix-policyd-spf-perl ) を使ってSPF認証する(CentOS/ScientificLinux編)に詳しく記載されているので、参考になる。

ban4ipインストールしてみました

オープンソースアンカンファレンス金沢2016でT.Kabuさんからのご紹介のあった
fail2banをやめてBan4ipにしませんか?
を早速試してみました。
ApacheやSSH、postfix、dovecot等のログを解析して失敗を検知した接続元のIPアドレスをiptablesに書き込みしてフィルタリングするデーモンになります。
IPv6にも対応しているところが優れています。
CentOS7の環境でしたが、問題なく導入でき1日間で17回BANできています。
インターネット環境にサーバを公開するということは常に攻撃にさらされていると感じました。
自動BANツールを導入していない方はぜひ導入してみるとよいと思います。
なお、サーバを再起動する際には、banした設定が消えてしまうので /sbin/service iptables save を忘れずに!

mbox形式のデータをMaildir形式に変換する

サーバ移行作業中に誤ってメールをmbox形式で/var/spool/mail/(username) で受信してしまっており、Maildir形式に移行する必要が発生した。
優れたツールがあったので、紹介しておく。
wget http://perfectmaildir.home-dn.net/perfect_maildir/perfect_maildir.pl -O /usr/local/bin/perfect_maildir.pl
cd /usr/local/bin/
chmod u+x perfect_maildir.pl
./perfect_maildir.pl /home/(username)/Maildir < /var/spool/mail/(username) >> /tmp/migrate-maildir.log 2>&1
root権限での実行を想定しています。
上記を実行すると、/tmp/migrate-maildir.log には、
Inserted NNN messages into maildir /home/(username)/Maildir/ in N seconds
というログが表示され、実際にNNN件のメールデータが移行されています。

Postfix + POP before SMTP

SMTPの認証にPOP before SMTPを利用する機会は減ってきていると思うが、過去の互換性から利用を継続しなければならない場合も多い。
Cent OSにて導入をするためには、
pop-before-smtp-1.41-2.el5
compat-db-4.2.52-5.1
のRPMパッケージを導入したうえで、
pop-before-smtp-conf.pl, Postfix の main.cf を設定することとなる。
設定方法は、Fedora CoreでPostfixとDovecotでPOP before SMTPが参考になる。

Mailmanのデータを移行する

メーリングリストソフトであるMailmanを新しいサーバーにインストールしなおしたうえで、データだけを移行する場合には、次のディレクトリをコピーする。
/etc/mailman/
/var/lib/mailman/
移行が終わったら、正しく移行できていることをコマンドラインから確認する。
#登録済みメーリングリストを確認する
/usr/lib/mailman/bin/list_lists
#ml-testメーリングリストのメンバーを確認する
/usr/lib/mailman/bin/list_members ml-test
また、メーリングリスト管理インターフェイスとしてApacheなどの設定ファイルにも定義をしている場合には、/etc/httpd/conf.d/*.conf の移行を行う必要がある。

HELOホスト名を変更する方法

Helo command rejected: Host not found;とmessageログに記録されている場合には、送信先SMTPサーバーにおいてHELOホストがDNSに登録されていないためにおこる。
通常は、HELOホスト名はhostnameに記述されたホスト名が使われるがこのホスト名をHELOコマンドで使用したくない場合には、Postfix のセキュリティ対策に記載があるようにmain.cf に「smtp_helo_name」のパラメータを付加してpostfixサービスを再起動することで変更ができる。

SpamAssassinのメモリ使用量が異常

今日突如SpamAssassinのメモリ使用量が1GBを超えてスワップをしてしまい、サーバーがダウンしてしまった。
最近はメールの受信件数がかなり多くなっていたことが気になっていたが、さすがにここまでになるとは思わなかった。
いろんなサイトを参照させていただき、有用となる情報をまとめて対応してみた。
メーリングリストより・・・
/etc/mail/spamassassin/local.cf にて
bayes_expiry_max_db_size 1000000
bayes_auto_expire 0
を追加してspamassasinを再起動する。
SpamAssassin によるスパムメール対策より・・・
/etc/procmailrc にて
:0fw
*!^X-Spam.*
|spamassassin
となっている場合には
:0fw
*!^X-Spam.*
| /usr/bin/spamc
として起動するプログラムをspamcに変更する。

匿名転送メールサービス ~ Alias Mail

以前このブログで20分間だけ使える使い捨てメールアドレスがすぐに作成できる「使い捨てメール」というものを照会したが、余り使い勝手がよくなかったので、実際にMail_mimeDecodeを使って転送メールサービス「Alias Mail」を作ってみた。
まだmessage/rfc822などのcontent-typeが処理できないなどの問題はあるものの、大部分のメールは正しく転送されるように処理できていると思う。
転送期間は1日、3日、5日、1週間、1ヵ月から選択することができ、必要に応じて転送されたメールの本文ヘッダにあるリンクから転送期間を延長することができるようにしてあります。
もし良かったら使ってみてください。そしてご意見や改善点などありましたらコメント入れていただけますとうれしいです。
http://kataude.jp/alias_mail/

postfixでバーチャルドメイン運用

/etc/postfix/main.cf のmydomainにabc.comが定義されており、hogehoge@def.com でもhogehoge@abc.com と同じように abcユーザーのメールボックスに入ってよい場合
⇒/etc/postfix/main.cf のmydestination に def.com を追加する
ユーザーアカウントならびにドメインごとに異なる メールボックスに配送する必要がある場合。ももしくは、/etc/postfix/main.cf のmydomainにドメインが定義されて場合
⇒/etc/postfix/main.cf に
virtual_alias_maps = hash:/etc/postfix/virutal
と定義した上で、
/etc/postfix/virtual に
ドメイン名 anything
メールアドレス 配送先アカウント
という記述を行う。
なお、
@ドメイン名 配送先アカウント
と記述すると該当ドメインにおいてメールアドレスが定義されていないものは指定されたアカウントへ配送できる。