自宅サーバの SMTP-AUTH のパスワードが割れたので Google Workspace に移行した件
我が家では複数台の自宅サーバを設置していて、各種メールアドレスも含めサービスを提供している。
今回、残念なことに数年パスワードを変更していなかった家族のアカウントのパスワードが割れてしまい、spam 送信の踏み台となってしまった。
なお、SSH などは公開鍵認証なので、影響範囲はメール関連のみとなる。
Table of Contents
経緯
大まかな流れはこんな感じ。
- バウンスが増えたことに気付く。
- 当初はバウンスアタックだと思って対応していたが、ログを見ると SMTP-AUTH で正しく認証されていることに気付く。
- とりあえず該当ユーザを無効化した上でキューを削除。
- しばらくログを監視して対処できたことを確認。
Postfix の流量自体は Zabbix で監視していて、その中でバウンスが増えてきたことに気付いた。
当初は内側の問題とは思わず、バウンスメールアタックかと思って調査していたが、メールのキューを除くと別にバウンスメールとは思えないものが含まれていたこと、そしてログを見た限りでは SMTP-AUTH で正しく認証されているように見えたことから、バウンスメールアタックではなさそうだった。
Feb 21 18:00:52 ulysses postfix/smtpd[17127]: D16E352454D: client=wsip-24-120-10-18.lv.lv.cox.net[24.120.10.18], sasl_method=PLAIN, sasl_username=xxxx@yyyy.com
Feb 21 18:00:53 ulysses postfix/cleanup[19253]: D16E352454D: message-id=<8462cee7ecc712e13d388eddd6fd28db07027deae0@yyyy.com>
正しく認証されて踏み台となっている該当ユーザは家族だったので、いったんはログインを無効化した上で様子を見たところ、
Feb 22 00:37:16 ulysses postfix/smtpd[24479]: warning: SASL authentication failure: Password verification failed
Feb 22 00:37:16 ulysses postfix/smtpd[24479]: warning: unknown[5.188.206.234]: SASL PLAIN authentication failed: authentication failure
これ以降はメールが飛ばなくなったので一時解決となった。
その後にログを調査したところ、パスワードが割れたのは 18:00:52 だが、実際に spam の踏み台になっていたのは 23:53:33 〜 01:20:18 の約1時間半だった。
Postfix の設定をある程度厳しくはしているものの、
- spam 送信成功: 219 件
- バウンスされた数: 1,397 件
- 送信先から一時的に拒否された数: 3,519 件
- SpamCop で接続を拒否した数: 3,276 件
- その他こちらから接続を拒否した数: 31,168 件
と、全体の 12.97% に対して踏み台として通す結果となってしまった。
教訓
今回は家族が10年近くパスワードを変更していなかったことが直接の原因だった。
複数人に対してサービスを提供する場合、セキュリティに対する認識の差でどうしてもこういう問題が出てきてしまうので、独自にサービスを提供する場合は教育とセットで提供する必要がある。
近年の流れとしてパスワードの定期的な変更は無意味という流れにはなっているが、これは10年前後パスワードを変更しなくてもよいということではない。
というのも、今回のログを詳細に洗ったところ、特にブルートフォースは食らっていなかった。つまり、どこかで流出したであろうメールアドレスとパスワードの組み合わせで踏み台にされた可能性が高い。
今回の件は、改めてパスワードの使い回しが危険であることを再認識させる機会となった。
自分の場合はパスワードに加えてログイン ID として提供するメールアドレスもサービスごとに切り分けているが、これは確かにレアケースだろう。
対応
対応としては、身も蓋もないが Google Workspace に移行した。
個人でのみ運用しているメールアドレスは自分の運用スキルという意味でも自宅サーバ + webmail で運用しているが、複数人で運用しているドメインに関しては自分の目が届きづらいことから Google Workspace に移行するのがベストだという結論に至った。
Google Workspace への移行
Google Workspace への移行そのものはそこまで難しくはない。
やることとしては、まず移行対象のユーザとグループを先に作っておいてから DNS の TXT レコードを利用したドメイン認証を済ませる。
あとは MX レコードを移行させればメールの移行は完了となる。
IN MX 5 ALT1.ASPMX.L.GOOGLE.COM.
IN MX 5 ALT2.ASPMX.L.GOOGLE.COM.
IN MX 10 ALT3.ASPMX.L.GOOGLE.COM.
IN MX 10 ALT4.ASPMX.L.GOOGLE.COM.
一つだけネックになるのは DKIM の設定で、これについてはすぐには設定できない。トライアル期間中に DKIM の設定をするには、まずクレジットカードを登録する必要がある。
この際、デフォルトだとプランが Google Workspace Business Standard になっているが、プライベートだとここまでは不要だしそれなりの価格なので、Business Starter に変更しておくとよい。
クレジットカードを登録してしばらくすると DKIM の設定ができるようになるので、管理コンソールの [アプリ] → [Google Workspace] → [Gmail] → [メールの認証] から DKIM に必要な公開鍵の払い出しを行う。
公開鍵ができたら、これを TXT フィールドとしてゾーンに追加する。
この際に気をつけないといけないのは、TXT レコードの最大長になる。TXT レコードは最大 255 文字だが、Google が生成する 2,048 ビットの公開鍵はこれを超えてしまう。そのため、bind の場合は以下のように分割して登録する。
google._domainkey IN TXT ("v=DKIM1; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsQ+5/pfS7Gn3UQVmUASF+xnkiAjC"
"hEUHwreWtEjPuQGnW6vsu36PnRuEKbY7GzJbuNYqHQsWxp6xeQb/b3T5izl7NLzGN6qnZ4eA1o"
"yfQkc1/dE3PpIpRnzU7Dg3MhQCGrfCa9xy7cwD3yK175/gEXdOVzfthHjvHO46iLIxqYx/rOEc"
"wwan8WhqDzXBT1baUOxZP3ONZ1XF1B8qPkb4uhbM+KP85x05AesCFJht3KNcdzksGpr+ZcsDBE"
"QqYPfzCsKCiDrK6D+QHrS0hUFta+D6XUrCEpvRBWoB9D+exlQfx7nEp0vyt8r9my8Y022b2Uad"
"y3MauIAqmWugeDDNSQIDAQAB")
ゾーンファイルを読み込んだ後、正しく返すかを確認する。
ulysses ~ # dig -t txt google._domainkey.xxxx.com
; <<>> DiG 9.16.13 <<>> -t txt google._domainkey.xxxx.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38228
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 0d24ca4eccdc449c0100000060653f1a392418808043fac8 (good)
;; QUESTION SECTION:
;google._domainkey.xxxx.com. IN TXT
;; ANSWER SECTION:
google._domainkey.xxxx.com. 300 IN TXT "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsQ+5/pfS7Gn3UQVmUASF+xnkiAjC" "hEUHwreWtEjPuQGnW6vsu36PnRuEKbY7GzJbuNYqHQsWxp6xeQb/b3T5izl7NLzGN6qnZ4eA1o" "yfQkc1/dE3PpIpRnzU7Dg3MhQCGrfCa9xy7cwD3yK175/gEXdOVzfthHjvHO46iLIxqYx/rOEc" "wwan8WhqDzXBT1baUOxZP3ONZ1XF1B8qPkb4uhbM+KP85x05AesCFJht3KNcdzksGpr+ZcsDBE" "QqYPfzCsKCiDrK6D+QHrS0hUFta+D6XUrCEpvRBWoB9D+exlQfx7nEp0vyt8r9my8Y022b2Uad" "y3MauIAqmWugeDDNSQIDAQAB"
;; Query time: 0 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: 木 4月 01 09:33:46 JST 2021
;; MSG SIZE rcvd: 513
これで一通りの移行は完了となる。
Postfix の設定そのものは結構厳しくしていたものの、ユーザへの教育の重要性を改めて実感する機会となった。
自宅サーバの運用そのものは非常にお勧めしたいところではあるが、一方でこういうリスクもあるということで、敢えて記録に残しておきたい。