server-memo.net

【CentOS7】sendmail 基本設定

   

「CentOS7」で「sendmail」を使用するための最低限必要な設定をまとめています。

DNSやファイアウォールの設定は完了していることが前提です。

検証環境

今回は下記の環境で検証しています。

  • CentOS7.3
  • sendmail.x86_64 0:8.14.7-5.el7
  • sendmail-cf-8.14.7-5.el7.noarch

sendmailインストール

「CentOS7」のデフォルトMTA(Mail Transfer Agent)は「postfix」となっているため、「sendmail」を使用するためには別途インストールをする必要があるので、「yum」で「sendmail」と「sendmail-cf」をインストールします。

# yum install sendmail sendmail-cf

設定項目

「sendmail」を使用するにあたり最低限必要な項目を設定していきます。
※()内は設定対象ファイルを表しています

  • ホスト名・ドメイン名(sendmail.mc)
  • smtp接続許可(sendmail.mc)
  • 接続許可ネットワーク設定(access.db)
  • 受信ドメイン(local-host-bame)

/etc/mail/sendmail.mc設定

「sendmail」の基本設定ファイルは「sendmail.cf」というファイルなのですが、書式が難解で手作業で編集するのは結構面倒なので、比較的内容が分りやすい「sendmail.mc」ファイルと「m4」マクロを使用して「sendmail.cf」ファイルを作成していきます。

「/etc/mail」ディレクトリに「sendmail.mc」というファイルがあるので、そのファイルを編集し m4マクロを使用して「sendmail.cf」を作成します。

# cd /etc/mail
# cp -p sendmail.mc sendmail.mc_yyyymmdd
# cp -p sendmail.cf sendmail.cf_yyyymmdd
# vi sendmail.mc

ホスト名・ドメイン名設定

「sendmail」のホスト名とドメイン名の設定を下記書式で行っていきます。

以下の太字部分を追加します。

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for Red Hat Linux')dnl
OSTYPE(`linux')dnl
Dwホスト名
Dmドメイン名
define(`confDOMAIN_NAME',`$w.$m')dnl

例えばメールサーバに設定する名前が「mail.server-memo.net」である場合下記のように設定を行います。

Dwmail
Dmserver-memo.net
define(`confDOMAIN_NAME',`$w.$m')dnl

smtp接続許可設定

デフォルトの設定では「localhost(127.0.0.1)」からしかメールの送信をすることが出来ないため、他のクライアントからもメールを送信できるように設定を行います。

編集前

初期設定では下記のように設定されていて、「127.0.0.1」からしかsmtp接続を許可していません。

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
編集後

先頭にdnlをつけてこの設定を無効化して、他のネットワークからもsmtp接続を受け付けるようにします。

dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

以上で「sendmail.mc」の設定は完了です。

sendmail.cf作成

「sendmail.mc」の設定が完了しましたら、「m4」マクロを使用して「sendmail.mc」を実際に「sendmail」に読み込まれる「sendmail.cf」へ変換する作業を行います。

# m4 sendmail.mc > sendmail.cf

これで、「sendmail.mc」の設定内容が「senndmail.cf」へ反映されます。

接続許可ネットワーク設定(/etc/mail/access.db作成)

「sendmail.cf」の作成が完了しましたら、次は「sendmail」への接続を許可するネットワークの設定を行っていきます。

この設定を行わないと、「localhost(127.0.0.1)」からしかメールを送ることが出来ません。

「/etc/mail/access」編集

「/etc/mail/access.db」は「/etc/mail/access」ファイルに設定を記述した後に「makemap.sendmail」コマンドを使用して作成します。

# cd /etc/mail/
# cp -p access access_yyymmdd
# cp -p access.db access.db  <-- access.dbがあればバックアップ
# vi access

接続許可ネットワークの追加

自宅のネットワークである「192.168.1.0/24」からはのメール送信を許可する設定を行います。(太字部分を追加)

Connect:localhost.localdomain           RELAY
Connect:localhost                       RELAY
Connect:127.0.0.1                       RELAY
Connect:192.168.1                       RELAY

「/etc/mail/access.db」作成

「sendmail」に読み込まれるのは「/etc/mail/access.db」ですので、「makemap.sendmail」コマンドを使用して「/etc/mail/access」ファイルから「/etc/mail/access.db」ファイルを作成します。

# makemap.sendmail hash access.db < access

「access.db」に設定が反映されているかは、「strings」コマンドで確認することが出来ます。

# strings access.db
RELAY
connect:localhost.localdomain
RELAY
connect:192.168.1
RELAY
connect:localhost
RELAY
connect:127.0.0.1

「makemap.sendmail」コマンドを使用して「access.db」を作成すると、「sendmail」を再起動させることなく 「access.db」の内容を即時反映させることが出来ます。

/etc/mail/local-host-names設定(受信メールアドレス設定)

「sendmail」がローカル配送(自サーバユーザへメール配送)するメールアドレスの設定を「/etc/mail/local-host-names」で行います。

この設定が無いとメールを受信することが出来ませんので注意してください。

# cp -p local-host-names local-host-names_yyyymmdd
# vi local-host-names

設定は簡単で受信したいメールアドレスのユーザー名を除いた「@」以下を記述するだけで、「xxx@server-memo.net」といったメールを受信させるには下記のように設定します。

server-memo.net

MTAの切り替え

上記「sendmail」関連の設定が完了しましたら、次は「alternatives --config mta」コマンドで使用する「MTA」を「postfix」から「sendmail」に切り替える作業を行います。

「alternatives --config mta」コマンドを実行すると、どの「MTA」を使用するか選択できるので「/usr/sbin/sendmail.sendmail」の番号を入力して「Enter」キーを押下し「MTA」の切り替えを行います。

# alternatives --config mta

There are 2 programs which provide 'mta'.

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

Enter to keep the current selection[+], or type selection number: 2

sendmail起動

「MTA」の切り替えができたら現在動作している「postfix」を停止し「sendmail」を起動します。

postfix停止

# systemctl stop postfix

「postfix」の自動起動設定を無効化をしておくことを忘れずに。

# systemctl disable postfix
Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.

sendmail起動

「postfix」を停止したら「sendmail」を起動していきます。

# systemctl start sendmail

「sendmail」の自動起動設定もあわせて行っておきます。

# systemctl enable sendmail
Created symlink from /etc/systemd/system/multi-user.target.wants/sendmail.service to /usr/lib/systemd/system/sendmail.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/sm-client.service to /usr/lib/systemd/system/sm-client.service.

以上で「sendmail」の基本的な設定は完了となりますので、実際にメールを送受信して動作確認を行ってみてください。

こんなときには?

sendmailの起動が遅い( My unqualified host name (xxxxxxxx) unknown; sleeping for retry)

「sendmail」は起動時に「hostname」に登録された名前を解決しようとしますが、それが出来ない場合にこのエラーが発生します。

Oct 10 17:07:45 mail sendmail[31209]: My unqualified host name (xxxxxxxx) unknown; sleeping for retry

簡単な解決策としては、「/etc/hosts」にホスト名を追加してあげてください。

ホスト名が「mail.server-memo.net」の場合はこんな感じになります。(xxx.xxx.xxx.xxx 部分はサーバのIPアドレス)

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
xxx.xxx.xxx mail mail.server-memo.net

 - sendmail