那么端口25呢?你可能需要,也可能不需要打开这个端口,这取决于使用什么样的邮件程序来收发邮件。对于运行 FreeBSD 4.6-RELEASE 或更高版本的系统,在/etc/rc.conf中增加下面的行:
sendmail_enable="NO"
将告诉 sendmail 只监听 localhost,这允许所有的邮件客户程序发送邮件。如果你知道你的邮件客户程序带有内置的SMTP代理,或者喜欢冒险,那么可以尝试一下:
sendmail_enable="NONE"
这将彻底关闭25端口。检查一下这是否让你无法发送邮件是很重要的,确保已经关掉了所有应用程序,随后,以超级用户身份执行:
shutdown now
收到提示后按回车、exit。重新登录后给自己发一封邮件,如果收不到,那么把NONE改回NO。
如果你的"sockstat"显示端口111打开,那么把下面几行加到 /etc/rc.conf (或者,如果已经有这些行,把 YES 改为 NO):
nfs_server_enable="NO" nfs_client_enable="NO" portmap_enable="NO"
Portmap只有在运行NFS时才是必需的,而这往往不是FreeBSD桌面系统的需要。历史上它有过很多安全问题,因此除非你绝对需要它,否则就别用。
syslog (端口 514) 也可能出现在你的输出结果中。我们可能并不希望完全关掉 syslog ,因为它提供的消息记录是我们需要的。但我们并不需要为此打开端口。在 /etc/rc.conf 文件中增加下面的选项:
syslogd_enable="YES" syslogd_flags="-ss"
标志中的ss (确认用了两个s,而不是一个) 将禁止来自远程主机的记录并关闭端口,但仍然允许 localhost 进行日志记录。
随后,确认 /etc/rc.conf 中inetd_enable不是YES。如果sockstat输出中有inetd,那么/etc/inetd.conf中肯定有什么项目没有被注释掉,如果不需要的话,那么把那一行前面加上#,并 killall inetd。
如果需要使用DHCP自动获取地址,那么请保持dhclient (udp 68)打开,否则将不能刷新地址。
如果在 sockstat 输出中发现了其他东西,那么请看看 man rc.conf 里面有没有关于如何关掉这些东西的提示。如果没有的话,那么很可能是某个启动脚本启动了一些服务程序,请执行:
cd /usr/local/etc/rc.d
来看看你的系统中的启动脚本。绝大多数 packages/ports 会安装一个扩展名为sample的示范脚本用于启动服务,这些脚本并不被执行;也有一些直接安装能够执行的脚本,它们会在计算机启动的时候加载。禁止某个脚本知性最简单的方法是把它的扩展名改为sample,随后杀掉守护程序,这样sockstat就不会再说什么了。 举例来说,我最近安装了 ethereal 结果发现 snmpd 出现在 sockstat -4 的输出中,这个程序在安全方面名声不佳,因此我把自己升级为root并执行了下面的命令:
cd /usr/local/etc/rc.d mv snmpd.sh snmpd.sh.sample killall snmpd
你可能会希望把下面的选项加入 /etc/rc.conf :
tcp_drop_synfin="YES"
这个选项可以挫败诸如OS指纹识别的企图(译注:这个选项对最新的nmap无效)。如果你打算开启这个选项,那么,还需要在内核编译配置文件中加入:
options TCP_DROP_SYNFIN
|