OpenSMTPD

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

この記事では OpenSMTPD サーバーをインストール・設定する方法を説明します。

インストール

公式リポジトリから opensmtpd パッケージをインストールしてください。

設定は

OpenSMTPD の設定は /etc/smtpd で行うことができます。

ローカルメール

cron のメールなど、ローカルメールを使いたい場合は smtpd.service起動するだけで使うことができます。

OpenSMTPD のデフォルト設定ではメールをローカルで取得・配達して、外出メールのリレーも行います。smtpd.conf(5) を見てください。

ローカルのみ

ローカルメールだけを使いたい場合、以下のように設定してください:

/etc/smtpd/smtpd.conf
listen on localhost
accept for local alias <aliases> deliver to mbox

ハイブリッド: ローカルメールとリレー

/etc/smtpd/smtpd.conf の以下の2行によって:

accept for local alias <aliases> deliver to mbox
accept for any relay via "smtp://smtp.foo.bar" as "@foo.bar"

以下のように OpenSMTPD が設定されます:

  • ローカルメールはローカルだけに送信され、リレーは使われません (cron やメール通知で有用)。
  • ローカルホストの外に送信するメールはリレーが使われます。

smtp.foo.bar をあなたの使っている ISP のメールサーバーに置き換えてください。

シンプルな OpenSMTPD/mbox の設定

暗号鍵の作成

TLS のサポートは openssl パッケージで得ることができ、Arch ではデフォルトでインストールされています。

秘密鍵と自己署名証明書を作成してください。CSR を必要としない大抵の環境ではこれで十分です:

# mkdir -m 700 /etc/smtpd/tls; cd /etc/smtpd/tls
# openssl req -new -x509 -nodes -newkey rsa:4096 -keyout smtpd.key -out smtpd.crt -days 1095
# chmod 400 smtpd.key; chmod 444 smtpd.crt

ユーザーアカウントの作成

  • 必要なメールボックスごとにメールサーバーにユーザーアカウントを作成:
# useradd -m -s /bin/bash roger
# useradd -m -s /bin/bash shirley
  • OpenSMTPD はメッセージを /var/spool/mail/<username> にあるユーザーアカウントの mbox ファイルに配達します。
  • 必要であれば特定の mbox に複数の SMTP メールアドレスを割り当てることができます。

smtpd.conf の設定

  • 最低限必要な設定は以下のようになります:
/etc/smtpd/smtpd.conf
pki mx.domain.tld certificate  "/etc/smtpd/tls/smtpd.crt"
pki mx.domain.tld key          "/etc/smtpd/tls/smtpd.key"

table creds                    "/etc/smtpd/creds"
table vdoms                    "/etc/smtpd/vdoms"
table vusers                   "/etc/smtpd/vusers"

listen on eth0 tls pki mx.domain.tld
listen on eth0 port 587 tls-require pki mx.domain.tld auth <creds>

accept from any for domain <vdoms> virtual <vusers> deliver to mbox
accept for any relay

テーブルの作成

  • ドメインテーブルファイルには1行毎にドメインを記述してください:
/etc/smtpd/vdoms
personaldomain.org
businessname.com
  • ユーザーテーブルファイルには1行毎に SMTP メールアドレスを記述し、mbox のユーザーアカウント名あるいは他の SMTP メールアドレスにマッピングします。複数記述する場合はカンマで区切ってください。
/etc/smtpd/vusers
roger@personaldomain.org          roger
newsletters@personaldomain.org    roger,roger.rulz@gmail.com

roger@businessname.com            roger
shirley@businessname.com          shirley
info@businessname.com             roger,shirley
contact@businessname.com          info@businessname.com
  • creds テーブルファイルには1番目の列にユーザー名を2番目の列にパスワードハッシュを記述してください:
/etc/smtpd/creds
roger                              <password hash created using 'smtpctl encrypt' command>
shirley                            <password hash created using 'smtpctl encrypt' command>

設定のテスト

# smtpd -n

'configuration OK' というメッセージが表示されたら起動してみてください。表示されない場合、設定のエラーを修正してください。

トラブルシューティング

コンソールデバッグ

メールの配達に問題が発生する場合、smtpd.service停止して手動でデーモンを起動して見てください:

# smtpd -dv

サブシステムの解析

-T フラグを追加することでリアルタイムにサブシステムを追跡できます:

# smtpd -dv -T smtp

もしくはデーモンが既に実行中の場合 smtpctl trace <subsystem> コマンドを実行してください。トレースはコンソールに出力され、smtpd.service を journalctl で確認することで見ることができます。例:

# smtpctl trace expand && smtpctl trace lookup

上記のコマンドはエイリアス・転送の展開とユーザーのルックアップの両方をトレースします。

サブミッションポートの手動認証

  • ユーザー名とパスワードを base64 でエンコード:
# printf 'username\0username\0password' | base64  
  • openssl s_client コマンドを使ってサブミッションポートに接続:
# openssl s_client -host mx.domain.tld -port 587 -starttls smtp
  • ehlo myhostname の後に AUTH PLAIN と入力して 334 が返ってきたら上のコマンドで出力された base64 の文字列を貼り付けてください。
250 HELP
ehlo test.domain.tld
250-mx.hostname.tld Hello test.domain.tld [5.5.5.5], pleased to meet you
250-8BITMIME
250-ENHANCEDSTATUSCODES
250-SIZE 36700160
250-DSN
250-AUTH PLAIN LOGIN
250 HELP
AUTH PLAIN
334 
dXNlcm5hbWUAdXNlcm5hbWUAcGFzc3dvcmQ=
235 2.0.0: Authentication succeeded

"Helo command rejected: need fully-qualified hostname"

メールを送信したときにメッセージが表示される場合、/etc/smtpd/mailname ファイルで FQDN を設定してください。設定されていない場合、サーバーの名前は gethostname(3) によって返されるローカルのホストネームから決定されます。完全修飾ドメイン名の場合はそのまま使われ、そうでなかった場合は getaddrinfo(3) で関連付けられた CNAME が取得されます。

参照

DNS レコードや到達可能性、暗号化などをテストできる便利なウェブサイト: