sendmail でメールのリレーを可能にする

SERVER


別の SMTP サーバーからのメールをリレーして配信する

CentOS 5.5 にインストールされていた sendmail 8.13-8-8 は、初期状態ではメールをリレーしない設定になっていました。

そのため、 意図的にメールのリレーを行いたい場合には、次のようにしてリレーの許可を行う必要があります。

 

リレーを許可するには "/etc/mail/sendmail.mc" を編集します。

ここから "DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl" という行を見つけたら、次のように先頭に "dnl" を追記して、ローカルからのみのリレーとなっている設定をコメントアウトします。

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

これだけだと、世界中のだれもがこのサーバーを使ってメールの送信を行えてしまうので、次の行を "/etc/mail/sendmail.mc" に追加して、リレーするサーバーを限定できるようにします。

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

CentOS 5.5 では既定でこれが有効になっているようでしたが、もし行頭に "dnl" が記載されている場合には、それを削除してデータベースによる制限を有効にします。

 

設定が完了したら、次のようにして "sendmail.cf" ファイルを生成し、それを sendmail に取り込みます。

ただし、実験してみた感じでは、全く初めての場合には access.db を更新しないと、全てのリレーが許可されてしまいました。先に次の access.db の作成を行ってから有効化した方が安全化もしれません。とりいそぎ、access.db の作成には "make access.db" を実行します。

make sendmail.cf

make restart

ここでいう "make sendmail.cf" というのは "m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf" といったことをしているのと同じことのようです。

なお、このとき "WARNING: 'sendmail.mc' is modified. Please install package sendmail-cf to update your configuration." というメッセージが表示された場合は、sendmail-cf パッケージがインストールされていない可能性があります。その場合は "yum install sendmail-cf" として、sendmail-cf をインストールしてから再度実行します。

 

access.db による制御が有効になったら、"/etc/mail/access" というテキストファイルを編集します。

書き方としては CentOS 5.5 の場合、次のような書き方になるようです。

Connect:127.0.0.1    RELAY

複数の接続元からのリレーを許可したい場合には、上記のような行を複数記載すれば大丈夫です。

ひとつ注意事項として、最初の最初は "/etc/mail/access" では localhost のみの送信許可が記載されている場合でも、access.db の方では全てのリレーが許可されていることがあるようでしたので、よく注意が必要です。

 

許可したい IP アドレスを範囲で指定したい場合には、例えば 192.168.0.0/24 であれば "192.168.0" のように、ドット単位で省略したアドレスを指定することになるとのことでした。192.168.0.0/255.255.255.0 のようなネットマスク形式や 192.168.0.0/24 のようなプレフィックス長といった形式での指定はできないそうなので注意が必要です。

また、ここではメールアドレスやドメイン名を指定して制御を行うことも可能です。その場合、メールアドレスであれば "アカウント@ドメイン" の形で、ドメイン名であれば "@ドメイン" という形での指定になります。

 

他、"RELAY" の代わりに "REJECT" を指定することで、それについてのリレーを拒否することが出来るので、これを利用すれば特定のドメインからのリレーを禁止するといったことも可能になります。

ルールは上から順に採用されるようですので、REJECT を指定する場合には、RELAY よりも上の行に記載しておくと、意図したとおりの動作をしてくれると思います。

 

また、"OK" を指定することで、リレーは拒否するが接続は許可するといった設定も可能です。

"RELAY" や "REJECT" を指定していない場合の動作がこれに当たり、外部宛てへのメールは受理しないけれど、このメールサーバー宛への接続については受理するといった感じになります。

 

"/etc/mail/access" ファイルを書き換えたら、次のようにして "/etc/mail/access.db" ファイルを生成します。

make access.db

このようにすることで "/etc/mail/access.db" が更新され、sendmail を再起動しなくても、新しく設定したリレーの制限が有効になります。

リレーが禁止されているサーバーからリレー要求があった場合には、送信元に対して "Remote host said: 550 5.7.1 <xxxx@xxxx.xx>... Relaying denied" といった不達メールが返されるようになるので、実際にリレーをしてみて確認するのも良いかもしれません。