PR

FreeBSD Sendmail Setup パート7

FreeBSD
記事内に広告が含まれています。

これまでに他のメールアドレスに対して、サーバーからのメールの送信は問題なくできるようになっているはずです。今回はメールのクライアントからメールの送信を行えるようにしてみたいと思います。以前の sendmail Setup Part 3 あたりで出てきた OP25B の問題があるので、submission ポートで接続を受け付けて認証を通過することでメールを送信することができるようにしたいと思います。smtp ポートのブロックが発生するのは現在つながっているプロバイダのエッジから外部へ向けての smtp セッションがブロックされるだけなので、他の ISP からの smtp ポートへの接続は問題なく通過できるはずです。ただし、他の ISP のエッジでのブロックには引っ掛かりますので、当該の ISP の正規のメールサーバからの接続ということに限定はされます。では何をしないといけないかというと、dhcp さんの submission ポートで SSL 接続をサポートしてそのうえで SMTP AUTH による認証が行えればよいということになります。まず、dhcp さんの sendmail の状況を見てみます。

submission port

この netstat の結果から IPv4 では smtp ポートと submission ポートの両方、IPv6 では smtp ポートのみがオープンしています。例の README を見てみますと、その 95% あたりに書かれているように、デフォルトでは IPv4 の smtp ポートと submission ポートしかオープンしていません。そこで jf3vqb.mc ファイルを見てみます。

jf3vqb.mc ファイルで IPv4 と IPv6 の smtp ポートをオープンするようにしています。ですので、結果として IPv4 の smtp ポートと submission ポート、さらに IPv6 の smtp ポートのみがオープンすることになります。

では何をするかというと、IPv6 の submission ポートをオープンするようにしてやる必要があるということです。この方法も README ファイルに書かれています。README ファイルの 30% あたりに no_default_msa を使って、デフォルトの submission ポートをなくして、新たに定義しなおすようにします。何故かというと、デフォルトでは submission ポートも smtp ポートと同じ動きしかしないからです。必要なのは SSL による暗号化と、SMTP AUTH による認証の2つとなります。前回にも書いたと思いますが、SMTP の標準に暗号化はありません。ですので、暗号化を強制することはできず、無くても動くことになります。認証の方はと言いますと、認証をパスしないと何もできないようにすることができます。これらの動きは Modifiers オプションでデフォルトから変更することができます。このオプションがまとまって書かれているところを探したのですが、README ファイルにパラパラと点在しているので少々わかりにくいですが、必要なオプションを指定した submission ポートの設定はこんな感じになります。

オプション ‘O’ は smtp ポートと同じオプションを使用しています。オプション ‘E’ は RFC2476 で必要なオプションということです。そして、オプション ‘a’ は認証を必要とするオプションです。sendmail のソースコードを見てみると、sendmail/sendmail.h ファイルの 69% あたりに取り得るオプションが列挙されています。今回指定した Modifiers オプションのコメントをピックアップしておきました。

  • ‘E’: /* no ETRN (MSA) */
  • ‘O’: /* optional socket */
  • ‘a’: /* authentication required */

他にも必要なオプションがあるかもしれませんので、お時間のある時に一読いただくのが良いかと思います。これで sendmail.cf を作り直して sendmail を再起動してみます。

smtp auth

いい感じに smtp ポートと submission ポートが IPv4 と IPv6 でオープンしました。ちょっと認証が必要になったかどうか試してみます。

よさげです。何もできません 🙂 では逆に認証を通過したら何でもできるのか調べてみます。その前に、認証に使用できるのは DIGEST-MD5 と CRAM-MD5 のみですので、簡単な LOGIN や PLAIN も追加したいと思います。README ファイルの 89% あたりに書かれています。confAUTH_MECHANISMS を定義します。

使えるようになったか再度見てみます。

saslauthd for smtp auth

よさげです。続いて認証のセットアップを行います。sendmail を SASL オプションを付けて作ると、saslauthd が一緒にコンパイルされてインストールされているはずです。

これを動くようにします。これは sendmail の前提条件としてコンパイルされたはずです。sendmail が認証用に saslauthd を使うかどうかは sendmail によりインストールされたファイルに必要事項が記入されているかどうかによります。

必要なファイルは作成されており、必要な内容が記述されています。では、saslauthd を起動します。起動ファイルの指示通り変数を定義して、起動スクリプトを実行します。

では sendmail への接続を介して認証をチェックしてみます。まず、base64 でエンコードされたユーザ名とパスワードを作っておきます。

そして、telnet で dhcp さんの submission ポートに接続します。

そして先ほど用意したユーザ名とパスワードで認証をパスできるか試してみます。

パスしたようです 🙂 後は、mail from: や rcpt to: などの SMTP コマンドが自由に使えるはずです。お試しで、いつものテストアカウントにメールを送ってみます。

こちらが gmail.com で受信したメールの情報です。

これで認証が OK なのは確認できました。SSL で暗号化したときに同じ動作をするかも試しておきたいと思います。telnet の代わりに openssl コマンドを使用します。こんな感じです。

後は、telnet の時と同じように試してみることができます。

dns records for internal and external networks

最後に DNS の調整を行います。中からでも外からでも smtpauth.jf3vqb.net で dhcp さんに接続できるようにします。内側では、response-policy で作成した jf3vqb.net ゾーンに smtpauth.jf3vqb.net の IPv4 と IPv6 のアドレスを定義します。こんな感じです。

内側は家庭内の DNS に dhcp さんの IPv4 と IPv6 のアドレスを登録します。外側では ISP の正規の DNS にパブリックアドレスを登録します。ここでトリックが必要になります。192.168.x.x/16 はプライベートアドレスになりますので、外部からは使用できません。ですので、家庭の ISP ルータにポート転送の設定が必要になります。ご家庭の ISP ルータはパブリック IPv4 アドレスをお持ちのはずなので、このアドレスのポート 25 とポート 587 が dhcp のプライベートアドレスの 192.168.0.250 のそれぞれポート 25 とポート 587 に転送されるようにする必要があります。IPv6 は家庭内でもパブリックアドレスが使用されていると思いますので、2001:xxxxxx:2 のポート 25 と 587 への接続をブロックしないように ISP ルータの設定を変える必要があります。これらはどちらの ISP ルータを使用しているかによって全く方法が異なると思いますし、できないかもしれません。ご家庭の ISP ルータのマニュアルを熟読の上、自己責任で行ってください。もし、ご自分が何を行っているかわからない方は触らないことをお勧めします 🙂 ここではまだ受信の準備ができていないので、外部の DNS の変更はせずに置きます。しかし、ここまでの設定で家庭内に接続されている Windows や iPhone などから smtpauth.jf3vqb.net を使用してメールの送信は行えるはずです。ただ、暗号化はナンチャッテ証明書を使用していますので、エラーが発生するかもしれません。手元の環境がまだそこまで進んでいないので、どうなるかわからないですが、近々に書きたいと思います。

以下広告


コメント