🌊
【Azure】CentOS7.9にてSMTPサーバーを構築してみた。(Postfix)
はじめに
Azure上にて仮想マシン(CentOS7.9)を構築し、Postfixを使用してSMTPサーバーを構築してみました。
SMTPサーバーにメールが届くことを確認するまで実施します。
構成図
仮想マシンのスペック
項目 | 設定 |
---|---|
VM名 | smtptest09 |
マシンタイプ | Standard B1ms |
OS | CentOS7.9 - Gen1 |
vCPU | 1 |
メモリ(GB) | 2 |
ディスク | 30GiB |
前提
- あくまでも検証用途で作成
- お名前ドットコムにてドメイン作成済み
- 仮想マシンは既に作成済み(立てたところからスタート)
- ネットワークセキュリティグループにて25番ポート(SMTP)開放済み(受信セキュリティ規則)
- パブリックIPアドレスを「静的」に設定済み/DNS名ラベルをホスト名(postfix)に設定済み
作業の流れ
①お名前ドットコムにてレコード登録
②postfix導入確認
③postfix設定
④メール送信・受信確認
作業手順
①お名前ドットコムにてレコード登録
購入したドメインのレコード設定より、以下レコードを登録する。
ホスト名 | TYPE | TTL | VALUE | 優先 | 状態 |
---|---|---|---|---|---|
smtptest09.testoffice.work (ホスト名.ドメイン名) |
A | 3600 | 20.46.122.73 (パブリックIPアドレス) |
有効 | |
testoffice.work | MX | 3600 | smtptest09.testoffice.work (ホスト名.ドメイン名) |
10 | 有効 |
使用するレコードの説明
レコード | 説明 | 備考 |
---|---|---|
Aレコード | ドメイン名をIPアドレスに置き換えるレコード | smtptest09.testoffice.work → 20.46.122.73 |
MXレコード | メールサーバのホスト名を記載するレコード | Aレコードと同様のタイミングで登録 |
②postfix導入確認
rootユーザーへスイッチ
コマンド
sudo -i
ホスト名設定
- 事前ホスト名確認
コマンド
hostnamectl status
実行例
[cloudadmin@smtptest09 ~]$ hostnamectl status
Static hostname: smtptest09
Icon name: computer-vm
Chassis: vm
Machine ID: b210cf36d2b54793bd0d8d5c3f8cc892
Boot ID: 75c75e6a246741c0957327a586de1246
Virtualization: microsoft
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1160.15.2.el7.x86_64
Architecture: x86-64
[cloudadmin@smtptest09 ~]$
- FQDN設定
コマンド
hostnamectl set-hostname FQDN名
コマンド例
hostnamectl set-hostname smtptest09.testoffice.work
- 設定後確認
Static hostname
が変更されていることを確認。
コマンド
hostnamectl status
実行例
[root@smtptest09 ~]# hostnamectl status
Static hostname: smtptest09.testoffice.work ← ここ
Icon name: computer-vm
Chassis: vm
Machine ID: b210cf36d2b54793bd0d8d5c3f8cc892
Boot ID: 75c75e6a246741c0957327a586de1246
Virtualization: microsoft
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-1160.15.2.el7.x86_64
Architecture: x86-64
[root@smtptest09 ~]#
hosts設定
- バックアップフォルダ作成
コマンド
cd /etc
mkdir bk
- 事前ファイルバックアップ
コマンド
cp -p hosts bk/hosts_`date "+%Y%m%d_%H%M%S"`
- ファイルバックアップ確認
コマンド
ls -l bk
実行例
[root@smtptest09 etc]# ls -l bk
total 4
-rw-r--r--. 1 root root 158 Jun 7 2013 hosts_20210516_133926
[root@smtptest09 etc]#
- hostsファイル編集
コマンド
vim hosts
編集内容
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
20.46.122.73 smtptest09.testoffice.work smtptest09 ← 追加
- hostsファイル確認
コマンド
cat hosts
編集内容
[root@smtptest09 etc]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
20.46.122.73 smtptest09.testoffice.work smtptest09
[root@smtptest09 etc]#
postfixパッケージ確認
コマンド
yum list installed | grep postfix
実行例
[root@smtptest09 ~]# yum list installed | grep postfix
postfix.x86_64 2:2.10.1-9.el7 @os
[root@smtptest09 ~]#
③postfix設定
設定ファイルバックアップ
- ディレクトリ移動
コマンド
cd /etc/postfix/
- バックアップ用ディレクトリ作成
コマンド
mkdir bk
- ファイルコピー
コマンド
cp -p main.cf bk/main.cf_`date "+%Y%m%d_%H%M%S"`
- バックアップ確認
コマンド
ls -l bk
実行例
[root@smtptest09 postfix]# ls -l bk
total 28
-rw-r--r--. 1 root root 27988 Nov 12 2020 main.cf_20210516_072602
[root@smtptest09 postfix]#
設定ファイル編集
- 設定ファイル編集
コマンド
vim /etc/postfix/main.cf
※vi
より見やすいvim
を使用しています。
編集内容
#myhostname = host.domain.tld
myhostname = smtptest09.testoffice.work ← 追加
#mydomain = domain.tld
mydomain = testoffice.work ← 追加
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
# inet_interfaces = localhost ← コメントアウト
inet_interfaces = all ← 追加
#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 ← 追加
#home_mailbox = Mailbox
#home_mailbox = Maildir/
home_mailbox = Maildir/ ← 追加
設定例)
設定例
myhostname = smtptest09.testoffice.work
mydomain = testoffice.work
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
【Postfixパラメーターについて】
パラメーター | 詳細 | 設定例 |
---|---|---|
myhostname | サーバのホスト名を定義する。 | myhostname = smtptest09.testoffice.work |
mydomain | メールドメイン名を定義する。 | mydomain = testoffice.work |
inet_interfaces | メールを受信するIPアドレスを定義にする。all の場合、全てのIPアドレスからメールを受信する。 |
inet_interfaces = all |
mydestination | メールの終着点を定義する。 宛名がこの値のどれかと一致すると、そのメールは該当するローカルフォルダに格納する。 |
mydestination = $myhostname,localhost.$mydomain,localhost, $mydomain |
home_mailbox | メールの格納先を定義する。自動的に送り先UNIXユーザのホームディレクトリパスが付け足される。 | home_mailbox = Maildir/ |
設定ファイル確認
- バックアップファイルと比較して差異に間違いがないか確認する。
コマンド
diff /etc/postfix/main.cf /etc/postfix/bk/main.cf_20210516_134754
実行例
[root@smtptest09 postfix]# diff /etc/postfix/main.cf /etc/postfix/bk/main.cf_20210516_134754
77d76
< myhostname = smtptest09.testoffice.work
85d83
< mydomain = testoffice.work
118,119c116
< #inet_interfaces = localhost
< inet_interfaces = all
---
> inet_interfaces = localhost
167c164
< #mydestination = $myhostname, localhost.$mydomain, localhost
---
> mydestination = $myhostname, localhost.$mydomain, localhost
171d167
< mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
424d419
< home_mailbox = Maildir/
[root@smtptest09 postfix]#
- Postfixの
main.cf
で読み込まれるパラメータを確認
コマンド
postconf -n
エラーが検知しないことを確認。
実行例
[root@smtptest09 postfix]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = testoffice.work
myhostname = smtptest09.testoffice.work
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
[root@smtptest09 postfix]#
postfix起動/自動起動設定
- postfix起動
コマンド
systemctl restart postfix
systemctl status postfix
実行例
[root@smtptest09 postfix]# systemctl restart postfix
[root@smtptest09 postfix]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2021-05-16 13:52:23 UTC; 6s ago
Process: 8564 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
Process: 8577 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 8575 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 8573 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 8649 (master)
CGroup: /system.slice/postfix.service
tq8649 /usr/libexec/postfix/master -w
tq8650 pickup -l -t unix -u
mq8651 qmgr -l -t unix -u
May 16 13:52:23 smtptest09.testoffice.work systemd[1]: Stopped Postfix Mail T...
May 16 13:52:23 smtptest09.testoffice.work systemd[1]: Starting Postfix Mail ...
May 16 13:52:23 smtptest09.testoffice.work postfix/master[8649]: daemon start...
May 16 13:52:23 smtptest09.testoffice.work systemd[1]: Started Postfix Mail T...
Hint: Some lines were ellipsized, use -l to show in full.
[root@smtptest09 postfix]#
- postfix自動起動設定
コマンド
systemctl enable postfix
systemctl is-enabled postfix
実行例
[root@smtptest09 postfix]# systemctl enable postfix
[root@smtptest09 postfix]# systemctl is-enabled postfix
enabled
[root@smtptest09 postfix]#
メールユーザーを作成
メールユーザーmuser
を作成する。
コマンド
sudo useradd muser
sudo passwd muser
cat /etc/passwd | grep muser
実行例
[root@smtptest09 postfix]# sudo useradd muser
[root@smtptest09 postfix]# sudo passwd muser
Changing password for user muser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@smtptest09 postfix]# cat /etc/passwd | grep muser
muser:x:1001:1001::/home/muser:/bin/bash
[root@smtptest09 postfix]#
④メール送信・受信確認
メール送信
任意のメーラーでmuser@testoffice.work
宛にメールを送付
※今回はGmailにて送付
メール受信
- メール受信確認
コマンド
cat /home/muser/Maildir/new/メールファイル名
コマンド例
cat /home/muser/Maildir/new/1621173481.V802I5172M495798.smtptest09.testoffice.work
表示例
From: =?UTF-8?B?5L2Q6Jek6ZuF5Lq6?= <*******************@gmail.com>
Date: Sun, 16 May 2021 22:56:56 +0900
Message-ID: <CAFKx2UAn550ob5ngRFRPOi6uHF4829O=TA_Y+G+QwNhbStGmaQ@mail.gmail.com>
Subject: test
To: muser@testoffice.work
Content-Type: multipart/alternative; boundary="000000000000bf916505c272dcab"
--000000000000bf916505c272dcab
Content-Type: text/plain; charset="UTF-8"
test
mail
mail
--000000000000bf916505c272dcab
Content-Type: text/html; charset="UTF-8"
<div dir="ltr">test<div>mail</div><div>mail</div></div>
--000000000000bf916505c272dcab--
- メールログ確認
コマンド
tail /var/log/maillog
実行例(一部抜粋)
May 16 13:58:01 smtptest09 postfix/qmgr[8651]: 26FA4100026B: removed
May 16 13:58:01 smtptest09 postfix/smtpd[8725]: disconnect from mail-vs1-f41.google.com[209.85.217.41]
May 16 14:01:21 smtptest09 postfix/anvil[8727]: statistics: max connection rate 1/60s for (smtp:209.85.217.41) at May 16 13:58:00
May 16 14:01:21 smtptest09 postfix/anvil[8727]: statistics: max connection count 1 for (smtp:209.85.217.41) at May 16 13:58:00
May 16 14:01:21 smtptest09 postfix/anvil[8727]: statistics: max cache size 1 at May 16 13:58:00
さいごに
今回はAzure上のCentOSにPostfixを構築してみました。
何か一つでも参考になれば幸いです。
Discussion