自宅サーバのsendmailは正直不要です。と思うことはしばしば。
てっとり早く結論を言えば、以下を/etc/rc.confに追記すればよい。なお、「sendmail_enable = "NONE"」はもう使われていないので注意。詳細は後述。
/etc/rc.confへの追記
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
しかし、[handbook 29.4.2 Disable sendmail](http://www.freebsd.org/doc/handbook/mail-changingmta.html#MAIL-DISABLE-SENDMAIL) に記載の通り、以下の懸念がある(2012/3/1)。
Warning: もしこの方法で sendmail のメール送信機能を無効にしたのなら、 完全に動作する代替メール配送システムと置き換えることが重要です。 さもなければ、periodic(8) などのシステム機能は、 それらの結果を通常想定しているようにメールで配送することができなくなるでしょう。
システムの多くの部分が sendmail 互換のシステムがあることを想定しているかもしれません。 もしそれらを無効にした後に、 アプリケーションがメールを送ろうとするために sendmail のバイナリを使用し続ければ、 メールは使われていない sendmail のキューに入り、そして決して配送されないでしょう。
つまりroot等に送られるreportがsendmailのキューにたまり続ける。
(なお、日本語版handbookはどうしても古くなりがちなので、原版も確認すること!)
FreeBSDのベースシステムが送るメールなら、periodicあたりを修正すればよいだろうが、portsなどからインストールするソフトウェアのことも考えるときりがない。
sendmailを動かしたくない目的にもよるが、現実的なところでは外部からのsmtp接続を無効にするだけでいいだろう。
こうした場合の別の懸念としては、意図せずに自サーバが外部へのsmtp接続を試みること、さらに言えば、おかしなメールをバラ撒こうとすることだ。
が、仮に外部へのsmtp接続を無効にしたくとも、rc.confの設定だけではできないようだ。これについては改めて考える。
外部からのsmtp接続を受け付けない場合には、/etc/rc.confに下記を追加すればよく、かつ少なくとも9.0、8.2ではデフォルト設定だ。
/etc/rc.confでの外部からのsmtp接続を受け付けない設定
以下のみを/etc/rc.confに追記
sendmail_enable="NO"
なお、上記はデフォルト
$ uname -v
FreeBSD 8.2-RELEASE-p3 #0: Tue Sep 27 18:07:27 UTC 2011 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
$ grep sendmail_enable /etc/defaults/rc.conf
sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO).
【参考】以下はもう使われていないので注意。
sendmail_enable = "NONE"
man rc.sendmailより
sendmail_enable
(中略)
The ``NONE'' option is deprecated and should not be used. It will be removed in a future release.
さらにkwsk
FreeBSDにおけるsendmail起動の設定は、以下の変数にYES/NOを代入することで行う。
使い方はrc.sendmail(8)に記載されている。
sendmail_enable=
sendmail_submit_enable=
sendmail_outbound_enable=
sendmail_msp_queue_enable=
これらは最初の3つと1つに分かれる。
最初の3つはセットになっており、一つ目がYESの場合は残り二つが参照されない。
一つ目がNOで、二つ目がYESの場合は最後の一つが参照されない。
したがって、3パターンの設定ができることになり、各パターンについて調べた結果は以下の通り。
・パターン1: デフォルト
外部からのsmtp接続を受け付けない。
内部からのsmtp接続は受け付け、外部への送信は可能。
sendmail_enable="NO"
sendmail_submit_enable="YES"
sendmail_outbound_enable="YES"
・パターン2:
外部、内部ともにsmtp接続を受け付けない。
つまりroot等に送られるreportも届かなくなる。
ただちょっと分からないのは、「"local mail queue management"を提供する」とmanには記載されているのだが、外部、内部ともにsmtp接続を受け付けない状態でのlocal mail queueとはいったいなんだろうか。一応、この状態ではroot権限でsendmailが「Queue runner」として起動する。
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="YES"
パターン3:
この状態ではroot権限のsendmailは一切起動しない。
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
上記を別の形で表現すれば以下の通り。(rc.sendmail(8)より引用)
# MTA
if (${sendmail_enable} == NONE)
# Do nothing
else if (${sendmail_enable} == YES)
start sendmail with ${sendmail_flags}
else if (${sendmail_submit_enable} == YES)
start sendmail with ${sendmail_submit_flags}
else if (${sendmail_outbound_enable} == YES)
start sendmail with ${sendmail_outbound_flags}
endif
# MSP Queue Runner
if (${sendmail_enable} != NONE &&
[ -r /etc/mail/submit.cf] &&
${sendmail_msp_queue_enable} == YES)
start sendmail with ${sendmail_msp_queue_flags}
endif
なお、sendmail_msp_queue_enableは、smmsp権限で動くQueue runnerの動作スイッチ。
NOを指定すれば起動しない。