CentOS8でメールサーバ構築 – Postfixのインストールと受信設定

前回メールボックスへアクセス出来るように設定を行いました。

しかしこのままではメールの送信も受信も出来ず、ただ空のメールボックスを眺めるしか出来ません。

今回はPostfixをインストールしてメールを受信できるように設定します。

この記事で行うこと

  1. Postfixのインストール
  2. Postfixの設定
    1. 管轄ドメイン・ホスト名の設定
    2. 受信するネットワークの設定
    3. 信頼するネットワークの設定
    4. 受信メールの転送設定
  3. Dovecotの設定
    1. LMTP機能の有効化
    2. UNIXドメインソケットの設定
  4. その他の設定
    1. エイリアスの設定
    2. ファイアウォールの設定
    3. Postfixの起動・Dovecotの再起動
    4. DNSの設定
  5. 受信確認

1. Postfixのインストール

PostfixもDovecot同様にCentOSのリポジトリからインストールしてしまいます。

[root@localhost ~]# dnf install postfix

2. Postfixの設定

最初の記事で話したようにPostfixはメールの転送を行うサーバです。

このためメールの受信だけで無く、他のサーバにメールを送信することも出来ます。

PostfixはDovecotと違って設定ファイルは2つしかありません。main.cfmaster.cf です。

main.cf は全体の設定、 master.cf は各接続別の固有設定という形に分かれています。

デフォルト値を main.cf で設定して、個別の必要に応じて master.cf で設定を上書きするというイメージです。

今回は main.cf の設定のみ行います。

このため、編集するファイルは全て /etc/postfix/main.cf となります。

また、編集箇所を表しているときに、「-」は削除する行(変更前)、「+」は追加する行(変更後)、記号の記載が無い行は参考までに前後の行を記載しているものとなります。

2-1. 管轄ドメイン・ホスト名の設定

まず、どのドメイン・ホスト名が自分の管轄するものなのかを設定します。

そうしないと、どのメールが自分宛のものなのか判別出来ません。

myhostname にはホスト名を設定します。ホスト名というのはサーバを特定するための名前です。

WebサイトのURLで言うと、 https:// 以降から最初の / が出るまでの部分です。

本サイトでいうと、 blog.yuto-shin.net の部分となります。

mydomain の部分にはドメイン名を設定します。

多分、ドメインは買ってるはずなのでどの部分かは分かると思います。(何か知らずには買わない……ですよね)

一応、本サイトで言うところの yuto-shin.net の部分です。

では、これらを設定します。

編集する箇所は以下です。

  # INTERNET HOST AND DOMAIN NAMES
  #
  # The myhostname parameter specifies the internet hostname of this
  # mail system. The default is to use the fully-qualified domain name
  # from gethostname(). $myhostname is used as a default value for many
  # other configuration parameters.
  #
  #myhostname = host.domain.tld
  #myhostname = virtual.domain.tld
+  myhostname = [ホスト名]

  # The mydomain parameter specifies the local internet domain name.
  # The default is to use $myhostname minus the first component.
  # $mydomain is used as a default value for many other configuration
  # parameters.
  #
  #mydomain = domain.tld
+  mydomain = [ドメイン名]

2-2. 受信するネットワークの設定

Postfixの初期設定では、自サーバ内で発信したメールしか受け付けないようになっています。

これでは外部からのメールを受信できないので、全てのネットワークからメールを受け付けるように設定します。

変更箇所は以下になります。

  # The inet_interfaces parameter specifies the network interface
  # addresses that this mail system receives mail on.  By default,
  # the software claims all active interfaces on the machine. The
  # parameter also controls delivery of mail to user@[ip.address].
  #
  # See also the proxy_interfaces parameter, for network addresses that
  # are forwarded to us via a proxy or network address translator.
  #
  # Note: you need to stop/start Postfix when this parameter changes.
  #
