【RHEL 10: PostfixとDovecot】RHEL 10におけるPostfixとDovecotの基本設定(備忘録)

Postfix & Dovecot
Contents

変更履歴

Rev. 0.7 : 2026年03月16日
新規作成

1 はじめに

本記事はRHEL 10におけるメールサーバーのPostfixDovecotの設定について、
備忘録としてまとめたものです。
OSの入れ換えの度に、メールサーバーのPostfixDovecotを再設定するわけですが、
今まで参考にしていたページが無くなってしまっていたりします。
ですので、このメモを残しておくことにしました。

本記事では、SSL化前の設定について基本設定だけをまとめました。
SSL化については、次のページをご覧いただければと思います。

【RHEL 10: Postfixとdovecot】
RHEL 10におけるPostfixとDovecotのSSL化(2026年03月版)(備忘録)

2 構築環境

2.1 設定ソフトウェア

本記事で示す設定は、表2.1-1に示すソフトウェアについてのものです。

2.2 メールサーバーが使用するポート

メール送受信に関するTCPポートは、以下の通りです。

・SMTP(25)
・SMTP submission(587)
・SMTPS(465)
・POP3(110)
・POP3S(995)
・IMAP(143)
・IMAPS(993)

firewalldへのポート開放設定の一例を、下に示します。

# firewall-cmd –permanent –add-service=smtp
# firewall-cmd –permanent –add-service=pop3
 
# firewall-cmd –reload

先に挙げたポート、全てをオープンしなければならないわけではありません。

運用に合わせて、使うポートだけオープンにします。
特に、SMTP、SMTPSのポートはフル開放だと、海外からの不正アクセス試行が非常に多いので、
実際には表2.2-1に示すように 特定のIPアドレスだけを許すホワイトリスト方式に
しています。
IMAPは、個人的には利用していません。

【firewalld】SMTP、SMTPSのアクセス許可をホワイトリスト方式にする

2.3 インストール

PostfixCyrus SASLDovecotは、インストール済みの場合が多いと思いますが、
最新版は次のようにインストールします。

# dnf install -y postfix cyrus-sasl cyrus-sasl-plain dovecot

2.4 サービスの設定と起動

Postfix、Cyrus SASL、Dovecotのサービス化と起動は、以下のように行います。

# Postfixのサービス化
# systemctl start postfix
# systemctl enable postfix
 
# Dovecotのサービス化
# systemctl start dovecot
# systemctl enable dovecot
 
# SASLのサービス化
# systemctl start saslauthd
# systemctl enable saslauthd

3 Postfix

本章では、SSL化前のPostfixの基本設定について示します。

3.1 コンフィグファイル

Postfixでは、次の2つの設定ファイルを使用します。

① “/etc/postfix/main.cf
SMTPサーバの基本設定はこちらを編集します。
 
② “etc/postfix/master.cf
SMTPサーバの詳細設定はこちらを編集します。
SMTPS(465番)、SMTP Submission(567番)を使用する場合は、編集が必要です。

3.2 基本設定 / “main.cf”

基本的な設定項目を表3.2-1に示します。

各項目の詳細な内容やパラメータ値は、次のページに記載されていますので、
こちらの方でご確認ください。

Postfix 設定パラメータ

3.2.1 ホスト名、ドメイン名、メール送信ドメイン

myhostname”で自ホスト名、“mydomain”で自ドメイン名、
myorigin”ではローカルで送信されるメールの送信元ドメインを指定します。

#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = example.com # 追加
 
#mydomain = domain.tld
mydomain = example.com # 追加
 
#myorigin = $myhostname
  ↓
myorigin = $mydomain # コメントイン

3.2.2 メール受信するインタフェース

inet_interfaces”で、メール受信するインタフェースを指定します。
全てのホストからメール受信する場合は、“all”にします。

inet_interfaces = all # コメントイン
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost # コメントアウト

3.2.3 メール送受信に使用するIPプロトコル

IPv6プロトコルを使用せずIPv4だけの通信であれば、“all”を“ipv4”に変更します。

# Enable IPv4, and IPv6 if supported
inet_protocols = all
  ↓
inet_protocols =  ipv4 # 変更

3.2.4 ローカル配送される(受信)ドメイン

ローカル配送(受信)するドメインを指定します。

#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#        mail.$mydomain, www.$mydomain, ftp.$mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

3.2.5 ローカル受信者の全ての名前やアドレスを持つ検索テーブル

ローカル受信者の全ての名前やアドレスを持つ検索テーブルを指定します。
Postfixは、知らない受信者宛のメールを
User unknown in local recipient table”で拒否するために使用します。

local_recipient_maps = unix:passwd.byname $alias_maps # コメントイン
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =

3.2.6 信頼できるクライアントのネットワーク

mynetworks”で、信頼できるネットワークを指定します。

#mynetworks = 168.100.3.0/28, 127.0.0.0/8
mynetworks = 192.168.1.0/24, 127.0.0.0/8 # 追加
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table

