入侵预防
外部安全性可分为两类:入侵预防和入侵检测。采取入侵预防手段是为了防止未授权用户访问系统。如果这些手段失败,那么入侵检测在确定何时发生未授权访问以及造成什么损坏方面或许有用。
完全的 Linux 安装是巨大且复杂的系统。跟踪已安装的每一项是很困难的,而配置每个包的安全性特征就更困难了。安装的包越少,则问题就变得越简单。入侵预防的第一步是除去不需要的包。
关闭未使用的网络服务(超级服务器)
关闭未使用的网络服务一直是提高入侵预防能力的好方法。例如,如果正在运行因特网超级服务器(如本教程前面描述的 inetd 或 xinetd),那么 in.rshd、in.rlogind 和 in.telnetd 通常都在缺省情况下启用。这些网络服务几乎都已被更安全的替代项(如 ssh)所取代。
要在 inetd 中禁用服务,只需在 /etc/inetd.conf 中在适当的行前面加上“#”将其注释掉;然后重新启动 inetd 即可。(这在本教程前面已有描述,若需要复习,可返回几页快速浏览。)
要在 xinetd 中禁用服务,可以执行与 /etc/xinetd.d 中适当的代码片段相似的工作。例如,要禁用 telnet,可以将 /etc/xinetd.d/telnet 文件的整个内容注释掉,或简单地删除该文件。重新启动 xinetd 以完成此过程。
如果正在结合 inetd 使用 tcpd,或如果正在使用 xinetd,还可以选择限制与可信的主机进行的进入连接。对于 tcpd,可参阅本教程的前几章。对于 xinetd,可在 xinetd.conf(5) 手册页中搜索“only_from”。
关闭未使用的网络服务(独立服务器)
有些服务器并不由 inetd 或 xinetd 启动,但却作为“独立”服务器始终运行着。这样的服务器通常是 atd、lpd、sshd、 nfsd 和其它服务器。事实上,inetd 和 xinetd 本身都是独立服务器,如果在它们各自的配置文件中注释掉所有的服务,就选择了将它们完全关闭。
独立服务器通常在系统引导或更改运行级别时由 init 系统启动。如果不记得运行级别是如何工作的,可以看看 LPI 101 系列第 4 部分。
要使 init 系统不再启动服务器,在每个运行级别目录中找到指向该服务器启动脚本的符号链接,然后删除它。运行级别目录的名称通常为 /etc/rc3.d 或 /etc/rc.d/rc3.d(针对运行级别 3)。还需要检查其它运行级别。
除去服务的运行级别符号链接后,仍需要关闭当前运行的服务器。最好用服务的初始化脚本完成这一操作,通常可以在 /etc/init.d 或 /etc/rc.d/init.d 中找到这一脚本。例如,要关闭 sshd:
# /etc/init.d/sshd stop * Stopping sshd... [ ok ] |
测试更改
在修改 inetd 或 xinetd 配置以禁用或限制服务,或用服务器初始化脚本关闭该服务器后,应该对所做的更改加以测试。可以使用 telnet 客户机通过指定服务名称或号码来测试 tcp 端口。例如,要验证 rlogin 已被禁用:
# grep ^login /etc/services login 513/tcp # telnet localhost 513 Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused |
除了标准 telnet 客户机以外,还应考虑使用实用程序以测试系统“开放程度”的可能性。我们推荐使用 netcat 和 nmap。
ncat 是“网络瑞士军刀”:它是使用 TCP 或 UDP 协议、跨越网络连接读写数据的简单 UNIX 实用程序。nmap 是用于网络探测或安全性审计的实用程序。具体而言,nmap 扫描端口以确定哪个端口打开了。