- #inet_interfaces = all
+ inet_interfaces = all
  #inet_interfaces = $myhostname
  #inet_interfaces = $myhostname, localhost
- inet_interfaces = localhost
+ #inet_interfaces = localhost

2-3. 信頼するネットワークの設定

信頼するネットワークからのメールは、ほぼ無条件に受け付けるように設定されています。

そのため、この設定を間違えると迷惑メールの温床になりがちです。

初期設定は自ネットワーク内を信頼するネットワークされていて、これだとネットワーク内からメールを送るときは認証不要になります。

ただ、正直言ってネットワーク内では認証不要、外からは認証って使い分けるより、いつも認証が必要ってした方が単純で分かりやすいので、信頼するネットワークはサーバ自身のみと変更します。

変更する箇所は以下です。

  # The mynetworks parameter specifies the list of "trusted" SMTP
  # clients that have more privileges than "strangers".
  #
  # In particular, "trusted" SMTP clients are allowed to relay mail
  # through Postfix.  See the smtpd_recipient_restrictions parameter
  # in postconf(5).
  #
  # You can specify the list of "trusted" network addresses by hand
  # or you can let Postfix do it for you (which is the default).
  #
  # By default (mynetworks_style = subnet), Postfix "trusts" SMTP
  # clients in the same IP subnetworks as the local machine.
  # On Linux, this does works correctly only with interfaces specified
  # with the "ifconfig" command.
  #
  # Specify "mynetworks_style = class" when Postfix should "trust" SMTP
  # clients in the same IP class A/B/C networks as the local machine.
  # Don't do this with a dialup site - it would cause Postfix to "trust"
  # your entire provider's network.  Instead, specify an explicit
  # mynetworks list by hand, as described below.
  #
  # Specify "mynetworks_style = host" when Postfix should "trust"
  # only the local machine.
  #
  #mynetworks_style = class
  #mynetworks_style = subnet
- #mynetworks_style = host
+ mynetworks_style = host

2-4. 受信メールの転送設定

自分のサーバ宛てにメールが届いた際にMDAにメールを引き渡すための設定です。

最初の記事で話したとおり、今回はMDAにDovecotを使うためDovecotに引き渡す設定を行います。

後からDovecotのUNIXドメインソケット(受付窓口)を設定するので、その予定の場所を設定をします。

編集する箇所は以下になります。

  # The mailbox_transport specifies the optional transport in master.cf
  # to use after processing aliases and .forward files. This parameter
  # has precedence over the mailbox_command, fallback_transport and
  # luser_relay parameters.
  #
  # Specify a string of the form transport:nexthop, where transport is
  # the name of a mail delivery transport defined in master.cf.  The
  # :nexthop part is optional. For more details see the sample transport
  # configuration file.
  #
  # NOTE: if you use this feature for accounts not in the UNIX password
  # file, then you must update the "local_recipient_maps" setting in
  # the main.cf file, otherwise the SMTP server will reject mail for
  # non-UNIX accounts with "User unknown in local recipient table".
  #
  # Cyrus IMAP over LMTP. Specify ``lmtpunix      cmd="lmtpd"
  # listen="/var/imap/socket/lmtp" prefork=0'' in cyrus.conf.
- #mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
+ #mailbox_transport = lmtp:unix:private/dovecot-lmtp

private/dovecot-lmtp は相対パスなので最初に / は付けてはいけません。

Postfixのデフォルト設定では /var/spool/postfix/ をルートとして見るのでこの設定は、 /var/spool/postfix/private/dovecot-lmtp ということになります。

3. Dovecotの設定

メールの受信のためにはDovecotのMDAとしての設定も必要です。(前回行ったDovecotの設定はMRAとしての設定のみでした)

行うことはMDAの機能の有効化と、先程2-4で話したようにPostfixからメールを受け付ける窓口を設定するものです。

3-1. LMTP機能の有効化

