8. 网络安全性

由于人们花费越来越多的时间在线,网络安全性就变得愈加重要。危害网络安全性要比危害物理或是本地安全性简单得多,因而也更加普遍。

有许多优秀的工具可以用来维护网络安全性。其中越来越多随附在您的 Mandriva Linux 发行版中,无论是通过主要的 CD-ROM 版、contribs 版、还是通过加密 FTP 服务器(见上文)。

8.1. 数据包窥探器

入侵者在网络上获得对您系统的访问权限最为普遍的方法之一是在一台已经攻破的主机上运行数据包窥探器。该"窥探器"仅对数据包流中诸如 passwdloginsu 监听,然后记录其中数据。这样一来,攻击者甚至不必破门而入就能得到该系统的密码。未加密的密码对该攻击尤为脆弱。

例如:主机 A 已被攻破。攻击者安装了一个窥探器。窥探器记下管理员从主机 C 对主机 B 的登录。当管理员登录到 B 时,它就得到他们的个人密码了。随后,管理员运行了 su 命令来解决某个问题。现在,攻击者又得到了主机 B 的 root 密码。接着,管理员让某人用他的账户登录到另一个站点的主机 Z。现在,攻击者还得到了登录到主机 Z 的 login 密码。

在当今,攻击者甚至无需攻破系统:他们只要把一台计算机(无论是否便携式)带进大楼,然后连入您的网络。

请使用 ssh 或其他加密密码的方法阻止这种攻击。POP 帐号的 APOP 之类的也能够阻止该攻击。普通的 POP 登录对其非常脆弱,因为它在网络上传送未加密的密码。

8.2. 系统服务和 tcp_wrapper

在您的 GNU/Linux 系统连入任何网络之前,首先需要检查的是您需要提供什么样的服务。请禁用不需要的服务,让您少操心一些,也让攻击者少一些侥幸。

