PostfixとDovecotの設定(SMTP AUTHなし・TLSなし)
PostfixのTCP 25、DovecotのLMTPとIMAPを構成し、SMTP AUTHを使わずにローカルドメイン宛てのメールを送受信する。
| 項目 | 値 |
|---|---|
| OS | Debian 13.x |
| メールサーバー | mail.example.com |
| IPアドレス | 192.0.2.10 |
| 検証用クライアント | 192.0.2.20 |
| メールドメイン | example.com |
| 送信ユーザー | alice / alice@example.com |
| 受信ユーザー | bob / bob@example.com |
| メールボックス | ~/Maildir |
| SMTP | TCP 25、SMTP AUTHなし |
| Submission | 使用しない |
| IMAP | TCP 143、PAM認証 |
SMTP AUTHを使わないのはPostfixへのメール送信である。DovecotのIMAPでは、利用者ごとのメールボックスを保護するためユーザー認証を行う。
DNSを使わず確認する場合は、サーバーとクライアントの/etc/hostsで192.0.2.10 mail.example.comを名前解決できるようにする。
ネットワーク動作は、mynetworksに含まれない検証用Debianクライアントから確認する。クライアントへ検証用コマンドをインストールする。
sudo apt updatesudo apt install swaks netcat-openbsd| 区分 | 内容 |
|---|---|
| 必須 | TCP 25の受信、第三者中継の拒否、Dovecot LMTP、Maildir、IMAP認証 |
| 任意 | 管理下のネットワークからの未認証中継、IPv6の待受 |
1. ホスト名を設定する
Section titled “1. ホスト名を設定する”sudo hostnamectl set-hostname mail.example.com/etc/hostsにホスト名を登録する。
127.0.0.1 localhost127.0.1.1 mail.example.com mailhostname --fqdnmail.example.comが表示されることを確認する。
2. パッケージをインストールする
Section titled “2. パッケージをインストールする”sudo apt updatesudo apt install postfix dovecot-core dovecot-imapd dovecot-lmtpdPostfixの設定形式を聞かれた場合はInternet Site、System mail nameはexample.comを指定する。後の手順でmain.cfを完成形へ置き換える。
postconf mail_versiondovecot --versionDebian 13ではPostfix 3.10系とDovecot 2.4系が表示される。
3. メールユーザーを作成する
Section titled “3. メールユーザーを作成する”sudo adduser alicesudo adduser bob各コマンドの対話入力で検証用パスワードを設定する。Linuxユーザー名がメールアドレスのローカル部に対応する。
getent passwd alice bobaliceとbobのUID、GID、ホームディレクトリが表示されることを確認する。
4. Postfixを設定する
Section titled “4. Postfixを設定する”/etc/postfix/main.cfを開き、既存の内容を次の設定へ置き換える。
sudoedit /etc/postfix/main.cfcompatibility_level = 3.10
myhostname = mail.example.commydomain = example.commyorigin = $mydomainmydestination = $myhostname, localhost.$mydomain, localhost, $mydomainalias_maps = hash:/etc/aliasesalias_database = hash:/etc/aliases
inet_interfaces = allinet_protocols = ipv4mynetworks = 127.0.0.0/8
smtpd_relay_restrictions = permit_mynetworks, reject_unauth_destinationmailbox_transport = lmtp:unix:private/dovecot-lmtp
smtpd_sasl_auth_enable = nosmtpd_tls_security_level = nonesmtp_tls_security_level = nonecompatibility_level = 3.10はDebian 13のPostfix 3.10系の既定動作を使用する。
mydestinationにexample.comを含めることで、alice@example.comとbob@example.comをローカルユーザー宛てとして扱う。
alias_mapsはローカル配送時に参照するエイリアス、alias_databaseはnewaliasesで更新するエイリアスデータベースを/etc/aliasesへそろえる。
smtpd_relay_restrictionsにはpermit_sasl_authenticatedを含めない。mynetworksに含まれる接続元だけに外部ドメインへの中継を許可し、それ以外はreject_unauth_destinationで拒否する。mydestination宛てのメールは未認証でも受信する。
mailbox_transportはローカルユーザー宛ての最終配送をDovecot LMTPへ渡す。smtpd_sasl_auth_enable = noにより、TCP 25のEHLO応答へAUTHを追加しない。
smtpd_tls_security_levelは受信SMTP、smtp_tls_security_levelは送信SMTPのTLSを無効にする。
管理下のネットワークから未認証中継を許可する場合(任意)
Section titled “管理下のネットワークから未認証中継を許可する場合(任意)”検証用クライアントを含む192.0.2.0/24から外部ドメインへの中継も許可する場合は、mynetworksを変更する。
mynetworks = 127.0.0.0/8, 192.0.2.0/24mynetworksに含まれる端末はパスワードなしで任意の宛先へ中継できる。管理できない端末が接続するネットワークや、範囲の広いアドレスブロックは指定しない。
IPv6も使用する場合(任意)
Section titled “IPv6も使用する場合(任意)”IPv4とIPv6の両方を使用する場合は、main.cfの2行を次のように変更する。
inet_protocols = allmynetworks = 127.0.0.0/8, [::1]/128信頼するIPv4ネットワークも使用する場合は、そのネットワークを同じmynetworksへ追加する。
設定値を確認する。
postconf -n5. Submissionサービスが無効であることを確認する
Section titled “5. Submissionサービスが無効であることを確認する”/etc/postfix/master.cfを開く。
sudoedit /etc/postfix/master.cfsubmissionとsubmissionsで始まるサービス行と、その配下の-o行を有効化しない。
#submission inet n - y - - smtpd#submissions inet n - y - - smtpdTCP 25のsmtpサービスは有効なままにする。TCP 587と465を起動しないため、メールクライアントはTCP 25へ接続する。
6. Dovecotを設定する
Section titled “6. Dovecotを設定する”既存設定を保存する。
sudo cp -a /etc/dovecot/dovecot.conf \ /etc/dovecot/dovecot.conf.original/etc/dovecot/dovecot.confを次の内容に置き換える。
sudoedit /etc/dovecot/dovecot.confdovecot_config_version = 2.4.0dovecot_storage_version = 2.4.0
protocols { imap = yes lmtp = yes}
listen = 0.0.0.0
mail_driver = maildirmail_path = ~/Maildirfirst_valid_uid = 1000
namespace inbox { inbox = yes}
auth_mechanisms = plain loginauth_allow_cleartext = yesauth_username_format = %{user | username}
passdb pam {}
userdb passwd {}
ssl = no
service imap-login { inet_listener imap { port = 143 }}
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { user = postfix group = postfix mode = 0660 }}
protocol lmtp { postmaster_address = postmaster@example.com}mail_driverとmail_pathにより、LMTPの保存先とIMAPの参照先を~/Maildirへ統一する。auth_username_formatはbob@example.comからドメイン部分を除き、Linuxユーザーbobとして検索する。
service lmtpはPostfixから配送メッセージを受け取るソケットを作る。PostfixからSMTP AUTHを利用しないため、/var/spool/postfix/private/authへ認証ソケットを作成しない。Dovecot内部の認証処理はIMAPログインに使用する。
auth_allow_cleartext = yesはTLSなしのIMAPでPLAIN・LOGIN認証を許可する。IMAPのユーザー名、パスワード、メール本文は暗号化されずにネットワークを流れる。
7. PAM設定を確認する
Section titled “7. PAM設定を確認する”/etc/pam.d/dovecotが存在しない場合は次の内容で作成する。
sudoedit /etc/pam.d/dovecotauth required pam_unix.soaccount required pam_unix.soauthはパスワードを検証し、accountはアカウントの有効期限や利用可否を確認する。
8. エイリアスを設定する
Section titled “8. エイリアスを設定する”/etc/aliasesにpostmasterの転送先を設定する。既存のエイリアスは残す。
sudoedit /etc/aliasespostmaster: alicesudo newaliases9. 設定を検証して起動する
Section titled “9. 設定を検証して起動する”sudo doveconf -nsudo postfix checkエラーがなければ再起動する。
sudo systemctl restart dovecotsudo systemctl restart postfixsudo systemctl is-active dovecot postfix両方がactiveになることを確認する。
sudo ss -lntp | grep -E ':(25|143|465|587|993)\b'TCP 25と143が表示され、465、587、993が表示されないことを確認する。
sudo ls -l /var/spool/postfix/private/dovecot-lmtpsudo test ! -S /var/spool/postfix/private/authLMTPソケットの所有者とグループがpostfix postfix、モードがsrw-rw----であり、Postfix向け認証ソケットが存在しないことを確認する。
10. Dovecotのユーザー検索とIMAP認証を確認する
Section titled “10. Dovecotのユーザー検索とIMAP認証を確認する”sudo doveadm user alicesudo doveadm user bobsudo doveadm auth test bobsudo doveadm auth test bob@example.comUID、GID、homeがLinuxユーザーと一致し、bobとbob@example.comのどちらでもauth succeededになることを確認する。
11. SMTP AUTHなしでメールを送信する
Section titled “11. SMTP AUTHなしでメールを送信する”検証用クライアントからTCP 25へ接続し、Bob宛てのメッセージを送信する。--authオプションは指定しない。
--from alice@example.comはSMTPのエンベロープ送信元を指定するだけで、Alice本人であることを証明しない。SMTP AUTHなしでは、接続元が任意の送信元アドレスを名乗れる。
swaks \ --server mail.example.com:25 \ --from alice@example.com \ --to bob@example.com \ --header 'Subject: no SMTP AUTH test' \ --body 'submitted without SMTP AUTH'RCPT TO:<bob@example.com>とメッセージ受理に250が返ることを確認する。ローカルドメイン宛てであるため、接続元がmynetworksに含まれなくても受理される。
EHLO応答にSMTP AUTHがないことを確認する。
printf 'EHLO client.example.net\r\nQUIT\r\n' | nc mail.example.com 25応答にAUTHが表示されないことを確認する。
同じ未認証クライアントから外部ドメイン宛ての中継を試す。
swaks \ --server mail.example.com:25 \ --from alice@example.com \ --to recipient@example.net \ --quit-after RCPTmynetworksへ検証用ネットワークを追加していない場合は、Relay access deniedを含む454または554応答になることを確認する。
管理下のネットワークからの未認証中継を任意設定した場合は、同じRCPTが250で受理される。この確認では--quit-after RCPTにより実際の外部配送を発生させない。
12. LMTP配送を確認する
Section titled “12. LMTP配送を確認する”postqueue -psudo find /home/bob/Maildir/new -maxdepth 1 -type f -printf '%f\n'sudo journalctl -u postfix -u dovecot --since '-5 minutes'キューが空になり、BobのMaildirにメールファイルが作成されることを確認する。Postfixログにはrelay=mail.example.com[private/dovecot-lmtp]とstatus=sentが表示される。
13. IMAPでメールを確認する
Section titled “13. IMAPでメールを確認する”検証用クライアントから接続する。
nc mail.example.com 143接続後に次のIMAPコマンドを入力する。BobPasswordは検証用パスワードへ置き換える。
a LOGIN bob@example.com BobPasswordb SELECT INBOXc FETCH 1 BODY.PEEK[HEADER.FIELDS (FROM TO SUBJECT)]d LOGOUTa OKでログイン成功、b OKでINBOX選択成功となり、FETCHの応答に送信したメールのヘッダーが表示されることを確認する。
doveconf -nとpostfix checkがエラーにならない。- PostfixがTCP 25、DovecotがTCP 143で待ち受ける。
- TCP 465、587、993では待ち受けない。
- EHLO応答に
AUTHが表示されない。 - 未認証のTCP 25接続でローカルドメイン宛てのメールを受理する。
- 信頼ネットワーク外から外部ドメインへの中継を拒否する。
- Postfixがローカル宛てメールをDovecot LMTPへ渡す。
- Dovecotが
/home/bob/Maildirへメールを保存する。 - IMAPではBobのPAM認証を要求し、Bobのメールボックスを表示する。
- SMTPとIMAPでTLSを提供しない。
- メールシステムの全体像
- SMTPとPostfix
- IMAP・Dovecot・Maildir
- メール認証・TLS・ポート
- PostfixとDovecotの設定(SMTP AUTHあり・TLSなし)
- PostfixとDovecotの設定(SMTP AUTHあり・TLSあり)