前回メールボックスへアクセス出来るように設定を行いました。
しかしこのままではメールの送信も受信も出来ず、ただ空のメールボックスを眺めるしか出来ません。
今回はPostfixをインストールしてメールを受信できるように設定します。
この記事で行うこと
1. Postfixのインストール
PostfixもDovecot同様にCentOSのリポジトリからインストールしてしまいます。
[root@localhost ~]# dnf install postfix
2. Postfixの設定
最初の記事で話したようにPostfixはメールの転送を行うサーバです。
このためメールの受信だけで無く、他のサーバにメールを送信することも出来ます。
PostfixはDovecotと違って設定ファイルは2つしかありません。main.cf
と master.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の設定を変更しているので再起動します。
[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のアカウントから送信しています)
まとめ
これでメールの受信までできるようになりました。
会員登録とかメルマガ受信用とかの捨てメールの類であればこれでも十分使えますが、ちゃんとメールを使うのであれば送信まで必要です。
次回はメール送信をできるように設定を行います。