server-memo.net

semdmail基本設定

      2017/10/12

【2017.10.12】こちらのページの説明が古くなってしまったので、「CentOS7」で「sendmail」を使用するための説明をこちらのページに新しく作成しました。

検証環境

CentOS 4.4

sendmail-8.13.1-3.RHEL4.5

sendmail-cf-8.13.1-3.RHEL4.5

設定方法

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

※ m4マクロを使用するには、sendmail-cfがインストールされている必要があります。

sendmail.mc編集

/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
ホスト名設定

まず、ホスト名とドメイン名を設定します。
今回はmail.server-memo.netを設定することとします。

編集項目

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

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for Red Hat Linux')dnl
OSTYPE(`linux')dnl
Dwmail Dmserver-memo.net

書式的には、「Dwホスト名」「Dmドメイン名」となります。

2009.01.21 追記

最近CentOS5でsendmailの設定を行ったところ上記の設定のほかに、以下の設定も必要でした。
CentOS4ではデフォルトで設定させれていたのですかね・・・

define(`confDOMAIN_NAME',`$w.$m')dnl
smtp接続(リレー)許可設定

デフォルトの設定ですと、最近のsendmailはlocalhost(127.0.0.1)からしかメールの送信出来ません。メールサーバとしてこれでは不味いので、他のクライアントからもメールを送信できるようにします。

編集前

 

CentOS4.4のsendmail初期設定では、以下のように設定されていて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

不正中継防止設定(リレー制限)

上記のsmtp接続(リレー)許可設定だけですとどこからでもsmtp接続を許可してしまい、今度は不正中継に利用されてしまいます。ですので、smtp接続の制限(リレー制限)設定を行います。

まず、sendmail.mcファイルに以下の設定があることを確認します。

FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl

実際の設定は/etc/mail/accessファイルに設定を記述し、makemapコマンドを使用して hash化された/etc/mail/access.dbファイルを作成することで、sendmailに設定を読み込ませます。

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

今回は、自宅のネットワークである192.168.0.0/24と172.17.0.0/16のネットワークからのメールのリレーを許可する設定を行います。太字部分を追加しました。

/etc/mail/access 設定内容
localhost.localdomain        RELAY
localhost RELAY
127.0.0.1 RELAY
192.168.0 RELAY 172.17 RELAY
access.db作成

実際にsendmailより読み込まれるデータは/etc/mail/access.dbですので、編集を行った/etc/mail/accessファイルより makemapコマンドを使用して、access.dbファイルを作成します。

# makemap hash access.db < access
補足説明

※ sendmail.mcに「FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl」があるので sendmailを再起動することでもaccess.dbは作成されます。

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

受信ドメイン設定

/etc/mail/local-host-namesを設定することで、sendmailが受信するドメイン名の設定を行います。この設定が無いとメールを受信することが出来ませんので注意してください。

# cp -p local-host-names local-host-names
# vi local-host-names
編集項目

設定は簡単で受信したいドメイン名を記述するだけです。
今回はserver-memo.netドメイン宛のメールを受信するように設定します。

server-memo.net

sendmail.cf作成

今まで設定を行ってきたsendmail.mcをm4マクロを使用して、実際にsendmailに読み込まれるsendmail.cfへ変換する作業を行います。

# m4 sendmail.mc > sendmail.cf

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

# make -C /etc/mail

こちらの方法でもsendmail.mcからsendmail.cfファイルを作成することが出来ます。

設定反映

設定が終わったら、設定内容をsendmailへ反映させます。反映方法はsendmailを再起動するだけです。

# /etc/init.d/sendmail restart
sendmail を停止中: [ OK ]
sm-client を停止中: [ OK ]
sendmail を起動中: [ OK ]
sm-client を起動中: [ OK ]

これで、sendmailへ設定が反映されたはずです。:-)

自動起動設定

CentOS4.4の場合

chkconfigコマンドを使用して自動起動設定状況を確認してみましょう。

# chkconfig --list sendmail
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off

自動起動の設定がされていない場合は設定をします。

# chkconfig sendmail on

※ sendmailをsourceよりインストールした場合は、起動スクリプトを作成して/etc/rc.d/init.d/ディレクトリに置いておかなければいけないでしょう。

FreeBSDの場合

FreeBSDの場合は、/etc/rc.confを編集することで自動起動設定を行います。
(OSインストール時のsendmailとportsでインストールした場合の設定方法です。sourceからインストールした場合は方法が異なるでしょう。)

# cp -p /etc/rc.conf /etc/rc.conf_yyyymmdd
# vi /etc/rc.conf
編集項目

FreeBSD6.1では/etc/rc.confに以下の二行を明示的に入れないと、Sendmailはローカル以外の接続を受け付けませんので注意してください。

sendmail_enable="YES"
sendmail_submit_enable="YES"

以上。

 - sendmail