メールシステムを構築してみる(Linux)
| 登録日 | :2024/05/07 04:18 |
|---|---|
| カテゴリ | :Linux |
RockyLinuxでメールのシステムを構築してみる。
設定に関して参考となるサイトは以下の通り。
参考リンク)link
1 ざっくり、メール配信の仕組みについての私の理解。
MTA:メール転送。SMTPでメールサーバーにメールを転送する
MDA:転送されたメールから、自分のメールを自分のMUAにダウンロード(配信)する。
MUA:outlook等のように、メールを書いたり読んだりするユーザインタフェース
2 プロトコル
POP3( Post Office Protocol 3)
- メール受信の際に用いられるプロトコル
- メールサーバに保存されたメールをユーザ端末にダウンロードして閲覧する
IMAP( Internet Message Access Protocol)
- メール受信の際に用いられるプロトコル。
- メールはメールサーバ上に保存し、ユーザはサーバ上に置かれたままの状態でメールを閲覧する。
3 Postfixインストール(SMTPサーバ)
3.1 postfix
postfixはデフォルトでインストール済みである
[root@node1 ~]# yum list installed postfix
インストール済みパッケージ
postfix.x86_64 2:3.5.8-4.el8 @anaconda
[root@node1 ~]# yum list postfix
メタデータの期限切れの最終確認: 0:00:30 前の 2024年05月06日 18時01分34秒 に実施しました。
インストール済みパッケージ
postfix.x86_64 2:3.5.8-4.el8 @anaconda
利用可能なパッケージ
postfix.x86_64 2:3.5.8-7.el8 baseos
[root@node1 ~]#
updateがあるかもしれないので、念のため最新版にする
[root@node1 ~]# yum update postfix
~
アップグレード済み:
postfix-2:3.5.8-7.el8.x86_64 postfix-perl-scripts-2:3.5.8-7.el8.x86_64
完了しました!
[root@node1 ~]#
3.2 postfixの設定
本来はDNSサーバでメールサーバの名前解決をするのであるが、今回はテストのため/etc/hostsにて名前解決をする。
まず、/etc/hostsにメールサーバの情報を追記する
[user01@mailtest1 Maildir]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.105 mailtest1
192.168.56.109 rockylinux_test_zabbix
/etc/postfix/main.cf にて以下の設定をする
- ホスト名の変更
96行目
myhostname = mail.mailtest1
94 #myhostname = host.domain.tld
95 #myhostname = virtual.domain.tld
96 myhostname = mail.mailtest1
- ドメイン名を変更
mydomain = mailtest1
102 #
103 #mydomain = domain.tld
104 mydomain = mailtest1
- 許可インタフェースを全てに変更
all のコメントアウトを外す
localhost のコメントアウトする
134 inet_interfaces = all
135 #inet_interfaces = $myhostname
136 #inet_interfaces = $myhostname, localhost
137 #inet_interfaces = localhost
- 独自ドメイン($mydomain)宛てのメールを受信できるように変更
185 #mydestination = $myhostname, localhost.$mydomain, localhost
186 mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
- メールボックスをMaildirを有効にする
439 #home_mailbox = Mailbox
440 home_mailbox = Maildir/
- 送信元メールアドレスのサブドメイン部分(ホスト名の部分)を削除するオプション設定
最下行に masquerade_domains = mailtest1を追記
742 # add
743 masquerade_domains = mailtest1
- メール送信にhostsファイルを参照する設定
smtp_host_lookup = native
744 smtp_host_lookup = native
3.3 誤りチェック
-
全設定値確認
postconf -
デフォルトから変更されている設定を確認
postconf -n -
記述チェック
postfix checkでエラーがなければ記述に問題なし
[root@node1 postfix]# postfix check
[root@node1 postfix]#
3.4 postfixの再起動
systemctl restart postfix
3.5 firewalldの設定変更
firewall-cmd --list-services
firewall-cmd --add-service=smtp --permanent
firewall-cmd --reload
[root@mailtest1 postfix]# firewall-cmd --list-services
cockpit dhcpv6-client ssh
[root@mailtest1 postfix]# firewall-cmd --add-service=smtp --permanent
success
[root@mailtest1 postfix]# firewall-cmd --reload
success
[root@mailtest1 postfix]# firewall-cmd --list-services
cockpit dhcpv6-client smtp ssh
[root@mailtest1 postfix]#
3.5 SMTPの動作確認
rootから、user01へメールを送ってみる
telnet node1 25
もしくは
telnet localhost 25
[root@mailtest1 postfix]# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.mailtest1 ESMTP Postfix
HELO mailtest1
250 mail.mailtest1
mail from:root@mailtest1
250 2.1.0 Ok
rcpt to:user01@mailtest1
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test!!!!!!
.
250 2.0.0 Ok: queued as 2A2EC12D693A
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mailtest1 postfix]#
- user01にメールが来ていることを確認する
[root@mailtest1 postfix]# su - user01
l[user01@mailtest1 ~]$ ls
Maildir
[user01@mailtest1 ~]$ cd Maildir/
[user01@mailtest1 Maildir]$ ls
cur new tmp
[user01@mailtest1 Maildir]$ ls new
1714996634.Vfd00I872d2aM157873.mailtest1
[user01@mailtest1 Maildir]$ cat new/1714996634.Vfd00I872d2aM157873.mailtest1
Return-Path: <root@mailtest1>
X-Original-To: user01@mailtest1
Delivered-To: user01@mailtest1
Received: from mailtest1 (localhost [IPv6:::1])
by mail.mailtest1 (Postfix) with SMTP id 2A2EC12D693A
for <user01@mailtest1>; Mon, 6 May 2024 20:56:42 +0900 (JST)
Message-Id: <20240506115701.2A2EC12D693A@mail.mailtest1>
Date: Mon, 6 May 2024 20:56:42 +0900 (JST)
From: root@mailtest1
test!!!!!!
[user01@mailtest1 Maildir]$
※気づき:NISサーバとNFSでマウントしていたら、このテストはうまくいかない。なぜなら、user01のホームディレクトリをNFSサーバに作成されており、localhostで送った先のホームディレクトリとは別だったのである。。そのため、NISやNFSを構築しているサーバでは注意が必要だ。
- mialコマンドを使ってメールを確認する
※事前にmailxをインストールしておく
[root@mailtest1 postfix]# yum install mailx
[user01@mailtest1 ~]$ mail -f ~/Maildir
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/home/user01/Maildir": 1 message 1 new
>N 1 root@mailtest1 Mon May 6 20:56 12/394
& 1
Message 1:
From root@mailtest1 Mon May 6 20:56:42 2024
Return-Path: <root@mailtest1>
X-Original-To: user01@mailtest1
Delivered-To: user01@mailtest1
Date: Mon, 6 May 2024 20:56:42 +0900 (JST)
From: root@mailtest1
Status: R
test!!!!!!
& q
"/home/user01/Maildir" complete
[user01@mailtest1 ~]$
既読したメールは、~/Maildir/newから消えてcurに移動する。
[user01@mailtest1 ~]$ ll
合計 0
drwx------. 5 user01 user01 39 5月 6 20:57 Maildir
[user01@mailtest1 ~]$ ll Maildir
合計 0
drwx------. 2 user01 user01 58 5月 6 21:54 cur
drwx------. 2 user01 user01 6 5月 6 21:54 new
drwx------. 2 user01 user01 6 5月 6 20:57 tmp
[user01@mailtest1 ~]$ ll Maildir/new
合計 0
[user01@mailtest1 ~]$ ll Maildir/cur
合計 4
-rw-------. 1 user01 user01 393 5月 6 20:57 1714996634.Vfd00I872d2aM157873.mailtest1:2,S
[user01@mailtest1 ~]$
3.6 そのほか
-
Mailbox形式
すべてのメールが一つのファイルに書き込まれる方式。
デフォルトでは、/var/spool/mail/[ユーザ] ファイルにたまっていく。 -
Maildir形式
メール一通ごとに一つのファイルに書き込まれる(別ファイル)
ファイルが分かれるため、Mailbox形式のようなデメリットがない(ファイル肥大化や、データ消失リスク)
Postfixはどちらにも対応している。
また、/var/log/maillogにログが保存される。メールが届かないときには、こちらを確認する。
4 Dovecotインストール
4.1 Dovecot
デフォルトではインストールされていないので、dovecotをインストールする。
[root@mailtest1 ~]# yum install dovecot
[root@mailtest1 ~]# yum list installed dovecot
インストール済みパッケージ
dovecot.x86_64 1:2.3.16-4.el8 @appstream
[root@mailtest1 ~]#
4.2 Dovecotの設定1
/etc/dovecot/dovecot.conf にて設定を行う
- 有効にするプロトコルの設定
protocolsのコメントアウトを外す(POP3などを有効)
23 # Protocols we want to be serving.
24 #protocols = imap pop3 lmtp submission
25 protocols = imap pop3
- リッスンするインタフェースを指定
コメントアウトを外して全インタフェースを許可する
31 #listen = *, ::
32 listen = *, ::
33
4.3 Dovecotの設定2
/etc/dovecot/conf.d/10-mail.conf の設定を行う
locationで Maildirを有効化する
23 #
24 mail_location = maildir:~/Maildir
25 # mail_location = mbox:~/mail:INBOX=/var/mail/%u
4.4 Dovecotの設定3
/etc/dovecot/conf.d/10-auth.conf の設定を行う
平文を有効化する
10 #disable_plaintext_auth = yes
11 disable_plaintext_auth = no
4.5 Dovecotの設定4
/etc/dovecot/conf.d/10-ssl.conf の設定を行う
受信接続にSSLを使用しない
8 #ssl = required
9 ssl = no
4.6 Dovecotの再起動
設定を有効化するため、Dovecotを再起動する
[root@mailtest1 conf.d]# systemctl restart dovecot
[root@mailtest1 conf.d]# systemctl is-active dovecot
active
[root@mailtest1 conf.d]#
4.7 Firewallの設定
firewall-cmd --list-services
firewall-cmd --add-service=pop3 --permanent
firewall-cmd --add-service=imap --permanent
firewall-cmd --reload
[root@mailtest1 conf.d]# firewall-cmd --list-services
cockpit dhcpv6-client smtp ssh
[root@mailtest1 conf.d]# firewall-cmd --add-service=pop3 --permanent
success
[root@mailtest1 conf.d]# firewall-cmd --add-service=imap --permanent
success
[root@mailtest1 conf.d]# firewall-cmd --reload
success
[root@mailtest1 conf.d]# firewall-cmd --list-services
cockpit dhcpv6-client imap pop3 smtp ssh
[root@mailtest1 conf.d]#
4.8 動作チェック
POP3 -> telnet mailtest 110
IMPA -> telnet mailtest 143
以下のように、メールが参照できれば、POP3を使ってメールが取得できたことが確認できる。
[root@mailtest1 conf.d]# telnet mailtest1 110
Trying 192.168.56.105...
Connected to mailtest1.
Escape character is '^]'.
+OK Dovecot ready.
user user01
+OK
pass test@12345
+OK Logged in.
list
+OK 1 messages:
1 404
.
retr 1
+OK 404 octets
Return-Path: <root@mailtest1>
X-Original-To: user01@mailtest1
Delivered-To: user01@mailtest1
Received: from mailtest1 (localhost [IPv6:::1])
by mail.mailtest1 (Postfix) with SMTP id 2A2EC12D693A
for <user01@mailtest1>; Mon, 6 May 2024 20:56:42 +0900 (JST)
Message-Id: <20240506115701.2A2EC12D693A@mail.mailtest1>
Date: Mon, 6 May 2024 20:56:42 +0900 (JST)
From: root@mailtest1
test!!!!!!
.
logout
-ERR Unknown command: LOGOUT
quit
+OK Logging out.
Connection closed by foreign host.
[root@mailtest1 conf.d]#
今回のメールサーバの設定はこれでOK。
5 メールを送ってみよう
もう一台別のホストで2~4の設定を行い、合計2台のメールサーバをつくって、メールを飛ばしてみよう。
[root@mailtest1 conf.d]# su - user01
[user01@mailtest1 ~]$ mail user01@rockylinux_test_zabbix
Subject: Title
test message.
.
EOT
[user01@mailtest1 ~]$
ログを確認する
[root@mailtest1 conf.d]# cat /var/log/maillog
May 7 00:40:28 mailtest1 sendmail[10414]: My unqualified host name (mailtest1) unknown; sleeping for retry
May 7 00:41:28 mailtest1 sendmail[10414]: unable to qualify my own domain name (mailtest1) -- using short name
May 7 00:41:28 mailtest1 sendmail[10414]: 446FfSwJ010414: from=user01, size=234, class=0, nrcpts=1, msgid=<202405061541.446FfSwJ010414@mailtest1>, relay=user01@localhost
May 7 00:41:28 mailtest1 postfix/smtpd[10430]: connect from localhost[127.0.0.1]
May 7 00:41:28 mailtest1 postfix/smtpd[10430]: discarding EHLO keywords: CHUNKING
May 7 00:41:28 mailtest1 sendmail[10414]: STARTTLS=client, relay=[127.0.0.1], version=TLSv1.3, verify=FAIL, cipher=TLS_AES_256_GCM_SHA384, bits=256/256
May 7 00:41:28 mailtest1 postfix/smtpd[10430]: discarding EHLO keywords: CHUNKING
May 7 00:41:28 mailtest1 postfix/smtpd[10430]: 9A8BF12D690A: client=localhost[127.0.0.1]
May 7 00:41:28 mailtest1 postfix/cleanup[10433]: 9A8BF12D690A: message-id=<202405061541.446FfSwJ010414@mailtest1>
May 7 00:41:28 mailtest1 sendmail[10414]: 446FfSwJ010414: to=user01@rockylinux_test_zabbix, ctladdr=user01 (1000/1000), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30234, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 9A8BF12D690A)
May 7 00:41:28 mailtest1 postfix/qmgr[6504]: 9A8BF12D690A: from=<user01@mailtest1>, size=673, nrcpt=1 (queue active)
May 7 00:41:28 mailtest1 postfix/smtpd[10430]: disconnect from localhost[127.0.0.1] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
May 7 00:41:28 mailtest1 postfix/smtp[10434]: 9A8BF12D690A: to=<user01@rockylinux_test_zabbix>, relay=rockylinux_test_zabbix[192.168.56.109]:25, delay=0.38, delays=0.07/0.06/0.2/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 5E6E021C8207)
May 7 00:41:28 mailtest1 postfix/qmgr[6504]: 9A8BF12D690A: removed
[root@mailtest1 conf.d]#
送信先のサーバを見てみる.
Maildir/newに新規メールがある。
[user01@rockylinux_test_zabbix ~]$ ll Maildir/new
合計 4
-rw-------. 1 user01 user01 982 5月 6 11:41 1715010089.Vfd00I21c821dM413719.rockylinux_test_zabbix
[user01@rockylinux_test_zabbix ~]$
中身を確認すると、きちんとメールが受信できている。
[user01@rockylinux_test_zabbix ~]$ mail -f Maildir/
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"Maildir/": 2 messages 1 new
1 root@rockylinux_test Mon May 6 10:51 12/501
>N 2 user01 Mon May 6 11:41 24/983 "Title"
& 2
Message 2:
From user01@mailtest1 Mon May 6 11:41:29 2024
Return-Path: <user01@mailtest1>
X-Original-To: user01@rockylinux_test_zabbix
Delivered-To: user01@rockylinux_test_zabbix
From: user01 <user01@mailtest1>
Date: Tue, 07 May 2024 00:40:28 +0900
To: user01@rockylinux_test_zabbix
Subject: Title
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
Status: R
test message.
& q
"Maildir/" complete
[user01@rockylinux_test_zabbix ~]$
これで、別のドメインのメールサーバ間でメールの送受信ができることが確認できた。