メールサーバーでのトラブル対応日誌

2019年2月12日

サーバー テクノロジー トラブル

gmailが主流になっているメール事情ですが、とある会社さんの立ち上げでホームページ制作を請け負った時の話です。 ホームページにお問い合わせフォームを設置する事になり、とりあえずで作ってあるgmailにお問い合わせフォームから転送をしてほしいというオーダーだったので、phpのsendmail機能を使ってみたところ、gmailで受信したメールが見事に「スパムメールフォルダ」に飛び込んできます。 これは、mailのmxレコードとメール送信しているサーバーのIPアドレスが違っているため、正規のサーバーから送信されていない為にgoogle側でスパム扱いになってしまうようです。 そのgmailが送信元と同じアドレスに送ってもスパムになるので、ようするになりすましと扱われていることがわかります。 このまま会社としてのホームページを運用してしまうのはいかがなものかと考えて、そのサーバーに簡易にメールサーバーを同じドメインで立ち上げてちゃんとDNS整備をして上げる必要があると判断し、postfix+dovecopでのサーバー構築を施しました。

メールサーバートラブルは、日数が経過してから現れる・・・

送受信テストをちゃんと行い、メーラソフトでの挙動確認もできて、メールを使うアカウントの整備もできた段階で作業が完了し、最初の異変を感じたのはそれから3日後ぐらいでした。 外部監視で設置していた監視サーバーからのサーバーアクセス遅延のアラートがメールで送られてきて、最初は立ち上げた直後なのにアクセスが多いのかな?とぐらいに考えていました。 その日はそれ1回だけだったので、一時負荷という判断をしましたが・・・ それが4日目には、数回のアラートが送られてきて、さすがにおかしいと気が付き始めました。 とりあえず、すぐにサーバーにアクセスして"top"コマンドを叩いたところ、LAが二桁になっているではありませんが・・・(だいたい20ぐらい)

トラブル発生から確認したこと

そして、procリストの一覧を見てみると、postfixの文字がたくさん並んでいて、ここで初めてメールサーバーの設定がおかしいことに気が付きました。 まず、この手のエラーが出るときは、以前さくらインターネットで経験した「OP25B」が思い出されたので、設定しようとしたのですが、そもそも別のプロバイダーで制限は掛かっていないので、原因は別という判断をし、 とりあえず、ログを確認してみようと思い以下のコマンドを実行 $ tail -f /var/log/maillog すると、何ということでしょう・・・滝のように流れるメールログデータ・・・しかも、このログファイルの容量が1.5GBぐらいになっていました。 この時点で悟ったのが、メールキューが大量に溜まっているという事で、かなりの膨大な量になっていることが想像できました。 次にログを良く見てみると、"status=deferred"という文字が目立つぐらいたくさん書かれていたので、これはどうやら踏み台にされている事がわかりました。 その際に存在しないアカウントで送信しようとしているらしく、サーバー認証でエラーになり、何度も認証を繰り返している処理が雪だるま式に膨らんでいるという事象であると判断できました。

対処方法

まずは、踏み台を回避したかったの簡易に25番ポートを回避しようと考えたのですが、そもそもアカウント認証しているので、存在しないアカウントの場合に、メールキューにためこまずにすぐに削除する設定にすればいいと考えました。 その設定は以下の通り 1. /etc/postfix/main.cfに以下を追加(存在しないアカウントをunknown_userに転送) luser_relay = unknown_user@localhost 2. /etc/aliasesにunknown_userを追記 $ echo unknown_user: /dev/null >> /etc/aliases  3. newaliasesの反映 $ newaliases 4. postfixの再起動(centos7) $ systemctl restart postfix とりあえずこれで下準備が完了。 次にいま現在暴走している事象を解消するために、メールキューを止める必要があります。 一番カンタンに完了する方法は現在たまりまくっているメールキューを削除する事ですが、不要なメールだけであればそれでいいんですが、必要なメールが含まれている場合は、ひとつずつメールを仕分ける必要があります。 とりあえず、キューに溜まっているメールの内容を確認する方法は以下のコマンド $ mailq -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- ... または、 $ postqueue -p 溜まっているメールキューの一覧がでますが、大量にある場合はうんざりするぐらいのボリュームが表示されます。 ※どちらでも同じ結果が返ります。 次に、個別のメール内容を確認するには・・・ $ postcat -q "Queue ID" *** ENVELOPE RECORDS active/133C530EBA1 *** message_size: 816 5455 50 0 816 message_arrival_time: Sat Feb 9 12:53:57 2019 create_time: Sat Feb 9 12:53:58 2019 named_attribute: log_ident=133C530EBA1 named_attribute: rewrite_context=remote named_attribute: sasl_method=LOGIN ... こんな感じ。 そして一括削除 $ postsuper -d AL postsuper: Deleted: 1188 messages # 直ぐに確認 $ mailq Mail queue is empty とりあえず無事に空になりました。 topコマンドを実行してLA値が下がっていることを確認して、今回の作業は完了になります。 それにしても、25番ポートを狙った踏み台スパムメールってまだまだ健在なんですね。 世の中のこうしたゴミパケットが、インターネットトラフィックの8割を締めているという8:2の法則を思い出しました。 まったく誰も得しないパケットですよね。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。