Sendmailで送受信ポートを変更する/1台のサーバに2つ起動する

とりあえずメモ程度。Sendmailのバージョンは8.13.4


SMTPのポートは25なわけだが、変更することも出来る。
変更する理由として
1.俺様専用SMTPサーバ
2.メールキューに何らかの処理をしたい
等々あろうかと思われる。が、今回は2.のお話。

トレンドマイクロのIMSS(InterScan Messaging Security Suite)のUNIX版は自前でSMTPサーバを持たずにMTAでサンドイッチしろとある。そのとき、MTA×2でIMSSを挟むため、ポート変更が必須になる。
イメージとしてはこんな感じになると思う。

上の図のものを1台のサーバ上で行う。
sendmailが1台のサーバで2つ動くので、cfファイルを2つ用意しておかなければいけない。
上のsendmailは受信用なので、rcv.cf 下のsendmailは送信用なのでsend.cfとすることにした。


【受信用sendmail rcv.cfの作成】
受信がポート25で送信がポート10025になるので、送信ポートを変更する。
m4マクロでいくと、rcv.mcに以下を追加する。
define(`ESMTP_MAILER_ARGS',`TCP 127.0.0.1 10025')
define(`SMTP_MAILER_ARGS',`TCP 127.0.0.1 10025')
define(`SMTP8_MAILER_ARGS',`TCP 127.0.0.1 10025')
define(`DSMTP_MAILER_ARGS',`TCP 127.0.0.1 10025')
define(`RELAY_MAILER_ARGS',`TCP 127.0.0.1 10025')


また、上の設定だと、自分自身にメールを送るということになるので、sendmailが「おいおい、自分にメール送ったらループするんじゃね?」という解釈をしてエラーか警告を吐く可能性があるので、以下も追加するとよいかも。
これで、sendmailがメールループのチェックをしなくなる。

define(`SMTP_MAILER_FLAGS', `k')
define(`LOCAL_MAILER_FLAGS', `k')

あと、2つsendmailが動くと、デフォルトの設定だと2つのsendmailが同じファイルやディレクトリを共有してしまう場合不都合が起こるかもなので、それぞれ分けておく必要がある。とりあえず、pidファイルとキューフォルダの設定は以下の通りで、必要があればmailertable等も変えておく必要があると思う。
define(`confPID_FILE', `/var/run/sendmail-rcv.pid')dnl
define(`QUEUE_DIR', `/var/spool/mqueue-rcv')dnl

【送信用sendmail send.cfの作成】
受信がポート10026で送信がポート25になるので、受信ポートを変更する。
m4マクロでいくと、send.mcに以下を追加する。

DAEMON_OPTIONS(`Port=10026')dnl

rcv.cfの時と同様にメールループチェック回避の設定をしておくとよいかも


【sendmailの起動】
普通は/etc/mail/sendmail.cfを読み込んで起動するので盲目的に/etc/mail/の下にsendmail.cfをコピーすればよかったが、今回はそうはいかない。
ので、/etc/mail/の下にrcv.cfとsend.cfをコピーしてS88sendmailをコピーし、S88sendmail-rcvとS88sendmail-sendの2つにする。
あとは、それを開いてCF_FILE="/etc/mail/sendmail-rcv.cf"等、cfの名前に合わせて設定を変えればよいと思う。


【その他ファイルの設定】
通常、accessファイルやmailertableファイルなどは以下のコマンドでDB化を行う
makemap hash /etc/mail/access < /etc/mail/access

が、別々のaccessファイルなどを 使いたいのでこれではだめで、cfファイルを指定する必要がある。
makemap -C/etc/mail/sendmail-rcv.cf hash /etc/mail/access-rcv < /etc/mail/access-rcv