GNU/Linux 下有许多方式禁用服务。您可以查看 /etc/inetd.conf 文件以了解您的 inetd 提供什么服务。请注释掉您不需要的服务(在行首插入 #),并重启您的 inetd 服务。

您也可以删除(或注释掉) /etc/services 文件中的服务。这将意味着本地客户端也会找不到该服务(即,如果您删除了 ftp,则 ftp 到远程站点时会失败,并得到 unknown service (未知服务)的错误信息)。通常不值得从 /etc/services 中删除服务,因为它不提供额外的安全性。如果本地某个人想要使用 ftp,即使您将其注释掉,他也可以让他的客户端使用普通的 FTP,那也照样有用。

某些您可能需要保留启动的服务有:

  • ftp

  • telnet (或 ssh)

  • 邮件服务,例如 pop-3imap

  • identd

如果您不准备使用某些特定的软件包,您也可以把它们全部删除。rpm -e 软件包名称urpme 软件包名称将删除整个软件包。

而且,您确实需要禁止 rsh/rlogin/rcp 工具软件(包括 login (由 rlogin 使用)、shell (由 rcp 使用)、和 exec (由 rsh 使用))从 /etc/inetd.conf 被启动。这些协议特别不安全,且在过去常是安全隐患的肇因。

您可以检查您的 /etc/rc.d/rc[0-9].d 以确认在那些目录中启动的服务中没有不需要的。那些目录中的文件实际上是到 /etc/rc.d/init.d 相应文件的符号链接。更改 init.d 目录中的文件名将禁用指向该文件的所有符号链接。如果您只想在某个运行级别(run level)上禁用某个服务的话,请将相应符号链接中的 S 改成 K。如下所示:

root#  cd /etc/rc6.d
root#  mv S45dhcpd K45dhcpd

[注意]注意

您也可以使用命令行工具 chkconfigKDE 下的图形界面:ksysv 来完成。

您的 Mandriva Linux 发行版随附一个 tcp_wrapper 来“包裹”您所有的 TCP 服务。tcp_wrapper (tcpd) 由 inetd 启动,而非作为一个独立的服务启动。然后 tcpd 检查请求该服务的主机,并运行实际的服务程序,或者拒绝来自那个主机的访问。tcpd 允许您限制对您的 TCP 服务访问权限。您应该编辑 /etc/hosts.allow 并添加需要拥有对您计算机服务访问权限的那些主机。

如果您只是一个家庭拨号用户,我们建议您全部拒绝。tcpd 也会记录对服务不成功的访问尝试,因此该日志会在您受到攻击时警告您。当您添加了新的服务,如果它们是基于-TCP 的,您应该将它们配置为使用 tcp_wrapper。例如:普通的拨号用户能够阻止外人连接到他的计算机,并仍能够收到邮件以及连入 Internet。要这么做,您可能需要将下列几行加入您的 /etc/hosts.allow

ALL: 127.

当然,您的 /etc/hosts.deny 要有:

ALL: ALL

这将阻止外来对您计算机的连接,并仍允许您从里面连接到 Internet 上的服务器。

请牢记 tcp_wrapper 仅保护从 inetd 启动的服务以及其他很少一些特定的服务。您计算机上非常有可能运行其他的服务。可以使用 netstat -ta 找出您的计算机提供的全部服务列表。

8.3. 验证您的 DNS 信息

保持网络上所有主机 DNS 信息的更新将有助于提高安全性。如果某个未被授权的主机连入您的网络,您就能由于其缺乏 DNS 条目而认出它来。许多服务能被配置为拒绝来自缺少合法 DNS 条目主机的连接。

8.4. identd

identd 是一个一般在您的 inetd 服务之外运行的小程序。它记录了哪个用户运行了哪些 TCP 服务,并能够将其报告给请求该信息的人。

许多人误解了 identd 的用处,并禁用了它或者阻挡所有对其远程请求。identd 不是用来帮助远程站点的。没法知道您从远程 identd 获得的信息是否正确。identd 请求也不进行认证。

那么,为什么您要运行它呢?因为它帮助克复困难,并且在追查的时候还是一个数据点。如果您的 identd 未被攻破,那么您就知道它会告诉远程站点使用 TCP 服务的用户名或是 UID。如果远程站点的管理员过来告诉您,谁谁谁想要黑掉他们的站点,您就可以很容易对该用户采取措施。如果您没在运行 identd,您就不得不查看连篇累牍的日志以确定那个时候谁在线。而且,一般您还需要更多的时间追查该用户。

大多数发行版随附的 identd 比许多人想像的要更具可配置性。您可以对特定用户禁用它(使用 .noident 文件),您也可以记录所有 identd 请求(建议使用),您还可以让 identd 返回 UID 甚至 NO-USER 来代替用户名。

8.5. 配置及保护 Postfix MTA

Postfix 邮件服务器由 Wietse Venema (Postfix 及其他一些主要的 Internet 安全产品)开发,以“尝试提供一个被广泛使用的 Sendmail 程序的替代品。Postfix 希望是快速的、易于管理的、安全的,同时也与 Sendmail 足够兼容而不会惹恼您的用户们。

有关 postfix 详情请参见 Postfix 网站以及配置和保护 Postfix

8.6. SATAN、ISS、和其他网络扫描器

有一系列软件包对计算机和网络执行端口和基于-服务的扫描。SATANISSSAINTNessus 是其中比较著名的。这种软件尽其所能连接到目标计算机(或是网络上的全部目标计算机)上的端口,并尝试确定有什么服务在运行。基于这些信息,您就能够分辨该计算机对特定的服务安全漏洞是否易受攻击。

SATAN (Security Administrator's Tool for Analyzing Networks -- 安全管理员网络分析工具)是一个具有网页界面的端口扫描程序。它能被配置用来对某台计算机或是某个计算机网络进行轻型、中型或是大型检测。最好下载 SATAN,并对您的计算机或网络执行扫描,且修补发现的任何问题。请确定您是从 metalab 或是某个享有声望的 FTP 或网站获得 SATAN 的。网络上存在一个伪装为 SATAN 副本的特洛伊木马(参见 Trouble 网站)。请注意,SATAN 已经很久没有更新了,而下述的其他工具可能会更好。

ISS (Internet Security Scanner -- Internet 安全性扫描器)是另一个基于端口的扫描程序。它比 Satan 要快,因此对大型网络更适宜。然而,SATAN 提供更多的信息。

SAINTTMSATAN 基础上的一个更新版本。它是基于网页的,并比 SATAN 含有更多的新测试。详情请参见 SAINT 主页。

Nessus 是一个免费的安全性扫描程序。它具有一个 GTK 图形界面以简化使用。它也拥有一个非常优秀的插件系统来更新端口扫描测试。详情请浏览 Nessus 网站

8.6.1. 检测端口扫描

有许多工具能够提醒您在被 SATANISS 和其他扫描软件探测。不过,要是您使用 tcp_wrapper,请定期查看您的日志文件就能够注意到这种探测。甚至在最低设置,SATAN 仍然会在日志中留下痕迹。

还是存在“隐蔽”端口扫描器的。设置了 ACK 位的 TCP 数据包(就象在已经建立连接时发送的那样)可能会逃过防火墙的数据包过滤。从某个端口返回的_没有已建立的会话的_RST 数据包能够证明该端口存在。我不认为 TCP 包裹器(wrapper)会侦测到它。

您也可以尝试 SNORTTM。它是一个免费的 IDS (Intrusion Detection System -- 入侵检测系统),用以检测网络入侵。

8.7. Sendmail、qmail 和 MTA[5]

您能提供的重要服务之一是邮件服务器。不幸的是,对于攻击,它也是最为脆弱的部分之一。想想它需要执行的任务数量和通常需要的权限就会明白。

如果您正在使用 sendmail,保持更新非常重要。sendmail 有一个很长很长的安全漏洞历史。请确认您运行的是来自 sendmail 的最新版本。

请牢记,为了发送邮件,不必特地运行 sendmail。如果您只是一个家庭用户,您可以整个禁用 sendmail,并仅使用您的电子邮件客户端来发送邮件。您可能也会想要从 sendmail 的启动文件中删除 -bd 标志,从而禁止进入的邮件请求。换句话说,您可以从您的启动脚本中使用以下方法启动 sendmail

# /usr/lib/sendmail -q15m

而这将导致 sendmail 每 15 分种刷新邮件队列,以删除在首次尝试发送时不成功的邮件。

许多管理员选择不使用 sendmail,而是使用其他邮件传送代理(mail transport agents)。您可以考虑转换到 qmailqmail 依照安全性规则从头进行了设计。它既快,又稳定,还安全。可在 qmail 网站找到 qmail

qmail 的直接竞争对手是 Postfix。它由 Wietse Venema (tcp_wrapper 及其他安全工具的作者)研发。它以前称为 vmailer,并由 IBM 赞助。这也是一个依照安全性规则从头进行设计的邮件传送代理。有关 Postfix 的详情请参见 Postfix 网站

[注意]注意

PostfixMandriva Linux 随附的默认 MTA。请参阅第 5 章 Postfix 邮件服务器

8.8. 拒绝服务(Denial of Service -- DoS)攻击

拒绝服务(Denial of Service)” (DoS)攻击是一种攻击者通过使得某些资源过度繁忙以致无法响应合法请求,或者拒绝用户访问计算机或网络的攻击方式。

拒绝服务攻击在近几年迅速增长。以下列出了比较普遍和近来常见的。注意,新的方法层出不穷,因此这只是其中几例而已。请参阅 GNU/Linux 安全列表和 bugtraq 列表以及存档以获得最新的信息。

  • SYN 洪流(SYN Flooding) - SYN 洪流是一种网络拒绝服务攻击。它利用了 TCP 连接建立方式中的 "换气孔(loophole)"。较新的 GNU/Linux 内核系列(2.0.30 以上)有一些配置选项以通过拒绝人们访问您的计算机或服务阻止 SYN 洪流攻击。相应内核保护选项详情请参见第 7 节 “内核安全性”

  • Ping 洪流(Ping Flooding) - Ping 洪流是一种简单的暴力(brute-force)拒绝服务攻击。攻击者向您的计算机发送“洪水般的ICMP 数据包。如果它们在比您具有更大带宽的主机上发动这一攻击,您的计算机就不能够向网络发送任何东西。该攻击的变体:“smurfing” 会向某个主机发送返回地址为您的计算机的 ICMP 数据包,以致它们毫无征兆地淹没您。有关“smurf” 更进一步的信息请参见 Linux 安全性网站

    如果您受到了 ping 洪流攻击,请使用类似 tcpdump 之类的工具来确定那些数据包都从哪里来(或看起来像是从哪里来的)。然后使用该信息联系您的(网络)提供者。Ping 洪流可以非常方便地在路由器级或是通过使用防火墙来阻断。

  • Ping 到死(Ping o' Death) - Ping 到死攻击发送对于内核数据结构过份巨大的 ICMP ECHO REQUEST 数据包。由于发送一个单独的巨大的(65,510 字节)"ping" 数据包会导致许多系统宕机甚至崩溃,这一问题很快就会导致“Ping 到死”。不过这一问题早已解决,无须担心。

Insecure 网站通过使用它们的搜索引擎,您会找到大多数攻击代码及其如何起作用的深入说明。

8.9. NFS (Network File System -- 网络文件系统)安全性

NFS 是一个被广泛使用的文件共享协议。它允许运行 nfsdmountd 的服务器“输出”其整个文件系统到其他内核中内建 NFS 文件系统支持的计算机(或其他提供支持的客户端,如果它们不是 GNU/Linux 计算机的话)。mountd/etc/mtab 记录已经挂载的文件系统,并能够使用 showmount 显示它们。

许多站点使用 NFS 来为其用户提供主(home)目录。因此,无论他们登录集群中的哪台计算机,他们都能够得到他们所有的私人文件。

只有很少的安全措施可以用于输出文件系统的时候。您可以让您的 nfsd 将远程 root 用户(UID=0)映射到nobody用户,拒绝他们对输出文件的所有访问权限。然而,因为单独的用户对其拥有(或至少是同一个 UID)的文件有访问权限,远程 root 用户能够登录或是 su 到他们的账户以访问他们的全部文件。对于能够挂载您的远程文件系统的攻击者来说,这只是个小障碍。

如果您必需使用 NFS,请确定您只将其输出到需要的计算机上。决不要输出整个根目录;仅输出需要的目录。

有关 NFS 的详情请参见 NFS HOWTO

8.10. NIS (Network Information Service -- 网络信息服务)

网络信息服务(Network Information Service) (原为 YP)是一种将信息发布到一组计算机中的方式。NIS 主机(master)保存信息表并将其转换为 NIS 映射文件。随后,这些映射文件在网络上为 NIS 客户计算机提供登录、密码、主目录和使用的 shell 的信息(标准的 /etc/passwd 文件中的所有信息)。这就允许用户只需要改变他们的密码一次,就能够在所有 NIS 域中的计算机上起作用。

NIS 一点也不安全。它从来就没考虑过。它关注的是方便和有用。任何能够猜到您的 NIS 域中用户名的人(无论处于网络何处)都能够得到您的 passwd 文件副本,就可以用crackJohn the Ripper 来对付您用户的密码。同样,也能够用各种恶劣的伎俩欺骗 NIS。如果您必需使用 NIS,请确定您了解了它的危险。

NIS+ 是一个比 NIS 安全得多的替代品。详情请参见 NIS HOWTO

8.11. 防火墙

防火墙是一种用来控制允许哪些信息进出您的局域网的方式。一般来说,防火墙主机连接到 Internet 以及您的本地局域网。并且,从您的 LAN 访问 Internet 的唯一途径是通过该防火墙。通过这种方式,防火墙能够控制 Internet 和您的局域网之间信息流动。

有许多类型的防火墙和设置方法。GNU/Linux 计算机能成为很不错的防火墙。防火墙代码可以直接编译到 2.0 及以上内核中。2.2 内核的用户区工具 ipchains 和 2.4 内核的 iptables 能让您随时改变您允许的网络流量类型。您也能够记录特定的网络流量类型。

防火墙技术对保护您的网络十分有用而且重要。不过,决不要认为因为您有了防火墙,您就不用保护它后面的计算机了。这是致命的误解。有关防火墙和 GNU/Linux 的详情请参见优秀的 Firewall HOWTO

如果您对防火墙没有经验,并计划不仅仅为了安全策略而设置一个,Firewalls 一书(由 O'Reilly 出版集团出版)或其他在线防火墙文档是必需仔细阅读的。详情请浏览 O'Reilly 站点。(美国)国家标准和技术协会(National Institute of Standards and Technology)汇集了一套关于防火墙的出色的文档。虽然是 1995 年的,它依然十分优秀。您可以在计算机安全资源中心(Computer Security Resource Center -- CSRC) 网站 上找到它。并请关注:

  • Freefire 项目 — 列举了免费可用的防火墙工具,可在 freefire 获得。

  • Mason — GNU/Linux防火墙自动构建器。这是一个会在您配置网络时记住您所做的东西的脚本。详情请参见 mason

8.12. IP 链表(IP Chains) – GNU/Linux 内核 2.2.x 的防火墙

GNU/Linux IP 防火墙链表(IP Firewalling Chains)是 2.2 内核对 2.0 GNU/Linux 防火墙代码的更新。它比前一版本拥有更多的功能,包括:

  • 更加灵活的数据包处理。

  • 更加复杂的簿记。

  • 简单策略更改可以自动化。

  • 能够明确指定对碎片的阻断,拒绝等等。

  • 记录可疑的数据包。

  • 除了 ICMP/TCP/UDP 还能处理其他协议。

详情请参见 IP Chains HOWTO

8.13. Netfilter – Linux 内核 2.4.x 的防火墙。

作为另一组对内核 IP 数据包过滤代码的升级,netfilter 使得用户能够设置,维护,以及检查新的 2.4 内核中对数据包过滤的规则。

Netfilter 子系统重写了以前包括 ipchains 和 ipfwadm 数据包过滤实现。Netfilter 提供大量的改进。现在,对于保护公司网络,它是一个更加成熟而健壮的解决方案。

iptables 是用来维护内核中防火墙表项的命令行接口。

Netfilter 提供了维护在内核中不同部分间游历的数据包的一个原始框架。该框架包括伪装支持、标准数据包过滤、和更为完善的网络地址解析。它甚至改善了对于在防火墙后一组服务器之间特定服务的负载均衡请求的支持。

状态检查功能特别有用。状态检查有能力追查并控制通过过滤器的通讯流。能够追查会话信息状态和内容的能力不仅能够简化规则,也有助于更好地解释高层协议。

而且,可以开发小模块来执行额外指定的功能。比如:将数据包传送到用户区程序处理后插回正常的数据包流。能够开发这些用户区程序的能力使得以前由于不得不直接修改内核的复杂性降低。

其他 IP Tables 参考资料:

8.14. VPN:虚拟私有网络(Virtual Private Network)

VPN 是一种在某些已经存在的网络上建立“虚拟”网络的方式。该虚拟网络常是加密了的,并只在已知加入网络的实体之间传送数据。VPN 常用于通过 Internet 将在家工作的某人连接到公司内部网络。

存在许多 GNU/Linux VPN 解决方案:

也请参见关于 IPSEC 几节。



[5] 邮件传送代理(Mail Transport Agents)