3.2.7 リレーを許可するドメイン

relay_domains”は、このシステムがメールをリレーしようとする配送先のドメイン
(および、そのサブドメイン)です。

#relay_domains =
relay_domains = $mydestination # 追加

relayhost”は、オプションの“transport”テーブルのエントリがマッチしなかった場合の、
非ローカルメールのデフォルトの送り先ホストを指定します。
空のままにしておきます。

#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost =

3.2.8 エイリアスマップ

alias_maps”は、local配送で使われるエイリアスのデータベースです。
alias_database”は、”newaliases“コマンドでハッシュ化された local配送のエイリアスデータベースです。

オリジナルの”main.cf”の内容を変更する必要はありません。
データベース形式は、“hash”ではなく“lmdb”です。

#alias_maps = dbm:/etc/aliases
alias_maps = lmdb:/etc/aliases
#alias_maps = hash:/etc/aliases, nis:mail.aliases
#alias_maps = netinfo:/aliases
 
#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
alias_database = lmdb:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases

3.2.9 メールBOXの形式の指定

Courier-imapを使うため、Maildir形式とします。 

#home_mailbox = Mailbox
#home_mailbox = Maildir/
  ↓
home_mailbox = Maildir/ # コメントイン

新規ユーザに自動でMaildirが作られるように、以下のように設定しておきます。

# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# chmod -R 700 /etc/skel/Maildir/

3.2.10 smtpd_banner

特定のミドルウェアバージョンや種類を狙った攻撃を防ぐため、 smtpのソフト名とバージョンを表示しないようにします。

#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP # 追加

3.3 SMTP_AUTH / “main.cf”

SMTP_AUTHは、「SMTP Authentication(SMTP認証)」の略称で、
不正アクセスやスパムメールの送信を防ぐために使用されます。

3.3.1 “main.cf”への挿入

設定項目は、表3.3-1に示すようになります。

RHEL 10オリジナルの“main.cf”では、SMTP_AUTHのセクションがありませんので、
特別な目的がなければ下に示す記述をそのままコピーし“main.cf”に追加します。

各項目の設定内容やパラメータ値は、次のページに記載されていますので、
こちらの方でご確認ください。

Postfix 設定パラメータ

# Enable SASL authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
 
broken_sasl_auth_clients = yes # Outlook Expressなどを使用しない場合は不要
 
# Security options
smtpd_sasl_security_options = noanonymous
smtpd_tls_auth_only = yes
 
# Require authentication for relaying
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
defer_unauth_destination

3.3.2 Postfix用SASL設定ファイル編集(“/etc/sasl2/smtpd.conf”)

UNIXユーザーで認証する場合(初期設定はPAM(Pluggable Authentication Modules)認証)は、
pwcheck_method”は初期設定の“saslauthd”のままにしておきます。

SASL独自のパスワードDBを使用する場合は、
pwcheck_method”の値を“auxprop”に変更します。

# 個人的には、端末ログイン・パスワードは覚えやすいシンプルなものに、
# WANからのアクセスがあるメールサーバーのパスワードは、
# 簡単に推測されないよう長く複雑にして使いたいと思っています。
# ですので、ここでは“auxprop”を設定します。

pwcheck_method: saslauthd
  ↓
pwcheck_methodauxprop
mech_list: plain login

3.3.3 SASL認証用アカウントの追加

pwcheck_method”の値が“auxprop”の場合のSASL認証用のアカウントは、
次のよう“saslpasswd2”コマンドで作成します。
コマンドを実行すると、パスワードの入力が求められてきます。

saslpasswd2 (8) | ORACLEマニュアルページセクション8

# /usr/sbin/saslpasswd2 -c -u <domain> <username>
 
-c ユーザーエントリを作成
-u <domain> ユーザーのレルム・ドメイン名

Postfixsasldb を閲覧できるようにpostfixグループを追加し、パーミッションを変更します。

# chgrp postfix /etc/sasldb2
# chmod 640 /etc/sasldb2

登録されたユーザーは、以下のように“sasldblistusers2”コマンドで確認することができます。

# sasldblistusers2

3.3.4 STARTTLS

smtp_tls_security_level”を“may”とした場合、
送信先のSMTPサーバーがSTARTTLS対応している場合にSTARTTLSを使い、
未対応の場合は通常のSMTPで送信します。

smtp_tls_security_level = may # 相手がTLSに対応してればTLS使う
smtp_tls_loglevel = 1 # ログ取得レベルは1にする

3.4 スパムメール対策 / “main.cf”

スパム対策として、下に示す行を追加します。

次のようなことを設定します。

/etc/postfix/access”で許可されたIPアドレスのメールは、転送する。  
MAIL FROM”アドレスが、
RFCで要求されているような完全修飾ドメイン形式ではない場合は転送しない。
 
