sendmailの設定をサクッと済ませる方法

なにかとややこしい、sendmailなので、eximやpostfixが使われることが多くなったが、ここは、こだわって、古典的なsendmail派なんだよねぇ~ってぇな御人も、やはり、sendmail.cfを手動で設定するなどの無謀はしないので、そういう場合の簡単な設定方法を書いておく。

sendmailをインストールする

# yum install sendmail
# yum install sendmail-cf

これでsendmailのインストールが出来るのであとは、sendmail.mcを編集する。

/etc/mail/sendmail.mcの編集

DAEMON_OPTIONの変更
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl
DAEMON_OPTIONS(`Port=smtp, Name=MTA’)dnl

この行は、Addr=127.0.0.1からのメールのみを受け付けるという設定で、これを外しておくか、この行全体をコメントアウトするかしないと、メールを受け付けることができなくなる。
ここでは、Addr=127.0.0.1を外す設定とします。

同様にsubmisshonでも、メールを受け付ける必要がある場合には、以下を同様に変更しておきます。

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

初期値ではコメントアウトされているので、行の最初にある dnlを消します。
とりあえず、変更点はこれだけで問題ないのですが、後は、適宜に好みに合わせて設定します。

セキュリテーを改良する

セキュリティー面では、デフォルト の “/etc/mail/sendmail.mc” では、
FEATURE(`accept_unresolvable_domains’)dnl
「名前解決できない MTA からのメールの受け入れを許可する。」 という設定になっています。
大抵の場合は、問題ないですが、偽装サーバーからのメールを受け付けないようにするためには、この行をコメントアウトしておきます。

dnl FEATURE(`accept_unresolvable_domains’)dnl

この設定を行うことで、スパムメールを減らす効果があるとされています。
特に理由がなければ、コメントアウトしておきましょう。

送信可能なメールサイズに制限を加える(追加)

define(`confMAX_MESSAGE_SIZE’,`10000000′)dnl

この行は初期状態では記載されていませんので、新たに書き足しておきます。
例は、10MBとした場合の設定です。(単位はバイトです。)
商用のメールサーバーでは、概ね5MB~50MBとなっているものが多いですが、20MB程度が妥当なのではないでしょうか。

同時に送信できるメールコピーの上限数(追加)

define(`confMAX_RCPTS_PER_MESSAGE’, `100′)dnl

MUA は普通、大勢の相手に同じ内容のメールを一度に送信する機能を持っています。
この数は多くても100件を超えることは無いでしょうから、通常は50~100で問題ないと思います。

sendmailのログイン情報にバージョンを表示させない(追加)

define(`confSMTP_LOGIN_MSG’, `$j Security; $b’)

メールヘッダーを好みに合わせる(追加)

define(`confRECEIVED_HEADER’, `$?sfrom $s $.$?_($?s$|from $.$_) $.$?{auth_type}(authenticated) by $j (SMTP Server)$?r with $r$. id $i$?u for $u; $|; $.$b’)dnl

黙っていると、メールヘッダーにバージョンが表示されるので、これを隠蔽しておきます。
ここらへんは好み次第で適宜。

筆者の場合は、メールヘッダーにクライアントアドレスが表示されるのが嫌なので、sendmail.cfを直接編集して、該当箇所を、以下のように置き換えています。

[オリジナル]
HReceived: $?sfrom $s $.$?_($?s$|from $.$_) --> SMTP
        $.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.) -->削除
        $.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version} --> (SMTP Server)
        (version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u
        for $u; $|;
        $.$b
[変更後]
HReceived: $?sfrom SMTP
        $.by $j (SMTP Server)$?r with $r$. id $i$?{tls_version}
        (version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u
        for $u; $|;
        $.$b

これを実施しておくと、メールが発信された場所の特定が難しくなるので、例えば、このメール旅行先から出されたものだよね。とか言われなくて済む。

一応、ここまで出来たなら、/etc/mailへ移動して、makeを発行して完了。

# cd /etc/mail
# make

次回以降もsendmailが起動できるようにserviceに登録しておく。

# chkconfig sendmail on

後は、メールが受信出来るように、local-host-namesにサーバーのホスト名か、ドメインを書き込んだら終わり。

# vi /etc/mail/local-host-names

myhost.mydomain.tld
:wq!

sendmailがMTAではなかった場合の変更は、以下のようにする。

# alternatives --config mta
2 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
   1           /usr/sbin/sendmail.exim
*+ 2           /usr/sbin/sendmail.sendmail

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

上記の場合、exemとsendmailが入っている場合の例。
番号を選んで、ENTERで設定が終わる。

SMTPサーバーとして使うには

SMTPサーバーとして利用したい場合には、SMTP AUTHの有効化を行うのですが、他に送信用サーバーを持っている場合位は、以下の設定は不要ですが、せっかくだから、SMTPサーバーを作りたいと言う場合には、以下の設定を合わせて実施します。

SMTP AUTHに必要なパッケージ

sasl承認には以下のパッケージが必要になりますので、入っていない場合には、yumでインストールします。

# rpm -qa |grep cyrus-sasl
cyrus-sasl-xxxxxxx
cyrus-sasl-md5-xxxxxxx
cyrus-sasl-lib-xxxxxxx
cyrus-sasl-devel-xxxxxxx
cyrus-sasl-plain-xxxxxxx

yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-md5

インストールが完了したら、sendmail.mcを編集し、SMTP AUTHを有効にします。

/etc/mail/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

一行目は認証許可の仕組みに関する指定、二行目はSendmailが利用する認証方法の指定となります。
記述には暗号化認証などの不必要なものも含まれますが、cyrus-saslで有効にしていない認証方法は実質的に動作しませんのでそのままで構いません。

ここまで設定すれば、587番ポートなどを通じてPLAIN承認が出来ますが、以下の行を有効化すると暗号化承認が可能になるので、sendmail.pemを予め作っておけば、465番ポート(SSL/TLS)による承認が可能になるので、587番ポートを開けたくない場合には設定しておくと良いでしょう。

define(`confCACERT_PATH’, `/etc/pki/tls/certs’)dnl
define(`confCACERT’, `/etc/pki/tls/certs/sendmail.pem’)dnl
define(`confSERVER_CERT’, `/etc/pki/tls/certs/sendmail.pem’)dnl
define(`confSERVER_KEY’, `/etc/pki/tls/certs/sendmail.pem’)dnl

DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s’)dnl

SMTP AUTHの設定を行っておくと、適宜、メールクライアントから、SMTPサーバーを利用できるようになりますので、Privateユースで秘匿性が保てるので1つ作っておいても良いでしょう。