CentOS Stream 9 にメールサーバのPostfixをインストール

さくらのVPSにCentOS Stream 9をインストールした覚書です。

今回は、メールサーバである Postfix をインストールします。

CentOS7まではなんらかのメールサーバが入っていた気がするのですが、CentOS8からはインストールされていない状態から始まるっぽいです。

メールサーバとしては、PostfixのほかにSendmailが有名どころとしてありますが、CentOS 7 以降でSendmailが非推奨になったため、メールサーバと言えばPostfix一択、のような状況です。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2022-03-27
サーバさくらのVPS 2G
OSCentOS Stream 9
cat /etc/redhat-release
CentOS Stream release 9

Postfixのインストール

dnfからインストールします。

dnf install postfix

確認

# MTAの設定を確認
alternatives --display mta

# バージョン
postconf |grep mail_version
postfix: fatal: parameter inet_interfaces: no local interface found for ::1

バージョンを確認したとき、エラーが出なければ良いのですが、今回は▲のように fatal が出てます。

fatal ・・・(省略)・・・ for ::1
なので、「::1」 IPv6 が無効っぽいです。

vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
# ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

::1 に # を付けて無効にします。

# バージョン
postconf |grep mail_version
mail_version = 3.5.9
milter_macro_v = $mail_name $mail_version

自動起動設定と手動起動

# 起動する
service postfix start

# 再起動する
service postfix restart

# 停止する
service postfix restart

# 自動起動に登録する
systemctl enable postfix

これで終わり?

サーバの使用目的として、メール通知のためにメールを送信するだけの場合はここまでで完了です。

例えば、OS(CRONなど)から発行されるメールが届くようにする、PHPなどプログラムからメールを送信する、です。

また、外部のパケットフィルタ機能もしくはfirewalldなどで、外部からメール送信に使うポート(SMTPなど)が塞がれていることは確認しておきます。

トラブル対応

postdrop: warning: unable to look up public/pickup: No such file or directory

PHPからメールを送信しようとしたら次のエラーが発生しました。

postdrop: warning: unable to look up public/pickup: No such file or directory
# 手動起動
service postfix start

# 自動起動設定
systemctl enable postfix

postfix を起動するのを忘れてたようです。
ついでに自動起動に設定しておきます。