こんにちは、ぐっちゃんです。
今回はメールサーバ構築の流れを解説していきます。
まとめ
- 外部にメールを送る場合、inet_interface を all にする
- postfix は MTA と MDAの機能がある (正確には MDA は localデーモンが担う)
- デフォルトの保存形式は Mailbox、変える場合は home_mailbox を設定する
メールサーバについて
メールサーバは、以下のコンポーネントからなるサーバです。
・MTA: Mail Transfer Agent
メールを 内部/外部 に転送する
・MDA: Mail Delivery Agent
受信したメールをローカルのユーザに配送する
この記事では、postfix パッケージを使ってメールサーバを構築し、MTA と MDA の動作を紹介します。
postfix のインストール
では、yumコマンドで postfix をインストールしましょう。
RHEL8以降のバージョンなので、dnfコマンドでも処理は同様になります。
<実行例>
# yum install postfix
ちなみに、この記事での postfix は postfix-3.5.9-24.el9.x86_64 です。
※バージョンによって挙動や出力内容が微妙に変わることを保証できないため
もしインストールできない場合は、リポジトリが有効か確認しよう!
postfixの設定を見る
postfix の設定ファイルの場所は、rpmコマンドの -qcオプションで出力される通り、 /etc/postfix/main.cf です。
自機内での運用ならデフォルトのままでよいですが、もし外部にメールを送信する場合は、以下のように inet_interfaces を localhost から all にします。
<実行例>
[root@localhost ~]# less /etc/postfix/main.cf
:
# RECEIVING MAIL
# 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].
:
# inet_interfaces = all ★このコメントを外す
:
inet_interfaces = localhost ★デフォルトのこの行をコメントにする
通信の許可(firewallを無効にしている場合はスキップ)
<実行例>以下のどちらかを実行
# firewall-cmd –add-port=25/tcp
# firewall-cmd –add-service=smtp
postfix を動かす
今回は admin というユーザ宛にメールを送信してみます。
telnet や sendmail でも、postfix がメールを転送し、ローカルユーザに配送していることがわかります。(正確には localデーモンがMDAの役割を果たす)
telnet コマンド
基本的には httpd の確認の時と同様、ホスト名とポートを指定します。
<実行例> ★が入力箇所です
[root@localhost ~]# telnet localhost 25
Trying ::1…
Connected to localhost.
Escape character is ‘^]’.
220 localhost.localdomain ESMTP Postfix
EHLO localhost ★
250-localhost.localdomain
250-PIPELINING
:
250 CHUNKING
mail from:root ★
250 2.1.0 Ok
rcpt to:admin ★
250 2.1.5 Ok
data ★
354 End data with .
From:root ★
To:admin ★
Subject:Test-Mail ★
. ★
250 2.0.0 Ok: queued as 1A60E43BF0
quit ★
221 2.0.0 Bye
Connection closed by foreign host.
ユーザ(今回は admin)に届いたメールは、/var/spool/mail配下に送られます。
<確認例>
[root@localhost ~]# cat /var/spool/mail/admin
From root@localhost.localdomain Tue Sep 17 08:27:38 2024
Return-Path: root@localhost.localdomain
X-Original-To: admin
Delivered-To: admin@localhost.localdomain
Received: from localhost (localhost [IPv6:::1])
by localhost.localdomain (Postfix) with ESMTP id 1A60E43BF0
for ; Tue, 17 Sep 2024 08:26:31 +0900 (JST)
From: root@localhost.localdomain
To: admin@localhost.localdomain
Subject:Test-Mail
Message-Id: 20240916232641.1A60E43BF0@localhost.localdomain
Date: Tue, 17 Sep 2024 08:26:31 +0900 (JST)
sendmail コマンド
mail.txt というファイルに内容を記述したうえで、sendmailコマンドにて mail.txt の内容を送信する方法です。
<mail.txtの内容>
[root@localhost ~]# cat mail.txt
Subject: Test Mail root2admin
This is a test email sent from root to admin.
実行イメージ
# sendmail <宛先メールアドレス> < mail.txt
<実行例>
[root@localhost ~]# date; sendmail admin@localhost.localdomain < mail.txt
2024年 9月 17日 火曜日 10:21:23 JST
[root@localhost ~]# cat /var/spool/mail/admin
:
From root@localhost.localdomain Tue Sep 17 10:21:23 2024
Return-Path: root@localhost.localdomain
X-Original-To: admin@localhost.localdomain
Delivered-To: admin@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
id A53D043BF2; Tue, 17 Sep 2024 10:21:23 +0900 (JST)
Subject: Test Mail root2admin
Message-Id: 20240917012123.A53D043BF2@localhost.localdomain
Date: Tue, 17 Sep 2024 10:21:23 +0900 (JST)
From: root root@localhost.localdomain
This is a test email sent from root to admin.
メールの保管方法と保管場所の変更
今回はデフォルトの設定をほとんど変えずに動かしたため、メールを送信されると /var/spool/mail/<ユーザ名>にファイル形式で格納されます。
このメール保管方法を Mailbox形式 と言います。
なお、デフォルトの保存形式は Mailbox形式で、/var/spool/mail配下に出力されます。
Mailbox形式では、1つのファイルにメールを随時書き込む形式のため管理が容易ですが、メール量が多い場合はサーバの負荷が高くなったり、ファイルが破損した際、そのメールが見れなくなる可能性があるという欠点があります。
そこでもう一つの保存形式 Maildir形式 があります。
Maildir形式では、1つのメールを1つのファイルとして扱い、Maildirディレクトリに格納する保存形式です。1つのファイルに随時書き込むわけではないため、メールのI/Oが発生しづらく、ファイルが破損しても全体が見れなくなるわけではないため、可用性に軍配が上がります。
保管形式を変更するなら、postfixの設定ファイルにて、DELIVERY TO MAILBOX の home_mailbox を変更してリロードします。
<実行例>
[root@localhost ~]# cat/etc/postfix/main.cf
:
# DELIVERY TO MAILBOX
#
# The home_mailbox parameter specifies the optional pathname of a
# mailbox file relative to a user’s home directory. The default
# mailbox file is /var/spool/mail/user or /var/mail/user. Specify
# “Maildir/” for qmail-style delivery (the / is required).
#
# home_mailbox = Mailbox ★ユーザのホームディレクトリ配下にMailboxが作られ書き込まれる
# home_mailbox = Maildir/ ★ユーザのホームディレクトリ配下にMaildir/が作られ内部に格納される
コメント