インターネット上にサービスを公開しているサーバは、そのバージョン情報を表示しないことが 1 つの安全策として語られています。
最近の DoS の傾向を見ているとそれ程有用性が高いとも感じませんが、1 つのポリシーとしては依然有効と見ています。ここでは、sendmail の対応方法について説明します。
SmtpGreetingMessage (sendmail.cf)
変更前:
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
変更後:
O SmtpGreetingMessage=$j Drive Network SMTP Server Ready
マクロ $v と $Z がバージョン情報を展開するため、削除するか好みのメッセージに変更します。$v は sendmail バイナリバージョンで、$Z は sendmail.cf 内の DZ の値が展開されます。
Received: (sendmail.cf)
変更前:
HReceived: $?sfrom $s $.$?_($?s$|from $.$_) $.$?{auth_type}(authenticated$?{auth_ssf} bits=${auth_ssf}$.) $.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version} (version=${tls_version} cipher=${cipher} bits=${cipher_bits} verify=${verify})$.$?u for $u; $|; $.$b$?g (envelope-from $g)$.
変更後:
HReceived: $?sfrom $s $.$?_($?s$|from $.$_) $.by $j$?r with $r$. id $i$?{tls_version} (version=${tls_version} cipher=${cipher} bits=${cipher_bits}); $|;$. $b
上記の例では、$v, $Z 以外に smtp auth に関する行や envelope-from の行をすべて削除しています。アカウント情報の漏洩につながりかねないので、削除した方が無難と考えます。
helpfile
diff:
16c16 < #smtp This is sendmail version $v --- > smtp This is sendmail version $v 23,24c23,24 < #smtp To report bugs in the implementation see < #smtp http://www.sendmail.org/email-addresses.html --- > smtp To report bugs in the implementation see > smtp http://www.sendmail.org/email-addresses.html 63c63 < quit Exit SMTP. --- > quit Exit sendmail (SMTP). 71c71 < verb by humans and other implementations. --- > verb by humans and other sendmail implementations. 133,136c133,136 < control restart Restart. < control shutdown Shutdown. < control status Show Status. < control mstat Show Status (machine readable format). --- > control restart Restart sendmail. > control shutdown Shutdown sendmail. > control status Show sendmail status. > control mstat Show sendmail status (machine readable format).
$v 以外にも sendmail に関する文字も消すことで、バージョンだけでなくプログラム名も隠蔽することが出来ます。
helpfile は変更後ただちに反映しますが、sendmail.cf は変更後 sendmail の再起動が必要です。
- バージョン隠蔽 (sendmail)
- バージョン隠蔽 (Apache)
- バージョン隠蔽 (ftpd)
- バージョン隠蔽 (popd)