😺

【解説付き】RHEL での Sendmail 構築手順

2025/02/21に公開

以下に、RHEL 環境における Sendmail の構築手順を、解説を交えながら丁寧にまとめた記事のサンプルを示します。Sendmail は強力なメール転送エージェント (MTA) であり、柔軟に設定可能ですが、その分設定ファイルが複雑になりがちです。この記事では、インストールと基本設定から始め、ネットワーク設定やセキュリティ強化までを段階的に分かりやすく解説していきます。


1. 概要

1.1 Sendmail とは

Sendmail は、UNIX 系 OS で古くから使われている代表的なメール転送エージェント(MTA)です。SMTP を利用してメールの送受信やルーティングを行います。RHEL 環境で標準で動作している Postfix から切り替えて利用したい場合、明示的なインストールと設定が必要になります。

1.2 本記事のゴール

本記事を通して以下を学ぶことを目標とします。

  1. Sendmail のインストールとデフォルト MTA の切り替え
  2. 基本的なメール送受信の設定
  3. ネットワーク・セキュリティ設定(ファイアウォール、SELinux)
  4. 高度なメールルーティング(リレー制御、バーチャルユーザ)
  5. TLS 暗号化や SMTP AUTH を導入したセキュリティ強化
  6. ログやキューの監視、トラブルシューティングの基本
  7. バックアップ・災害復旧、ベストプラクティス

2. 前提条件・環境

  • OS: RHEL 系 (7, 8, 9 など)
  • 権限: root ユーザ、または sudo が可能なユーザ
  • ネットワーク: ホスト名や DNS が適切に設定されていることを推奨
  • 既存 MTA: Postfix をデフォルトとして動作している場合は切り替え作業が必要

3. Sendmail のインストールと基本設定

3.1 必要パッケージのインストール

まずは、Sendmail と設定ファイル生成に必要なパッケージをインストールします。

yum install -y sendmail sendmail-cf m4
  • sendmail: MTA 本体
  • sendmail-cf: m4 マクロを用いて設定ファイル (sendmail.cf) を生成するためのテンプレートやマクロが含まれている
  • m4: マクロプロセッサ

3.2 デフォルト MTA の切り替え

RHEL ではデフォルトで Postfix が有効になっているケースが多いため、Sendmail に切り替える必要があります。

alternatives --config mta

上記コマンドを実行すると、次のように複数の選択肢が表示されます。

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix
   2           /usr/sbin/sendmail.sendmail

選択肢から sendmail.sendmail を選んで、Sendmail に切り替えます。

3.3 Sendmail 設定ファイルの構造

  • /etc/mail/sendmail.mc
    m4 マクロで記述された設定用ソースファイル。これを make して変換し、最終的に /etc/mail/sendmail.cf を生成する。
  • /etc/mail/sendmail.cf
    Sendmail が実際に参照する本番用の設定ファイル。直接編集するのではなく、基本は sendmail.mc を編集したうえで make コマンドで作り直す。
  • /etc/mail/access
    リレー制御を行うためのファイル。メールをリレーしてよいネットワークやドメインを定義する。
  • /etc/mail/virtusertable
    仮想ユーザを設定し、宛先ドメインごとにメールの配送先を振り分ける。

4. sendmail.mc の編集と反映

4.1 初期設定の編集例

/etc/mail/sendmail.mc を開き、最低限以下のような行が含まれていることを確認、または必要に応じて追記します。

