在给你的新系统打好补丁后,你可能需要额外的步骤来加固它,在你的计划中应该有一个安全目标,参照这些目标确定要做哪些事情,你的目标越多,事情就越多,尽量保持简化,实际上复杂的设置会让系统更不安全,因为它们常常导致配置失效,同时,在你的安装日志中记录这些步骤。
Fedora实例已经准备好展示两个重要的步骤来增强安全性:启用SELinux和安装一个防火墙。在大多数典型的使用桌面的情况下,安装一个杀毒软件就足够了,对于Debian盒子而言,我选择了三个可以在任何服务器上使用的步骤:使用sudo、锁住ssh和使用一个限制性的iptables防火墙,这些项目应该在任何服务器上考虑部署,如果需要,它们也可以在桌面系统上应用。
sudo
sudo对于限制root访问而言是一个伟大的程序,它应该在任何服务器上接受严格的监视,将用户添加到/etc/sudoers文件中,限制它们使用su来执行特殊的命令,访问特殊的目录或访问网络主机,在sudoers文件中的任何用户只要在它运行命令前输入sudo来进入root环境即可执行想执行的程序,这比起将root密码告诉每个人来将更容易,而且更安全了。
ssh
ssh是目前Linux系统上标准的远程访问协议,在它的默认配置下,它有一些设置明确地需要你进行锁定,将下面两行添加到/etc/ssh/sshd.config文件中:
PermitRootLogin no
X11DisplayForwarding no
第一行阻止root用户通过ssh登陆到服务器,永远都不要用root用户登陆ssh,第二行禁用了X转发(它允许用户快速地从你的服务器启动一个X会话),在本例中,X并没有安装,因此这不是问题,你应该通过chroot技术或使用TCP Wrappers进一步锁定ssh,由于空间限制,我忽略了这些配置步骤。
iptables防火墙
与其长时间讨论如何正确配置一个防火墙,还不如使用我编写的现成脚本,我编写了下面的脚本并配有注释来加固Debian系统,它限制了新发起的ssh、http、ssl连接通信,将本例中的ip地址修改为你服务器的ip地址,想了解更多关于iptables可用选项的细节,请参考帮助文档,当安装你自己的防火墙时,不要忘了只在iptables中开放必须的端口以减小攻击面的目标。
#!/bin/sh PATH=/usr/sbin:/sbin:/bin:/usr/bin #FLUSH PREVIOUS TABLE ENTRIES iptables --flush #CHANGE DEFAULT POLICIES FROM #ACCEPT TO DROP iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP #ALLOW LOCAL LOOPBACK TRAFFIC iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT #ALLOW ESTABLISHED CONNECTIONS iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #ALLOW DEFINED TRAFFIC # #SSH - 22 iptables -A INPUT -d 192.168.1.2 -p tcp --dport 22 --sport 1024:65535 -m state --state NEW -j ACCEPT #HTTP - APACHE -80 iptables -A INPUT -d 192.168.1.2 -p tcp --dport 80 --sport 1024:65535 -m state --state NEW -j ACCEPT #SSL - 443 iptables -A INPUT -d 192.168.1.2 -p tcp --dport 443 --sport 1024:65535 -m state --state NEW -j ACCEPT |
将这些脚本保存到本地,然后拷贝或移动到/etc/network/if-up.d目录,当系统启动网络开启后它将被执行,如果你西藏应用这个配置到一个基于Redhat的系统上,你只需简单地运行上面的脚本并用iptables-save命令来重设规则,可以不用重新启动系统。