The Beginning Of The End

そこはかとなく技術的なことを

簡易メールサーバをdockerを利用して無理やり作った

今年もあと少しですね。

新年からブログをリニューアルしたいなと思い、
nginx + http2 + ssl + サイトジェネレーター(Pelicanの予定)の構成を考えております。
そのための証明書をstartsslで取得しようとしたところ、
domainのverifyの部分で、取得したいドメインのメールアカウントへ認証コードを送信する箇所に出くわしました。

gyazo.com

該当のドメインwebサービス以外での利用を考えていなかったので積んでしまいましたw
ただ、ブログのリニューアルはしたかったので、いろいろと調べていたところ、
pythonのsmtplibのdebugが使えそうだったので、dockerで仕組みを作ってみました。

流れとしては

  1. muumuu-domainのカスタムDNSで、tsh.techのMXレコードをtsh.techに設定
  2. dockerのlogを見れる環境を整備する

    • smtplibのdebugモードが標準出力にメールのヘッダーを出力する
    • dockerの標準出力は、docker logsで確認できるが、
    • docker用のcoreosにログインして、docker logs イメージIDが面倒
    • curl tsh.tech:8000/logsでログが見れるのは便利
    • しかも必要なときにだけterraform applyで環境するできるので、良い!
    • 構築はterraformで

    gist.github.com

  3. dockerのpython imageを使って、smtpサーバを起動

    • smtpサーバはワンライナーのコマンド python -m smtpd -c DebuggingServer 0.0.0.0:25
    • 構築はterraformで

    gist.github.com

  4. テストメールを送信して、本文の内容を参照できることを確認する

    • telnet使ったら通信できなくてだいぶハマりました
      • portを25から2525などに変更して切り分けした結果、さくらVPSでは25番portへの接続プロトコル制限されている
    • 普通にメールを送ったらログが出力された

    gist.github.com


やってみて

  • 当たり前ですが、メールアドレスの概念がなく、どんなメール宛のメールも受け取れるのがなんか不思議な感じがしました
  • とりあえず、メール本文はわかるので目的は果たせたのですが、もうちょっといいやり方がないのかなと思いました
  • 後は、telnetではまった時に/usr/bin/toolboxというものを知ったのがとても良かった
    • dockerでの通信の切り分けとかどうすればいいのかよくわからなかったですが、toolboxで起動して普通にtcpdumpとか良いです!
  • とりあえず、SSL証明書取得できたので良かったです!

本題に進みたいと思います。