让FreeBSD更安全(Securing FreeBSD)
翻译:Delphij
摘自: CNFUG期刊 ( China FreeBSD User Group)
前几天我整理了过去的一些笔记,以及近几年收集的一些安全建议。我认为这可能对您有帮助,所以本周我就暂停文档系列的文章,写一点关于使你的FreeBSD系统更安全的内容。
很明显,在这个领域我不可能用一篇文章全面地介绍所有的事情。另外,也不可能给出一个防止四海皆准的,保证任何系统都安全的方案。
在我整理笔记的过程中,我注意到很多都是关于如何让FreeBSD服务器(如,Web服务器,邮件服务器,等等)更安全的方法。如果你用FreeBSD做为个人系统,并希望完全的桌面功能的话,这就不太够用了。你肯定不愿意因为某些强化安全的设置,造成某些功能无法使用,并在此后的一周内孤立无援地与计算机进行搏斗,直到找到问题的所在。
因此,你将注意到,和许多其它安全教程不同,这份文档并不建议你修改FreeBSD系统中文件的权限。这是有意的。除非你正在强化一台生产服务器的安全性,并且十分明白自己在做什么,否则绝不要修改文件的权限。(如果你一定要做做实验的话,请在自己的home文件夹中作)。不然的话,一些东西可能就会停止工作,例如,电子邮件,X Window系统,声音。怪事会在不经意的时刻发生,让你头疼良久之后才意识到可能是一周前的某个权限设置造成的问题。
我们都知道Internet并不总是一个友好的地方,而且你可能也不想让另一个地方的人拥有与你一样的访问许可权限。这意味着你可能不希望在没有某种防火墙的前提下访问Internet。幸运的是,你的FreeBSD系统支持良种防火墙:ipfw 和 ipfilter。更令人振奋的是,通俗易懂的文档正在迅速增加。如果你不在防火墙后面,那么请花一个周六下午的时间读一读如何在你的系统上配置防火墙的文章,并操练一把。你将为此感到愉快,以下是一部分可用的资源:
man ipfw
FreeBSD Handbook: Section 10.7 -- Firewalls
Setting Up a Dual-Homed Host using IPFW and NATD
man ipf
IPFilter and PF resources
好的安全总是“层层设防”,这意味着如果一个机制失效了,仍然有备用的机制。即使你的系统已经受到了防火墙的保护,你仍然需要禁用所有服务,除了那些绝对需要的。在桌面系统中,不需要很多的服务。
用下面的命令可以查看哪些服务正在试图监听连接你的系统:
端口6000(X Window服务器)是输出中非常常见的;如果没看到它的话,启动一个X Window会话,然后重新运行 sockstat -4。不幸的是,在过去的几年中有很多针对X Window的攻击。幸运的是,使用X并不需要打开6000端口,不必担心,即使关闭了这个端口,仍然可以使用图形界面!
许多方法可以关掉这个端口。我发现的最简单的方法是成为超级用户,并编辑 /usr/X11R6/bin/startx。找到 serverargs 那一行,并把它改为类似下面的样子:
如果想了解6000端口打开的后果,请阅读 Crash Course in X Window Security。
好了,现在 sockstat -4 输出中的服务少了一个。我们还需要处理一下邮件:端口 25 (smtp) 和 587 (submission)。收发邮件并不需要 587 端口,为了关闭它,我们需要修改 /etc/mail/sendmail.cf。查找这一行:
那么端口25呢?你可能需要,也可能不需要打开这个端口,这取决于使用什么样的邮件程序来收发邮件。对于运行 FreeBSD 4.6-RELEASE 或更高版本的系统,在/etc/rc.conf中增加下面的行:
如果你的"sockstat"显示端口111打开,那么把下面几行加到 /etc/rc.conf (或者,如果已经有这些行,把 YES 改为 NO):
nfs_client_enable="NO"
portmap_enable="NO"
syslog (端口 514) 也可能出现在你的输出结果中。我们可能并不希望完全关掉 syslog ,因为它提供的消息记录是我们需要的。但我们并不需要为此打开端口。在 /etc/rc.conf 文件中增加下面的选项:
syslogd_flags="-ss"
随后,确认 /etc/rc.conf 中inetd_enable不是YES。如果sockstat输出中有inetd,那么/etc/inetd.conf中肯定有什么项目没有被注释掉,如果不需要的话,那么把那一行前面加上#,并 killall inetd。
如果需要使用DHCP自动获取地址,那么请保持dhclient (udp 68)打开,否则将不能刷新地址。
如果在 sockstat 输出中发现了其他东西,那么请看看 man rc.conf 里面有没有关于如何关掉这些东西的提示。如果没有的话,那么很可能是某个启动脚本启动了一些服务程序,请执行:
mv snmpd.sh snmpd.sh.sample killall snmpd
icmp_log_redirect="YES"
在打开 icmp_log_redirect 选项时请务必小心,因为它会记录每一个ICMP重定向 ,如果你遭到了这样的攻击,那么日志很可能会塞满记录。
建好防火墙之后,请考虑加入下面的选项:
最后,下面的选项可能非常有用:
让我们来研究一下其他能够加强安全的设置。我比较喜欢把默认的口令加密算法改为Blowfish,因为它在提供最佳安全性的前提下,也提供了最快的速度。这里有一份 comparison of algorithms[几种密码学算法的比较]。
当然,如果你对这类东西感兴趣的话,看看 Cryptogram newsletter ,它是Blowfish作者写的。
为了启用 Blowfish 散列,编辑 /etc/login.conf 并把 passwd_format 一行改成下面这样:
完成了这些操作之后,重新检查一下确认自己没有遗漏什么:
最后,重新配置 adduser 程序,让它在以后使用Blowfish。修改 /etc/auth.conf,找到 crypt_default 一行,改为:
可以通过编辑 /etc/motd 来阻止计算机说出一些不该说的东西,或者宣扬你的一些想法,包括你喜欢看的 sci-fi 文摘,或者其他一些——总之你想写什么就写什么。
随后,删除版权信息:
login:
最后,即使你已经修改了motd并从中删除了内核版本信息,默认情况下FreeBSD仍然会在启动之后把这些东西加入 /etc/motd 。因此需要修改 /etc/rc.conf 并加入下面的设置:
此外,限制登录也是非常重要的。因为这些变动会改变 login 程序的行为,因此需要非常谨慎。比较好的习惯是保持一个以root身份登录的终端,用其他终端尝试。这样如果由于某种原因造成问题,你仍然可以改正。
包括你自己在内的任何人都不应该直接以root身份登录。修改 /etc/ttys。你将注意到 ttyv0 到 ttyv8的一系列设置。把后面的 secure 改为 insecure。注意,这个文件肯定是你不希望有任何错误的一个文件,因此请仔细地进行测试。如果设置正确,root登录将收到 "Login incorrect" 。
我个人倾向于使用所有的9个终端。如果你不打算这样,请把对应的 "on" 改为 "off" ,当然,只是一部分 ttys 。切记保持至少1个 "on," 否则你会无法登录,这将导致系统无法使用。ttyv8 默认情况下是 "off" ,这意味着你需要手动打开X,如果希望自动启动,那么把它改为"on."。
最后一个我想说的限制是阻止从其他地方登录,这是通过编辑 /etc/login.access 实现的。
你可能希望禁止一切远程登录(这意味着你必须物理地坐在机器前面),删除下面这一行前面的#号:
如果只有一两个用户的话,那么可以拒绝其他人登录:
另外,也可以把用户组方在这里。首先,编辑 /etc/group 并增加下面的行:
随后,修改 /etc/login.access :
416




被折叠的 条评论
为什么被折叠?