前回行ったプロトコルの設定にLMTPを追加します。

まあ前回一緒に有効化しても良かったのですが、どの設定がなぜ必要なのか理解するためにも、ということで。

/etc/dovecot/dovecot.conf を編集します。

- protocols = imap
+ protocols = imap lmtp

3-2. UNIXドメインソケットの設定

Postfixのところで話したDovecotがメールを受け付ける窓口ですね。

Postfixで設定したパスと同じになるように設定します。

DovecotはPostfixと違う場所がルートなので、相対パスではなく絶対パスで記載してください。

また、Postfix以外が使えないように所有者とグループを postfix にして、所有者以外は触れないようにします。

/etc/dovecot/conf.d/10-master.conf を編集します。

service lmtp {
- unix_listener lmtp {
+ unix_listener /var/spool/postfix/private/dovecot-lmtp {
-   mode = 0666
+   user = postfix
+   group = postfix
+   mode = 0600
  }

4. その他の設定

ファイアウォールの設定やPostfixの起動など他に必要な設定を行います。

4-1. エイリアスの設定

エイリアスの設定をすることで、色々なユーザに送られたメールを1つのユーザに集約することが出来ます。

例えば、 hoge@example.com に fuga@example.com や gatu@example.com のメールを全て転送させるといったことが可能です。

ちなみに、この設定はメール送信時に使えるメールアドレスの制約にも使いますので、注意してください。

設定するファイルは /etc/aliases となります。

今回は上記の通りhoge宛てにメールを集約すると仮定しています。必要に応じて書き換えてください。

  # Person who should get root's mail
- root:
+ root: hoge

  # User difined aliases
+ hoge:   hoge
+ fuga:   hoge
+ gatu:   hoge

設定を書き終えたら newaliases コマンドを実行します。

[root@localhost ~]# newaliases
  • newaliases : aliasesの設定内容をPostfixが解釈できる形式に変換するコマンドです。

4-2. ファイアウォールの設定

メールの受信には25番ポートが開いている必要があるので、こちらを開放するように設定します。

ファイアウォールについてはこちらを参照してください。
[root@localhost ~]# firewall-cmd --add-service=smtp --permanent
[root@localhost ~]# firewall-cmd --reload

ちなみに、smtpsは別のポート(465番)になるので、smtpを開放するようにしてください。

4-3. Postfixの起動・Dovecotの再起動

Postfixの起動を行います。また、Dovecotの設定を変更しているので再起動します。

起動については「1. SSHの起動・停止」を参照してください。
[root@localhost ~]# systemctl enable postfix --now
[root@localhost ~]# systemctl restart dovecot

4-4. DNSの設定

DNSの設定方法はどこのネームサーバを使っているかによって変わってきますので解説はしません。

受信したいメールドメインでMXレコードを作成し、そのメールを受信するサーバのホスト名を内容に書き込むようにしてください。

優先度は単独サーバで運用している限りはあまり関係ないので適当に10とかで設定してください。

例えば、 hoge@mail.example.com 宛てのメールを server.example.com でAレコードに登録されているサーバで受け取りたい場合は以下のようになります。

mail.example.com MX server.example.com 10

順序もネームサーバの設定画面によってまちまちですので、参考にもならないかもしれないですが、一応。

5. 受信確認

設定したメールサーバ宛てにメールを送ってみます。

送るメールはフリーメールなどからで構いません。(メールフィルタの設定がされていないので良くも悪くもどんなメールも届きます)

メールを送ってからしばらく待つとメールが届くはずです。(今回のメールはGmailのアカウントから送信しています)

もしメールが届かないようであれば、更新ボタンをクリックしてみてください。

まとめ

これでメールの受信までできるようになりました。

会員登録とかメルマガ受信用とかの捨てメールの類であればこれでも十分使えますが、ちゃんとメールを使うのであれば送信まで必要です。

次回はメール送信をできるように設定を行います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です