次のようなメールは、送受信しない。
zen.spamhaus.orgのようなブラックリストにリストアップ
・ ”MAIL FROM”アドレスのドメインが、DNSに登録されていない

# 接続元の制限(スパムメール対策)
smtpd_client_restrictions =
check_client_access lmdb:/etc/postfix/access
reject_rbl_client zen.spamhaus.org
reject_non_fqdn_sender
reject_unknown_sender_domain
 
# エンベロープアドレス(MAIL FROM)による制限(スパムメール対策)
smtpd_sender_restrictions =
reject_rhsbl_sender zen.spamhaus.org
reject_unknown_sender_domain

3.5 その他 / “main.cf”

その他、設定しておいた方が良い設定をいくつか示します。

いずれも、オリジナルの“main.cf”には記載されていませんので、
適用する場合は本記事のままコピーします。

3.5.1 VRFY(Verify)コマンド

SMTPのVRFY(Verify)コマンドは、
メールサーバー上の指定したユーザー(メールアドレス)が実在するかを確認するための
コマンドです。

禁止する場合は、“yes”とします。

# VRFYコマンドの使用を禁止する
disable_vrfy_command = yes

3.5.2 受信メールサイズ制限

受信するメッセージの最大サイズを制限します。
いわゆるメール爆弾の一種への対策です。

# 受信メールサイズの制限(単位はバイト)
message_size_limit = 25600000

3.5.3 宛先不明メールの廃棄

以下に示す設定は、存在しないユーザー宛メールは“unknown_user@localhost”へ転送し、
最終的に捨ててしまう設定です。

main.cf”には、以下の行を追加します。

# 存在しないユーザー宛メールをunknown_userへ配送
local_recipient_maps =
luser_relay = unknown_user@localhost

/etc/aliases”に以下の行を追加して、“newaliases”コマンドでハッシュ化します。

unknown_user: /dev/nul

3.6 “master.cf”

master.cf”では、587ポート(Submission)を有効にする設定を行います。

/etc/postfix/master.cf”の該当行のコメントアウト記号(#)を外して、行を有効にします。

4 Dovecot

本章では、SSL化前のDovecotの基本設定について示します。

4.1 基本設定 / dovecot.conf(“/etc/dovecot”)

protocols”に利用するプロトコルを設定します。

listen”では、ここでは例として、デフォルト設定からIPv4のみ許可に変更します。
場合によっては、listenするIPアドレスを直接指定します。

protocols = pop3 imap
 
#listen = *, ::
listen = * # 追加

4.2 認証設定 / “conf.d/10-auth.conf”

下に示すのは、プレーンテキスト認証を許可するようにするものです。

#disable_plaintext_auth = yes
  ↓
disable_plaintext_auth = no # 変更

auth_mechanisms”は、“login”を追加します。

auth_mechanisms = plain
  ↓
auth_mechanisms = plain  login

4.3 メールボックス設定 / “conf.d/10-mail.conf”

メールの保存場所と形式を、下に示すように指定します。

#mail_location =
  ↓
mail_location =  maildir:~/Maildir

4.4 マスター設定 / “conf.d/10-master.conf”

4.4.1 待ち受けポートの有効化

下に示すように、imappop3Submissionの待ち受けポートを有効化します。

service imap-login {
inet_listener imap {
#port = 143
  ↓
port = 143 # コメントイン
}
}

service pop3-login {
inet_listener pop3 {
#port = 110
  ↓
port = 110 # コメントイン
}
}

service submission-login {
inet_listener submission {
#port = 587
  ↓
port = 587 # コメントイン
}
inet_listener submissions {
#port = 465
}
}

4.4.2 Postfixとの認証連携用ソケットの設定

下に示すようにPostfixとの認証連携用ソケットを設定します。

#unix_listener /var/spool/postfix/private/auth {
#  mode = 0666
#}
  ↓

unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

5 メール送受信のみのアカウント(自分へのメモ)

ログインしないメール送受信のみのUNIXユーザーは、下に示すよう作成します。

# useradd -m -s /sbin/nologin <ユーザー名>

6 おまけ: 第三者中継(オープンリレー)チェック

メールサーバーが誰にでも送信に使われてしまうと、迷惑メールやフィッシングメールの温床に
なります。

本記事の通りPostfixを設定していたならば、第三者中継は無いと思うのですが、
念のためチェックしておいた方がよいのかもしれません。

下に示すツールで、第三者中継チェックの有無をチェックすることができます。

AppRiver SpamLab – Open Relay Test

SMTPポートへの不正アクセス試行は、かなり多いです。
場合によっては、日々の運用に支障をきたすほどです。
できる対策は、しっかりとやっておきたいものです。

以上

本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。

少しでも役に立てていただければ、うれしく思います。

このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元著者名は明らかにしてください

なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ

 

コメント

Add A Knowledge Base Question !

You will receive an email when your question will be answered.

+ = Verify Human or Spambot ?

タイトルとURLをコピーしました