自宅サーバの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を指定すれば起動しない。