サーバのローカルから、インターネット上の宛先メールサーバに直接メールを送信するためのPostfixの設定を説明します。

本設定を適用するケースは、VPSのようにグローバルIPアドレスで直接インターネットに公開されていて、LAN内に別途メール送信を行う役割のサーバが存在しない環境を想定します。
サーバ上のアプリケーションやOSからのシステム通知を外部にメール送信できるようにします。

なお、AWS EC2のように、メール送信で使用するTCP/25のアウトバウンド通信が制限されている場合があります。(通称 OP25B)
サーバを提供する事業者のWebサイトなどで情報を確認し、場合によっては制限解除の申請を行う必要があります。

前提条件

  • 基本設定が完了している状態から設定を行います。
  • 作業は、root権限を持つユーザで実施します。
  • RHEL 7 / RHEL 8 / CentOS 7 /CentOS 8で手順は共通です。
  • 設定対象のサーバは、インターネット上で名前解決できる必要があります。
  • 設定対象のサーバでPostfixに設定している`mydomain`のドメイン宛のメールは、外部の別サーバで管理する想定です。
  • OSおよびPostfixは、以下のバージョンで検証しています。
# cat /etc/redhat-release 
CentOS Linux release 8.0.1905 (Core) 
# uname -r
4.18.0-80.el8.x86_64
# postconf mail_version
mail_version = 3.3.1

機能要件

本設定で実現する機能は以下の通りです。

  • ローカルユーザ宛のメールは、別途用意しているシステム管理用メールアドレスに転送する
  • @の右側にドメインが指定されていない送信元メールアドレスには、`myhostname`に指定したFQDNをドメインとして付与する
  • 外部ドメイン宛のメールは、インターネットを経由して該当ドメインのMXレコードから得られたサーバに配送する
  • 外部からのメール着信は全て拒否する

事前作業

設定ファイルのバックアップ

以下のコマンドを実行し、変更前の設定ファイルをバックアップします。

# cp /etc/postfix/main.cf{,.`date +%Y%m%d`}

設定手順

外部配送を許可する送信元ネットワークの設定

メール配送を許可する送信元ネットワークをループバックアドレスに限定し、オープンリレーを防止します。

# postconf -e 'mynetworks = 127.0.0.0/8'

ローカルユーザ宛メールのエイリアス設定

ローカル配送対象のメールを、別途用意しているシステム管理用メールアドレスに変換します。
viなどのテキストエディタで、エイリアスの設定ファイルを開きます。

# vi /etc/aliases

エイリアスのデフォルト設定では、全てのローカルユーザ宛のメールの宛先はrootに変換されます。
今回は、root宛のメールをさらにシステム管理用メールアドレスに変換します。
ファイルの末尾に、以下を追記します。<管理用メールアドレス>は実際のメールアドレスに置き換えてください。

root:           <管理用メールアドレス>

以下のコマンドを実行し、編集したエイリアス設定を反映します。

# newaliases

設定内容の確認

main.cf

以下のコマンドを実行し、事前にバックアップを取得しておいた初期設定ファイルと、現行の設定ファイルの差分を比較します。
各行>に続けて設定した内容が差分として表示されていることを確認します。

# diff /etc/postfix/main.cf{.`date +%Y%m%d`,}
740a741
> mynetworks = 127.0.0.0/8

以下のコマンドを実行し、設定ファイルの文法に問題がないか確認します。
文法が正しければ、コマンド実行結果は何も表示されません。

# postfix check

alieases

以下のコマンドを実行し、rootユーザ宛のメールのエイリアス設定が問題なく登録されているか確認します。
<管理用メールアドレス>の箇所に、rootのエイリアスとして設定したメールアドレスが表示されることを確認します。

# postmap -q root /etc/aliases
<管理用メールアドレス>

設定の反映

以下のコマンドを実行し、postfixサービスを再起動して設定を反映します。

# systemctl restart postfix

以下のコマンドを実行し、postfixサービスが起動状態であることを確認します。
Active:の列にactive (running)が表示されていれば、サービスは起動中です。

# systemctl status --no-pager postfix.service
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2019-11-13 18:08:12 JST; 5s ago
(略)

以上で、メール送信設定は完了です。