OpenSMTPD
この記事では 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 が取得されます。
参照
- OpenSMTPD は Dovecot と組み合わせることでミニマルなメールサーバーになります。
- OpenSMTPD プロジェクトページ
- Simple SMTP server with OpenSMTPD
DNS レコードや到達可能性、暗号化などをテストできる便利なウェブサイト: