0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

メールサーバ構築 virtual_mail_box

Last updated at Posted at 2025-05-22

メールサーバ構築

メールサーバ virtual mailbox (仮想メールボックス)の構築方法。
このページでは接続保護なしの認証の設定。

バージョン

[root@mail ~]# dnf info postfix
Last metadata expiration check: 0:02:24 ago on Sun 25 May 2025 11:59:14 PM JST.
Installed Packages
Name         : postfix
Epoch        : 2
Version      : 3.5.25
Release      : 1.el9
Architecture : x86_64
Size         : 4.4 M
Source       : postfix-3.5.25-1.el9.src.rpm
Repository   : @System
From repo    : ol9_appstream

[root@mail ~]# dnf info dovecot
Last metadata expiration check: 0:01:57 ago on Sun 25 May 2025 11:59:14 PM JST.
Installed Packages
Name         : dovecot
Epoch        : 1
Version      : 2.3.16
Release      : 15.el9
Architecture : x86_64
Size         : 18 M
Source       : dovecot-2.3.16-15.el9.src.rpm
Repository   : @System
From repo    : ol9_appstream

Postfix

◆基本設定

/etc/postfix/main.cf
myhostname = mail.example123.local
mydomain = example123.local
#このPostfixサーバー自体が送信するメールのドメインを指定します。
#例えば、メールサーバーからのエラー通知、バウンスメール、システム生成のメール(cronの結果など)の #From: ヘッダに使用されるドメインです。
#通常は、$mydomain (このサーバーのプライマリドメイン) に設定するか、サーバーの正式なホスト名 ($myhostname) を設定します。
myorigin = $myhostname
inet_interfaces = all
inet_protocols = ipv4
#空にする
mydestination =
#メールクライアントのネットワーク
mynetworks = 192.168.10.0/24, 127.0.0.0/8
virtual_mailbox_domains = virtual.local
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
#virtual_mailbox用のLinuxユーザのID設定
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
#virtual_mailbox_domains へのメールは、Postfix内部のvirtual配送エージェントで処理するよう設定
virtual_transport = virtual
virtual_minimum_uid = 5000
virtual_mailbox_limit = 51200000
#相手(SMTPクライアント)が STARTTLS を使ってきたら、それに応じて暗号化通信を行う。
#使ってこなければ平文でも受け入れる
smtpd_tls_security_level = may
#SMTP認証だけ受け入れる → いいえ
#(SMTP認証がTLSなしでも許可する)
smtpd_tls_auth_only = no
#sasl認証設定
smtpd_sasl_type = dovecot
#unixソケット/var/spool/postfix/private/authで認証
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
#smtp受信設定(外部からのメール受信)
smtpd_recipient_restrictions =
    #SMTP AUTH(ユーザー認証)成功した人は許可
    permit_sasl_authenticated,
    #自分が信頼しているネットワーク(mynetworks)からは許可
    permit_mynetworks,
    #それ以外は拒否(=オープンリレー防止)
    reject_unauth_destination

◆補足:パラメータ「smtp_*」「smtpd_*」の違い

パラメータの先頭 説明
smtp_ このPostfixサーバーが「他のSMTPサーバーへメールを送信する際(SMTPクライアントとして動作する際)」の動作を制御します。
smtpd_ このPostfixサーバーが「メールクライアントや他のSMTPサーバーからメールを受信する際(SMTPサーバーとして動作する際)」の動作を制御します。
/etc/postfix/master.cf
smtp      inet  n       -       n       -       -       smtpd
virtual   unix  -       n       n       -       -       virtual

◆仮想メールユーザ用のlinuxユーザを作成

groupadd -g 5000 vmail
useradd -u 5000 -g vmail -s /sbin/nologin vmail

◆仮想メールのベースディレクトリを作成

(自動でメールボックスは作られる)

mkdir -p /var/mail/vhosts/
chown -R vmail:vmail /var/mail/vhosts
chmod -R 700 /var/mail/vhosts

◆ユーザ作成

  • virtual_mailbox_mapsで指定したファイルにユーザを記載する。
    • pathの最後に/をつける。
    • 相対パスにする。
/etc/postfix/vmailbox
user1@virtual.local virtual.local/user1/
user2@virtual.local virtual.local/user1/
postmap /etc/postfix/vmailbox

◆確認

postconf -n
postconf -d
postfix check

◆反映

systemctl reload postfix

Dovecot

◆Dovecot設定ファイルで使用される変数

%d = ドメイン名
%n = ローカルパート(例:user1@virtual.local の user1)
%u = メールアドレス
%Lu = ユーザー名を小文字に変換する

◆基本設定

/etc/dovecot/dovecot.conf
#protocols = submissionは削除。postfixに干渉するため。
protocols = imap pop3
listen = *
!include conf.d/*.conf
!include_try local.conf
#必要に応じてデバッグモードにする。
mail_debug = yes
/etc/dovecot/conf.d/10-mail.conf
#Dovecot がアクセスを許可するユーザーID(UID)の範囲。
first_valid_uid = 5000
last_valid_uid = 5000
#postfixのmain.cfのvirtual_mailbox_mapsで指定するファイル記載のパスに合わせる。
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_uid = vmail
mail_gid = vmail
/etc/dovecot/conf.d/10-auth.conf
#暗号化されていない接続(非TLS)でも、プレーンテキスト認証(ユーザー名とパスワードをそのまま送る方式)を許可する
disable_plaintext_auth = no
#ログインユーザー名(= メールアドレス全体)を小文字に変換したもの
auth_username_format = %Lu
auth_mechanisms = plain login
!include auth-passwdfile.conf.ext
  • 今回は、「ファイルベースの仮想ユーザー認証」を行うため、「!include auth-system.conf.ext」をコメントアウトする。
    • auth-passwdfile.conf.ext:ファイルベースの仮想ユーザー認証(例:/etc/dovecot/users)
    • auth-system.conf.ext:UNIXユーザー認証(PAMや /etc/passwd)など、システムユーザーを使った認証
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
  driver = passwd-file
  args = /etc/dovecot/users
}

userdb {
  driver = static
  #postfixのmain.cfのvirtual_mailbox_mapsで指定するファイル記載のパスに合わせる。
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}
/etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    #port = 993
    #ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
  }
}

service auth {
#postfixのmain.cfのsmtpd_sasl_pathに合わせる
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}
/etc/dovecot/conf.d/10-ssl.conf
#IMAP, POP3 すべて「暗号化なし」で通信する
ssl = no
#パスワード発行(doveadm)に鍵が必要
ssl_cert = </etc/pki/tls/certs/postfix.pem
ssl_key = </etc/pki/tls/certs/postfix.pem

◆証明書・秘密鍵の作成

証明書・秘密 作成コマンド
cd /etc/pki/tls/certs/
openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
openssl x509 -in server.csr -days 365000 -req -signkey server.key > server.crt
cat server.key > postfix.pem
cat server.crt >> postfix.pem
内容確認コマンド
openssl x509 -in postfix.pem -text -noout

◆ユーザ作成・パスワード発行

■利用可能なパスワードハッシュスキームの一覧を表示

doveadm pw -l

■パスワード発行

doveadm pw -s BLF-CRYPT -r 12  >> /etc/dovecot/users

■ユーザ作成

sed -Ei 's/^\{BLF-CRYPT\}/user1@virtual.local:{BLF-CRYPT}/' /etc/dovecot/users
/etc/dovecot/users
user1@virtual.local:{BLF-CRYPT}password_hash

■反映

doveadm reload

◆ログイン確認

doveadm auth test user1@virtual.local 'password'

◆確認

dovecot -n
doveconf

Postfix & Dovecot を起動 or 再起動

systemctl stop dovecot
systemctl stop postfix
systemctl start dovecot
systemctl start postfix
systemctl status dovecot postfix

◆Thunderbird

■受信

プロトコル: pop3
ホスト名: mail.example123.local
ポート番号: 110
接続の保護: なし
認証方式: 通常のパスワード認証
ユーザ名: user1@virtual.local

■送信

ホスト名: mail.example123.local
ポート番号: 25
接続の保護: なし
認証方式: 通常のパスワード認証
ユーザ名: user1@virtual.local

POP3・SMTP認証 STARTTLS・SSL/TLS

POP3・SMTP認証 STARTTLS・SSL/TLS の設定はこちら↓。
https://qiita.com/Linux_box/items/416494f5c6d4b4495ead

補足情報

SASL認証の解説

(Simple Authentication and Security Layer)
さまざまなネットワークプロトコルで使える、汎用的な認証フレームワーク。
SASL認証を“Dovecot”が提供しており、Postfixがそれを使ってSMTP認証を実現している。

[メールクライアント]
       |
       |(SMTP認証要求)
       ↓
   [Postfix]───(SASL)───> [Dovecot]
                           ↑
                 (SQLやpasswdなどで認証)
  • Dovecot は /var/spool/postfix/private/auth という UNIXソケット(ファイル) を作成します。
  • Postfix はそのソケットに接続して、クライアント(ユーザー)から受け取ったユーザー名・パスワードを渡す。
  • Dovecot側でパスワードを検証(ファイル、SQL、LDAPなどのバックエンド)。
  • 成功すれば「認証成功」と返り、Postfixはそのユーザーにメール送信を許可します。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?