divert(-1)dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl
DOMAIN(`generic')dnl

define(`confDOMAIN_NAME', `example.com')dnl
FEATURE(`use_cw_file')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl

MAILER(`local')dnl
MAILER(`smtp')dnl
  • define('confDOMAIN_NAME', 'example.com')
    システムのドメイン名を指定(実際のドメインに合わせて書き換え)
  • FEATURE('use_cw_file')
    /etc/mail/local-host-names (cw ファイル) でローカル配送ドメインを管理
  • FEATURE('virtusertable')
    /etc/mail/virtusertable をバーチャルドメイン管理に使用

4.2 sendmail.cf の再生成

設定を反映させるには、/etc/mail/ ディレクトリに移動して make を実行します。

cd /etc/mail
make

これによって sendmail.cf.db ファイルなどが自動的に再生成されます。


5. Sendmail の起動と確認

systemctl start sendmail
systemctl enable sendmail

起動が成功したら、以下のコマンドでステータスやエラーログを確認します。

systemctl status sendmail
journalctl -u sendmail -f

特にエラーがないようであれば、初期設定は完了です。


6. ネットワークとセキュリティ設定

6.1 ファイアウォール設定

RHEL では標準で firewalld が稼働しています。SMTP (ポート 25) や Submission (ポート 587) を許可するには、以下を実行します。

firewall-cmd --permanent --add-service=smtp
firewall-cmd --permanent --add-service=smtpsubmission
firewall-cmd --reload

6.2 SELinux の設定

SELinux が有効な場合、Sendmail が使用するディレクトリやポートのコンテキストを適切に設定しておく必要があります。

  • ポート情報の確認
    semanage port -l | grep smtp
    
  • Web アプリケーション (Apache など) からメール送信を許可
    setsebool -P httpd_can_sendmail 1
    
  • メールキュー用ディレクトリのコンテキストを修正
    semanage fcontext -a -t mail_spool_t "/var/spool/mqueue(/.*)?"
    restorecon -Rv /var/spool/mqueue
    

7. 高度な設定: リレー制御やバーチャルユーザ

7.1 リレー制御 (/etc/mail/access)

外部からのリレー(他ホスト宛てへの転送)を許可する範囲を設定します。

vi /etc/mail/access

例として、192.168.1.0/24.example.com ドメインをリレー許可にするには:

192.168.1.0/24    RELAY
.example.com      RELAY

編集後、反映のため以下を実行:

cd /etc/mail
make

7.2 バーチャルユーザテーブル (/etc/mail/virtusertable)

複数ドメインを運用する場合や、メールを別のユーザへ転送したい場合に利用します。

vi /etc/mail/virtusertable

例:

# user1@domainA.com はローカルユーザ localuser に配送
user1@domainA.com    localuser

# info@domainB.com のメールを別の外部アドレスへ転送
info@domainB.com     userX@gmail.com

# @domainC.com 宛はすべて user3 に配送
@domainC.com         user3

保存後、再度 /etc/mailmake を実行することで .db ファイルが更新されます。


8. ログ監視・トラブルシューティング

8.1 ログファイル

Sendmail の動作状況は主に /var/log/maillog に記録されます。

tail -f /var/log/maillog | grep sendmail

配信成功時の例:

Feb 21 13:45:01 hostname sendmail[1234]: xA12345: to=<user@example.com>, ctladdr=<root@hostname> (0/0), delay=00:00:03, xdelay=00:00:01, mailer=esmtp, pri=30025, relay=mail.example.com [192.168.1.10], dsn=2.0.0, stat=Sent (OK)

8.2 コマンドライン送信テスト

echo "Subject: Test Mail
This is a test mail." | sendmail -v user@example.com

ここで -v オプションを付与すると、送信の詳細ログが表示されます。

8.3 メールキューの確認

  • キューの一覧
    mailq
    
  • 詳細表示
    sendmail -bp -v
    

8.4 telnet での SMTP 疎通確認

telnet localhost 25
EHLO example.com
MAIL FROM:<test@example.com>
RCPT TO:<user@example.com>
DATA
Hello from telnet
.
QUIT

. (ドット) 一行でデータ送信終了、QUIT で接続終了となります。


9. パフォーマンス・セキュリティ強化

9.1 接続制御の最適化

/etc/mail/sendmail.mc に以下を追記して、接続数やシステム負荷による制限を設ける例を示します。

define(`confCONNECTION_RATE_THROTTLE', `5')dnl
define(`confMAX_DAEMON_CHILDREN', `20')dnl
define(`confQUEUE_LA', `10')dnl
define(`confREFUSE_LA', `15')dnl

9.2 DNS キャッシュ設定

DNS ルックアップの負荷を下げるために以下を追加し、/etc/mail/service.switch を作成します。

define(`confSERVICE_SWITCH_FILE', `/etc/mail/service.switch')dnl

/etc/mail/service.switch 例:

hosts files dns
aliases files

9.3 TLS (SSL) 暗号化対応

サーバ証明書と秘密鍵を /etc/pki/tls/certs/sendmail.crt/etc/pki/tls/certs/sendmail.key に配置した場合、sendmail.mc に以下を追記します。

define(`CERT_DIR', `/etc/pki/tls/certs')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/ca-bundle.crt')dnl
define(`confSERVER_CERT', `CERT_DIR/sendmail.crt')dnl
define(`confSERVER_KEY', `CERT_DIR/sendmail.key')dnl

DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

ポート 587 (Submission ポート) での TLS 暗号化通信をサポートする設定例です。

9.4 SMTP AUTH (認証)

不正リレー防止・セキュリティ強化のため、以下の行を sendmail.mc に追加します。

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

これにより、SMTP AUTH を利用してメールを送信する際に、ユーザ名/パスワードを要求することができます。


10. バックアップと復旧

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

重要なファイルは /etc/mail/ に集中しているため、定期的にアーカイブを取りましょう。

tar czf /backup/sendmail-config-$(date +%F).tar.gz /etc/mail/

10.2 メールキューのバックアップ

未送信メールが残っている場合に備えて、/var/spool/mqueue/ もバックアップすることがあります。

rsync -av /var/spool/mqueue/ /backup/mqueue/

10.3 自動バックアップスクリプト

cron などを活用し、定期実行が望ましいです。例:

0 2 * * * /usr/bin/rsync -a /etc/mail/ /backup/sendmail-config/

11. ベストプラクティスと運用上の注意

  1. 定期的なアップデート
    セキュリティパッチやバグ修正を必ず適用します。
    yum update sendmail\* --security
    
  2. ログ監視の徹底
    /var/log/maillog を日常的に確認し、異常を早期検知します。Fail2ban などと連携して不正アクセスの自動ブロックも検討しましょう。
  3. SPF/DKIM/DMARC の実装
    メールの到達率向上、なりすまし対策には欠かせません。
  4. TLS + SMTP AUTH の利用
    25 番ポートへの平文送信を避け、ポート 587 (Submission) を推奨しましょう。
  5. バックアップと復旧テスト
    バックアップは取得するだけでなく、復元テストも定期的に実施し、万が一に備えることが重要です。

まとめ

RHEL 環境での Sendmail 構築は、

  1. インストール & 切り替え
  2. sendmail.mc の編集 → sendmail.cf 再生成
  3. サービス起動 & ファイアウォール / SELinux 設定
  4. リレー制御・バーチャルドメイン対応
  5. TLS・SMTP AUTH などのセキュリティ強化

といった手順を踏むのが一般的です。Sendmail は設定の自由度が高い分、管理・セキュリティ面もきめ細かな対応が求められます。本記事で紹介したポイントを参考にしながら、環境や要件に合わせて調整を行ってください。

最終的には、継続的な運用監視とセキュリティアップデート がメールサーバの安定稼働とセキュアなサービス提供につながります。ぜひ、本記事を参考に安全なメールインフラを構築・維持していただければ幸いです。

Discussion