红帽企业 Linux 3

安全指南

版权 © 2003 Red Hat, Inc.

ISBN: N/A
目录
介绍
1. 文档约定
2. 未来的扩充
2.1. 递交你的反馈
I. 安全问题概述
1章 . 安全总览
1.1. 什么是计算机安全？
1.2. 安全控制
1.3. 结论
2章 . 攻击者和弱点
2.1. 黑客简明历史
2.2. 对网络安全的威胁
2.3. 对服务器安全的威胁
2.4. 对工作站和家用电脑安全性的威胁
II. 配置红帽企业 Linux 的保安系统
3章 . 安全更新
3.1. 更新软件包
4章 . 工作站保安
4.1. 评估工作站的安全性
4.2. BIOS 和引导装载程序的安全性
4.3. 口令安全
4.4. 管理控制
4.5. 可用网络服务
4.6. 个人防火墙
4.7. 被安全强化的通信工具
5章 . 服务器安全
5.1. 使用 TCP 会绕程序和 xinetd 来维护服务安全
5.2. 保护 Portmap 的安全性
5.3. 保护 NIS 的安全
5.4. 保护 NFS 的安全
5.5. 保护 Apache HTTP 服务器的安全
5.6. 保护 FTP 的安全
5.7. 保护 Sendmail 的安全
5.8. 校验哪些端口正在监听
6章 . 虚拟专用网
6.1. VPN 和红帽企业 Linux
6.2. 加密 IP 封装（Crypto IP Encapsulation，CIPE）
6.3. 为什么使用 CIPE？
6.4. CIPE 安装
6.5. CIPE 服务器配置
6.6. 配置客户的 CIPE
6.7. 定制 CIPE
6.8. CIPE 的钥匙管理
6.9. IPsec
6.10. IPsec 安装
6.11. IPsec 主机到主机配置
6.12. IPsec 网络到网络配置
7章 . 防火墙
7.1. Netfilter 和 IPTables
7.2. 使用 IPTables
7.3. 常用 iptables 过滤
7.4. FORWARD 和 NAT 规则
7.5. DMZ 和 iptables
7.6. 病毒和假冒 IP 地址
7.7. IP6Tables
7.8. 其它资料
III. 测定你的安全性
8章 . 弱点测定
8.1. 知己知彼
8.2. 测定和测试
8.3. 评估工具
IV. 入侵和事件响应
9章 . 入侵检测
9.1. 入侵检测系统详述
9.2. 基于主机的 IDS
9.3. 基于网络的 IDS
10章 . 事件响应
10.1. 事件响应的定义
10.2. 制定事件响应计划
10.3. 实施事件响应计划
10.4. 调查事件
10.5. 恢复资源
10.6. 报告事件
V. 附录
A. 硬件和网络保护
A.1. 安全网络拓扑
A.2. 硬件安全
B. 常见的漏洞利用和攻击
C. 常用端口
索引
后记
前进
介绍


入侵检测

红帽企业 Linux 3: 安全指南
后退 前进

第 9章 . 入侵检测

贵重物品需要严加保护来防止被盗窃或蓄意破坏。某些家庭中还装有警报系统，这些系统能够阻止窃贼、在行窃发生时通知有关机构、甚至在房屋起火时提醒主人。这些都是确保家庭和家人安全的必要措施。

计算机系统和数据也需要同样的安全保证。互联网推进了各类信息的流动，其中包括个人信息和经济信息。与此同时，它也孕育了多种危险。企图不良的用户和怪客会试图寻找较脆弱的目标，例如：未应用补丁的系统、被特洛伊木马病毒感染的系统、以及运行不安全服务的网络。管理员和安全组的成员在系统被攻击时应该收到警报，这样，他们才能够立刻对此类威胁做出相应的反应。入侵检测系统（Intrusion detection systems）就被设计成这样的警报系统。

9.1. 入侵检测系统详述

入侵检测系统（IDS）是一种分析系统和网络上未经授权的进入和（或）有不良企图的活动的积极进程或设备。IDS 检测异常情况的方法可能会大相径庭；但是它们的最终目的都是在攻击者还未对你的系统造成损害前当场捕捉他们。

IDS 帮助系统免受攻击、滥用和弱化。它还能够监视网络活动、审查网络和系统配置中的弱点、分析数据完好性等等。根据你选择要使用的检测方法而定，使用 IDS 有好几种直接和间接的优越性。

9.1.1. IDS 类型

理解 IDS 的概念和它所提供的功能是判定哪种类型最适用于你的计算机安全策略的关键。本节讨论 IDS 背后的原理、各类 IDS 的功能、以及在一个软件包中使用多种检测技术和工具的合成 IDS 的出现。

某些 IDS 是知识性的（knowledge-based），它使用一个常见攻击的数据库在入侵发生时抢先警告安全管理员。此外，还有一些行为性（behavioral）的 IDS，它们跟踪所有异常资源使用，这些异常资源使用通常是蓄意破坏行为的标志。某些 IDS 是在后台运行的独立服务，只消极地监听活动，并记录来自外界的可疑分组。其它 IDS 综合使用标准的系统工具、被修改的配置、详细的记录、以及管理员的直觉和经验，来创造一个强大的入侵检测包。试用并鉴定各类入侵检测技术能够帮助你找到最适用于你所在机构的检测技术。

后退 | 起点 | 前进
入侵和事件响应 | 上级 | 基于主机的 IDS


常见的漏洞利用和攻击

后退 前进

附录 B. 常见的漏洞利用和攻击

表 B-1 详细列举了某些最常见的漏洞利用以及入侵者用来进入组织内部网络资源的常用入口。避免这些常见漏洞利用的关键是了解这些活动的进行方式，以及管理员应该如何保护他们的网络来免遭这类攻击。

漏洞利用 描述 备注
空白或默认口令 把管理性口令留为空白或使用产品生产商所设置的默认口令。虽然某些运行在 Linux 上的服务包含默认管理口令（红帽企业 Linux 中并不包含），这种行为在硬件（如路由器和 BIOS）中最常见。

在路由器、防火墙、VPN 和网络连接的贮存设备（NAS）中最常见；
在许多过时了的操作系统，特别是附带服务的 OS，如 UNIX 和 Windows；
管理员有时会在匆忙间创建一个有特权的用户而把口令留为空白。这就会成为发现了这个用户帐户的入侵者的完美入口。

默认共享密钥 安全服务有时会把用于开发或评估测试目的的默认安全密钥打入软件包内。如果这些密钥不经改变而被用于互联网上的生产环境，那么任何拥有同样的默认密钥的用户都可以使用那个共享密钥资源，以及其中的保密信息。

在无线访问点和预配置的安全服务器设备中最常见。
CIPE（请参阅第6章 ）包含一个用于示范的静态密钥，在转入生产环境前，这个密钥必须被改变。

IP 假冒（Spoofing） 某个远程机器是你的本地网络上的一个节点，它在你的服务器上寻找弱点，并安装一个后门程序或特洛伊木马来获取对你的网络资源的控制。

由于“假冒”要求怪客预测 TCP/IP SYN-ACK 号码来协调到目标系统的连接，它通常较难做到。但是有好几种工具可以帮助攻击者从事这类活动。
它倚赖于目标系统上运行使用基于源（source-based）的验证技术的服务（例如 rsh、telnet、FTP 等等）。和 PKI 及其它用在 ssh 或 SSL/TLS 的加密验证相比，这种验证技术是不被提倡的。

窃听 通过窃听网络中的两个活跃节点的连接来收集它们之间传递的信息。

这类攻击多数在使用纯文本传输协议（如 Telnet、FTP、和 HTTP 传输）时发生。
远程怪客必须具备到某个 LAN 上的一个已被弱化的系统的进入权；通常，攻击者已经使用了某种积极攻击方式（如 IP 假冒或中间人攻击）来弱化这个 LAN 上的某个系统。
防护措施包括加密钥匙、单次有效口令、以及防窃听的加密验证；强度加密传输也值得一试。

服务弱点 攻击者在互联网上运行的某个服务中寻找缺陷或漏洞；通过这个弱点，攻击者可以危及整个系统以及系统上的任何数据，甚至还能够危及网络上的其它系统。

基于 HTTP 的服务，如 CGI，在执行远程命令甚至使用互动 shell 方面有弱点。即便作为一名无特权的用户来运行 HTTP 服务，攻击者也可以读取配置文件和网络图等。或者，攻击者可以发动“拒绝服务”攻击来用尽系统资源或使其无法为其他用户提供服务。
在开发和测试中，某些服务中的弱点可能没有被注意到；这些弱点（如：缓冲区溢出，buffer overflow。攻击者可以通过使用大于可接受的信息量来填充地址内存，导致服务崩溃，从而给攻击者提供一个互动命令提示。）能够给攻击者完全的管理控制。
管理员应该确保服务不是以根用户身份运行；并时刻关注来自开发商或安全组织（如 CERT 和 CVE）的补丁和勘误更新。

应用程序弱点 攻击者在桌面系统和工作站应用程序（如电子邮件客户程序）中寻找缺陷并执行任意编码、插入用于未来攻击行为的特洛伊木马、或者崩溃系统。如果被危及的工作站拥有对整个网络的管理特权，还会发生进一步的漏洞利用。

工作站和桌面系统更容易被蓄意利用，因为使用工作站和桌面系统的用户没有防止或检测攻击活动的专业知识或经验。把安装未经授权的软件或打开不请自来的邮件的危险性通知给用户是极端重要的。
可以实施一些防护措施，因此电子邮件客户软件不会自动打开或执行附件。此外，通过红帽网络或其它系统管理服务来自动更新工作站软件也可以减轻应用多种安全策略所带来的负担。

拒绝服务（DoS）攻击 攻击者或一组攻击者通过给目标机器（服务器、路由器或工作站）发送未经授权的分组来协调对某个机构的网络或服务器资源的攻击。这会迫使合法用户无法使用资源。

在美国报导最多的 DoS 案例发生在2000年。那次攻击是一次协调的试通洪流（ping flood）攻击，它令几个带有高带宽连接的被危及的系统充当僵尸（zombies），或重导向广播器，使好几家交通流量极大的商业和政府网站都陷于瘫痪。
源分组通常是伪造的（和重新广播的），这使调查攻击的真正发源地的任务变得很艰巨。
在使用 iptables 和类似 snort 的网络 IDS 技术的入口过滤（IETF rfc2267）方面的进展，给管理员跟踪并防御分布型 DoS 攻击提供了协助。

表 B-1. 常见漏洞利用

后退 | 起点 | 前进
硬件安全 | 上级 | 常用端口


防火墙

后退 前进

第 7章 . 防火墙

信息安全通常被当作一种不断改进的过程而不是一成不变的产品。然而，标准的安全实现通常会使用某种专用机制来控制存取权限；把对网络资源的使用限制在授权的、可识别身份的、和可追踪的用户范围内。红帽企业 Linux 包括了好几种强大的工具来协助管理员和安全工程师们解决网络级别的存取控制问题。

除了 CIPE 或 IPsec（第6章 中所讨论）之类的 VPN 解决方案外，防火墙是网络保安系统的一个重要组成部分。好几家推广防火墙方案的厂商都提供了满足各级市场需求的产品：从保护一台电脑的家庭用户的需求，到保卫重要企业信息的数据中心方案，如 Cisco、Nokia、和 Sonicwall 的防火墙设备。Checkpoint、McAfee、以及 Symantec 等厂商还开发了家用和商用的专有软件防火墙解决方案。

除了硬件防火墙和软件防火墙间的区别外，各个防火墙在功能用途方面也有所区别。表 7-1详细描述了三种常见的防火墙，以及它们的运行方式：

方法 描述 优越性 不利因素
NAT 网络地址转换（Network Address Translation，NAT）把内部网络的 IP 子网放置在一个或一组外部 IP 地址之后，把所有的请求都伪装成来自一个地址而不是多个不同地址。

� 可以在 LAN 机器上被透明配置
� 保护在一个或多个外部 IP 地址之后的许多机器，简化管理任务
� 用户到 LAN 的出入可以通过打开和关闭 NAT 防火墙/网关上的端口来限制

� 一旦用户从防火墙外连接了服务，则无法防止其蓄意活动

分组过滤器 分组过滤防火墙读取每个进出 LAN 的数据分组。它可以根据头信息来读取和处理分组，并根据被防火墙管理员实施的可编排的规则来过滤分组。Linux 内核通过 netfilter 内核子系统内建了分组过滤功能。

� 可以通过 iptables 这个前端工具而被定制
� 不需要任何客户方面的定制，因为所有的网络活动都在路由器级别而不是应用程序级别被过滤
� 由于分组没有通过代理来传输，客户和远程主机间是直接连接，因此网络传输速度比较快

� 无法像代理防火墙一样根据内容过滤分组
� 在协议层处理分组，但是无法在应用程序层处理分组
� 复杂的网络体系可能会使建立分组过滤规则方面比较困难，特别是在和 IP 伪装（IP masquerading）或本地子网及 DMZ 网络一起使用时

代理 代理防火墙过滤所有从 LAN 客户到代理机器的某种特定协议或类型的请求，然后，它再代表这个本地客户向互联网发送这些请求。代理机器被用来充当企图不良的远程用户和内部网络客户机器之间的一个缓冲。

� 使管理员拥有对 LAN 之外的应用程序和协议功能的控制权
� 某些代理服务器可以缓存数据，因此当客户存取频繁请求的数据时，这些数据就可以从本地缓存调出而不必使用互联网连接，这有助于减少不必要的带宽用量
� 代理服务可以被密切地监视和记录，从而允许你在网络资源用量方面有更严格的控制

� 代理通常是应用程序特有的（HTTP、telnet 等）或在协议方面有限制的（多数代理只能用于 TCP 连接的服务）
� 应用程序服务无法在代理后面运行，因此你的应用程序服务器必须使用另一种网络保安措施
代理可能会成为网络的瓶颈，因为所有的请求和传输都要经过一个中介而不是让客户直接连接远程服务

表 7-1. 防火墙类型

7.1. Netfilter 和 IPTables

Linux 内核中有一个功能强大的联网子系统 netfilter。netfilter 子系统提供了有状态的或无状态的分组过滤，还提供了 NAT 和 IP 伪装服务。netfilter 还具备为高级选路和连接状态管理而变形（mangle）IP 头信息的能力。netfilter 是通过 IPTables 工具来控制的。

7.1.1. IPTables 总览

netfilter 的强大功能和灵活性是通过 IPTables 界面来实现的。这个命令行工具和它的前身 IPChains 的语法很相似；不过，IPTables 使用 netfilter 子系统来增进网络连接、检验、和处理方面的能力；IPChains 使用错综复杂的规则集合来过滤源地和目的地路线以及两者的连接端口。IPTables 只在一个命令行界面中就包括了更先进的记录方式；选路前和选路后的行动；网络地址转换；以及端口转发。

本节提供对 IPTables 的总览。关于 IPTables 的详细信息，请参阅《红帽企业 Linux 参考指南》。

后退 | 起点 | 前进
IPsec 网络到网络配置 | 上级 | 使用 IPTables


介绍

欢迎使用《红帽企业 Linux 安全指南》！

《红帽企业 Linux 安全指南》一书的目的是协助红帽企业 Linux 用户学习有关如何保护工作站、服务器的安全，如何防止本地或远程入侵、漏洞利用、以及蓄意活动的步骤和实际知识。《红帽企业 Linux 安全指南》一书详细地介绍了为数据中心、工作和家庭等处创建安全计算机环境所应采取的计划和工具。只要拥有恰当的知识和工具，并时刻警惕，运行红帽企业 Linux 的系统既能够充分发挥其功能，也能够阻止多数常见的入侵方法。

本指南详细地讨论了好几个与安全相关的课题，其中包括：

  • 防火墙

  • 加密

  • 保护关键服务

  • 虚拟专用网

  • 入侵检测

本指南被划分为以下几个部分：

  • 安全问题概述

  • 配置红帽企业 Linux 的保安系统

  • 测定你的安全性

  • 入侵和事件响应

  • 附录

非常感谢 Thomas Rude 对本书的无私奉献。他撰写了“弱点测定”和“事件响应”这两章。

本书假定你对红帽企业 Linux 已有较深入的了解。如果你是个新用户或者只具备一些红帽企业 Linux 的基本知识，并想学习关于使用它的更多信息，请参阅以下指南。它们在讨论红帽企业 Linux 的基础知识方面比《红帽企业 Linux 安全指南》要详尽得多。

  • 《红帽企业 Linux 安装指南》描述了有关安装的信息。

  • 《红帽企业 Linux 系统管理介绍》为红帽企业 Linux 系统管理员的新手提供介绍性信息。

  • 《红帽企业 Linux 系统管理指南》描述了关于配置红帽企业 Linux 来满足用户的特定需要的更详细的信息。该指南包括了一些在《红帽企业 Linux 安全指南》中讨论的服务（从安全角度上）。

  • 《红帽企业 Linux 参考指南》提供了适合于有经验的用户用来参考的详细信息，而不是逐步的说明。

这些指南手册的 HTML、PDF、和 RPM 版本位于红帽企业 Linux 的文档光盘上。它们还可以在 http://www.redhat.com/docs/ 上找到。

注记 | 注记
 | 虽然本指南尽可能地反映了最当前的信息，但是要查看在文档定稿之前尚不及包括的信息，请参考“红帽企业 Linux 发行注记”。它可以在红帽企业 Linux 的第一张光盘上找到，也可以在 http://www.redhat.com/docs/ 上找到。

1. 文档约定

在你阅读这本手册的时候，你会注意到某些字词使用了不同的字体、大小和粗细。这种突出显示是有矩可循的；用同一风格来代表不同字词以表明它们属于同一类型。用这种方式来代表的各种字词类型包括：

command

Linux 命令（以及其它操作系统的命令，若使用的话）用这种方式代表。它向你表明你可以在命令行中键入单词或短语然后按 [Enter] 键来启用命令。有时，命令中会包括应用另一种方式显示的词（例如文件名）。在这种情况下，它们被视为命令的一部分，因而整个短语都会被显示为命令。例如：

使用 cat testfile 命令来查看当前工作目录中一个叫做 testfile 的文件。

file name

文件名、目录名、路径、以及 RPM 软件包名用这种方式代表。它表明在你的系统上存在着一个叫这个名称的文件或目录。例如：

你的主目录中的 .bashrc 文件包括你自用的 bash shell 定义和别名。

/etc/fstab 文件包括关于不同系统设备和文件系统的信息。

如果你想使用一个万维网服务器日志文件分析程序的话，安装 webalizer RPM。

application

这种方式向你表明该程序是一个终端用户的应用程序（与系统软件相对）。例如：

使用 Mozilla 来浏览万维网。

[key]

键盘上的按键用这种方式代表。例如：

要使用 [Tab] 键补全，键入一个字符然后按 [Tab] 键。你的终端上就会显示目录中起首为那个字符的文件列表。

[key]-[combination]

一个击键的组合用这种方式代表。例如：

[Ctrl]-[Alt]-[Backspace] 击键组合会退出你的图形会话，把你返回到图形登录屏幕或控制台。

「GUI 界面上的文本」

在 GUI 界面屏幕或窗口中的标题、词汇、或短语会用这种方式显示。它用来标明某个 GUI 屏幕或 GUI 屏幕上的某个元素（譬如与复选箱或字段相关的文本）。例如：

如果你想要在你的屏幕保护程序停止前要求口令的话，选择「需要口令」复选箱。

「GUI 屏幕或窗口上的最上级菜单」

用这种方式表示的词汇表明它位于一个下拉菜单的最上级。如果你在 GUI 屏幕上点击了这个词，应出现菜单的其它部分。例如：

在 GNOME 终端的「文件」下，你会看到「新建标签」选项，它允许你在同一窗口中打开多个 shell 提示。

如果你需要在 GUI 菜单上点击一系列命令的话，它们会如下面的例子中所示：

点击面板上的「主菜单」=> 「编程」 => 「Emacs」来启动 Emacs 文本编辑器。

「GUI 屏幕或窗口中的按钮」

这种方式表明它是 GUI 屏幕上可点击的按钮。例如：

点击「后退」按钮来返回到你刚才查看的网页。

computer output

用这种方式显示的文本表明它是 shell 提示中的文本，如错误消息或命令的答复。例如：

ls 命令显示目录的内容。例如：

Desktop                about.html       logs          paulwesterberg.png
Mail                   backupfiles      mail          reports

命令返回的输出（在上面的例子中，是目录的内容）用这种方式来显示。

prompt

提示是计算机在向你表明它在等待你的输入。它会用这种方式来显示。例如：

$

#

[stephen@maturin stephen]$

leopard login:

user input

用户键入的文本。无论是在命令行中还是在 GUI 屏幕上的文本箱内的输入都会用这种方式来显示。在下面的例子中，text 用这种方式显示：

要把你的系统引导入基于文本的安装程序，你需要在 boot: 提示下键入 text 命令。

replaceable

用在例子中的文本使用这种方式代表。该文本被用户提供的数据所代替。在下面的例子中，<version-number> 使用这种方式显示：

内核源码的目录是 /usr/src/<version-number>/，这里的 <version-number> 是安装在这个系统上的内核版本。

除此之外，我们还使用几种不同的方式来强调某些信息。按照信息对你的系统的重要程度，它们被标为注记、窍门、重要、小心、或警告。例如：

注记 | 注记
 | 切记，Linux 区分大小写。换一句话说，rose 不是 ROSE 或 rOsE。

窍门 | 窍门
 | 目录 /usr/share/doc/ 包括了关于你的系统上安装的软件包的附加信息。

重要 | 重要
 | 如果你修改了 DHCP 配置文件，这些改变在你重启 DHCP 守护进程之后才会生效。

小心 | 小心
 | 不要以根用户身份来执行日常任务 — 使用一个常规的用户帐号，除非你需要使用根帐号来进行系统管理任务。

警告 | 警告
 | 请只删除必要的红帽企业 Linux 分区。删除其它分区可能会导致数据丢失或受损的系统环境。
后退 | 起点 | 前进
红帽企业 Linux 3 |  | 未来的扩充


硬件和网络保护

后退 前进

附录 A. 硬件和网络保护

在把机器部署成生产环境或把网络连接到互联网之前，你最好首先判定你所在的机构的需要，以及如何把安全需要尽可能透明地考虑在内。因为《红帽企业 Linux 安全指南》的主要目的是解释如何在红帽企业 Linux 上进行系统保安，所以对硬件和物理网络安全性的详细阐述就超出了本书的范围。尽管如此，本章仍旧向你大致介绍了一下在硬件和物理网络方面该如何建立安全政策。其中要考虑的重点是：计算系统的需要和连接性的需要该如何适应整个安全政策。以下较为详细地解释了某些因素。

  • 计算系统（Computing）所包括的不仅仅是运行桌面软件的工作站。现代机构要求巨大的计算能力和高可用性的服务，它们可以包括大型计算机、计算或应用程序群集、功能强大的工作站、和专业化的器械。然而，这些需求却增加了硬件失效、自然灾害、器材破坏和盗窃行为对计算系统所造成的影响。

  • 连接性（Connectivity）是管理员试图连接网络上的异类资源的一种方法。管理员可以使用以太网（带集线器或转换器，使用CAT-5/RJ-45 布线的）、权标环、10-base-2 同轴电缆、甚至无线技术（802.11x）。根据管理员选定的媒介而定，某些媒介和网络拓扑还需要集线器、路由器、转换器、基点站、和存取点之类的补充技术。使用功能正常的网络体系在发生了安全问题时将会简化管理进程。

考虑了这些一般条件后，管理员就可以对实现方法有一个大致了解了。技术技术环境的设计就可以建立在机构的需要和保安的需要上 — 一种会均衡考虑这两种因素的实现方式。

A.1. 安全网络拓扑

LAN 的基础是拓扑（topology），或网络体系。拓扑是 LAN 的物理和逻辑布局，包括所提供的资源、节点间的距离、以及传输媒介。根据机构组织和网络服务的需要，网络实现方法有好几种。每种拓扑都有其优越性以及在设计网络布局时需要考虑的安全问题。

A.1.1. 物理拓扑

电气和电子工程师学会（IEEE）为 LAN 的物理连接定义了三种常用拓扑。

A.1.1.1. 环形拓扑结构

环形（Ring）拓扑结构使用恰好两个连接来连接每个节点。这就构成了一个圆环，每个节点都能被另一个节点访问，要么通过物理连接的最邻近的节点来直接连接，要么通过整个物理环来间接连接。权标环、FDDI、和 SONET 网络就是用这种方式连接的（FDDI 使用双环技术）；然而，使用这种物理拓扑没有公共的以太网连接，因此除了在陈旧的或带有大量已安装节点的机构设置（如大学）中外，环性结构不再被普遍部署。

A.1.1.2. 线形拓扑结构

线形（linear bus）拓扑结构由连接到一个被终结了的主线电缆（backbone）上的节点组成。线形拓扑结构需要最少量的布线和网络设备，因此它是最节省开支的拓扑结构。不过，线形结构要依赖于主线的时刻可用性，因而主线在被维护时或停用时就会成为单一失效点。线形拓扑结构在使用同轴电缆布线和在总线两端使用 50-93 ohm 终止器的端到端 LAN 中被普遍使用。

A.1.1.3. 星形拓扑结构

在星形（Star）拓扑结构中，各节点都连接在一个中心点上，并通过它来传递通信。这个中心点叫做集线器（hub），它既可以是广播的（broadcasted），也可以是转换的（switched）。这种拓扑结构在连接各节点的中央联网硬件中也会存在单一失效点问题。然而，由于这种中央化，影响到整个段或整个 LAN 的联网问题也可以轻易地追寻到它的起源。

A.1.2. 传输考虑

在广播式网络中，某个节点发送的分组将会穿过其它每个节点，直到接收者得到这个分组为止。网络中的每个节点在接收者处理该分组之前都可以收到这个分组。在广播式网络中，所有的分组都使用这种方式被发送。

在转换式网络中，分组不被广播，而是被转换集线器处理。转换集线器使用单播传输原则在发送和接收节点间创建一个“直接”连接。这就避免了给每个节点发送广播的必要性，从而降低交通费用。

转换式网络还会防止分组被蓄意不良的节点或用户截取。在广播式网络中，每个节点都会收到正前往目的地途中的分组，蓄意不良的用户可以把他们的以太网设备设为混杂（promiscuous）模式，接受所有的分组，不管它们的目的地是否是自己。一旦处于混杂模式，一个嗅探器就可以被用来过滤、分析、和重建分组，从而获取口令、个人数据等。精密老练的嗅探器程序还可以把这些信息贮存在文本文件中，甚至把这些信息发送给任意地方（如蓄意不良的用户的电子邮件地址中）。

转换式网络需要一个网络转换器。它是一种代替较传统的、把所有节点连接到一个 LAN 上的集线器的专业化硬件。转换器把所有节点的 MAC 地址贮存在一个内部数据库中。这个数据库被用来执行所有的直接选路。包括 Cisco Systems、Linksys、和 Netgear 在内的几家生产厂商都提供了好几种转换器，它们的功能有：10/100-Base-T 兼容性、吉位以太网支持、以及对冲突检测载波检测多路访问（CSMACSMA/CD）的支持。后者在交通流量较大的网络中使用最为理想，因为它给连接排队，并且会检测到分组在传输过程中是否撞车。

A.1.3. 无线网络

今天的企业中所面临的挑战是可流动性。远程工作人员、现场技术人员、以及主管人员都需要具备可移能力的解决方案，如便携电脑、个人数字助理（PDA）、以及对网络资源的无线存取能力。IEEE 为 802.11 无线规范建立了一个标准制定组。802.11 无线规范为在所有行业间进行无线数据通信建立了标准。当前被使用的标准是 802.11b 规范。

802.11b 和 802.11g 规范实际上是一组管理无许可的 2.4GHz 射频（RF）频谱的无线通信和存取控制的标准（802.11a 使用5GHz 频谱）。这些规范已被 IEEE 核定为标准，而且已有几家厂商开始推销 802.11x 产品和服务。顾客也开始接受该标准来用于小型办公室或家庭办公室（SOHO）网络。其流行性已经从 LAN 延伸到 MAN（城域网），特别是在无线存取点（WAP）密集的地方。使用该标准的还有无线互联网服务提供商（WISP），他们为需要使用宽带互联网访问来远程地从事商务的频繁旅行者提供服务。

802.11x 规范允许你在带有无线 NIC 的节点间进行直接的端到端的连接。这种对节点的松散组织也叫做特定（ad hoc）网络，它是在两个或两个以上的节点间进行快速连接共享的理想选择，但是它也带来了不适合于专用无线连接的可缩放性问题。

更适合于固定结构中的无线访问的解决方案是安装一个或多个连接到传统网络的 WAP，并允许无线节点连接到 WAP 就如同它是位于使用以太网为媒介的网络上一样。WAP 实际上充当连接到它上的节点和整个网络间的桥梁。

A.1.3.1. 802.11x 安全

虽然无线联网在速度和方便性方面都比传统的有线联网媒介要好，它的技术规范也有其局限性，你需要全面考虑。它最重要的局限性是其安全实现。

在成功地部署了 802.11x 网络后，许多管理员会在得意之余忘记了最基本的安全预防措施。由于所有的 802.11x 联网都使用高带 RF 信号来完成，被传输的数据很容易被使用兼容 NIC、类似 NetStumbler 或 Wellenreiter 的无线网络扫描工具、或者是 dsniff 和 snort 之类的常见嗅探工具的用户截取。要防止这种对专用无线网络的非法使用，802.11b 标准使用有线等效保密（WEP）协议。它是在每个节点间或在 AP 和节点间的基于 RC4 的64或128位加密钥匙。该钥匙动态透明地加密和解密进入的分组。然而，要么是出于忘记，要么是出于对性能降低（特别是长途性能）方面的考虑，管理员常常会忽略这个共享钥匙加密方案。在无线网络上启用 WEP 能够大大减少数据被截取的可能性。

红帽企业 Linux 支持来自好几家厂商的多种 802.11x 产品。网络管理工具中包括一个配置无线 NIC 和 WEP 保安的设施。关于使用网络管理工具的信息，请参阅《红帽企业 Linux 系统管理指南》中的“网络配置”这一章。

仅依靠 WEP 仍旧不能够完全阻止意志坚定而又蓄意不良的用户。有些特定工具被刻意用来破译包含无线网络的 RC4 WEP 加密算式，从而推算出共享钥匙。AirSnort 和 WEP Crack 就是这样的应用程序。要警戒它们，管理员应该严格遵守有关使用无线方法来存取保密信息的政策。管理员可以通过把无线连接仅限制在 SSH 或 VPN 之内来加强它们的安全性。SSH 或 VPN 在 WEP 加密之上又加入一个加密层。使用这种政策，网络之外的能够破译 WEP 加密的蓄意不良的用户就必须再破译 VPN 或 SSH 加密才能闯入。而 VPN 或 SSH 的加密方法可以利用三倍强的168位 DES 算式加密（3DES）或专有算式来增强其破译难度。应用这些政策的管理员应该限制使用纯文本协议，如 Telnet 或 FTP，因为口令和数据可以使用前面提到的攻击方法而被截取。

A.1.4. 网络分段和 DMZ

如果管理员想运行可从外部访问的服务，如 HTTP、电子邮件、FTP、和 DNS，推荐你把这些可公开利用的服务在物理上和逻辑上从内部网络中分离。防火墙以及被强化的主机和应用程序是防御临时或偶然入侵者的有效方式。然而，一个孜孜不卷的怪客却总能够找到进入内部网络的途径，如果他们攻击的服务和网络的其它部分位于同一个逻辑路径的话。可从外部访问的服务应该位于被安全行业称为“停火区域”（demilitarized zone，DMZ）的逻辑网络段，来自互联网的进入交通只能够访问那些服务，而且不允许进入内部网络。即便某个蓄意不良的用户攻破了“非军事区”（DMZ）内的某台机器，在另一个网络段内防火墙之后的内部网络也不会受影响。

多数企业都只能从一个有限的可公开选路的 IP 地址集合中提供对外服务，因此管理员可以利用精心设计的防火墙规则来接受、转发、拒绝、或否定分组传输。使用 iptables 或专用的硬件防火墙来实现的防火墙策略允许你编写复杂的选路和转发规则。管理员可以使用它们来把进入的交通疏散到指定地址、指定端口的指定服务，还可以只允许 LAN 使用内部服务，从而防止 IP 假冒。关于实现 iptables 的详情，请参阅第7章 。

后退 | 起点 | 前进
附录 | 上级 | 硬件安全


常用端口

后退 前进

附录 C. 常用端口

下面的表格中列举了包括在红帽企业 Linux 中的服务、守护进程、和程序所使用的最常见的通信端口。该列表还可以在 /etc/services 文件中找到。要查看由互联网号码分派局（IANA）制定的“著名的已注册动态端口”官方列表，请参考以下 URL：

http://www.iana.org/assignments/port-numbers

注记 | 注记
 | “层”是指服务或协议在交通层上使用 TCP 还是 UDP。若没有列举，这个服务或协议就两者都使用。
端口号码 / 层 | 名称 | 注释
1 | tcpmux | TCP 端口服务多路复用
5 | rje | 远程作业入口
7 | echo | Echo 服务
9 | discard | 用于连接测试的空服务
11 | systat | 用于列举连接了的端口的系统状态
13 | daytime | 给请求主机发送日期和时间
17 | qotd | 给连接了的主机发送每日格言
18 | msp | 消息发送协议
19 | chargen | 字符生成服务；发送无止境的字符流
20 | ftp-data | FTP 数据端口
21 | ftp | 文件传输协议（FTP）端口；有时被文件服务协议（FSP）使用
22 | ssh | 安全 Shell（SSH）服务
23 | telnet | Telnet 服务
25 | smtp | 简单邮件传输协议（SMTP）
37 | time | 时间协议
39 | rlp | 资源定位协议
42 | nameserver | 互联网名称服务
43 | nicname | WHOIS 目录服务
49 | tacacs | 用于基于 TCP/IP 验证和访问的终端访问控制器访问控制系统
50 | re-mail-ck | 远程邮件检查协议
53 | domain | 域名服务（如 BIND）
63 | whois++ | WHOIS++，被扩展了的 WHOIS 服务
67 | bootps | 引导协议（BOOTP）服务；还被动态主机配置协议（DHCP）服务使用
68 | bootpc | Bootstrap（BOOTP）客户；还被动态主机配置协议（DHCP）客户使用
69 | tftp | 小文件传输协议（TFTP）
70 | gopher | Gopher 互联网文档搜寻和检索
71 | netrjs-1 | 远程作业服务
72 | netrjs-2 | 远程作业服务
73 | netrjs-3 | 远程作业服务
73 | netrjs-4 | 远程作业服务
79 | finger | 用于用户联系信息的 Finger 服务
80 | http | 用于万维网（WWW）服务的超文本传输协议（HTTP）
88 | kerberos | Kerberos 网络验证系统
95 | supdup | Telnet 协议扩展
101 | hostname | SRI-NIC 机器上的主机名服务
102 | iso-tsap | ISO 开发环境（ISODE）网络应用
105 | csnet-ns | 邮箱名称服务器；也被 CSO 名称服务器使用
107 | rtelnet | 远程 Telnet
109 | pop2 | 邮局协议版本2
110 | pop3 | 邮局协议版本3
111 | sunrpc | 用于远程命令执行的远程过程调用（RPC）协议，被网络文件系统（NFS）使用
113 | auth | 验证和身份识别协议
115 | sftp | 安全文件传输协议（SFTP）服务
117 | uucp-path | Unix 到 Unix 复制协议（UUCP）路径服务
119 | nntp | 用于 USENET 讨论系统的网络新闻传输协议（NNTP）
123 | ntp | 网络时间协议（NTP）
137 | netbios-ns | 在红帽企业 Linux 中被 Samba 使用的 NETBIOS 名称服务
138 | netbios-dgm | 在红帽企业 Linux 中被 Samba 使用的 NETBIOS 数据报服务
139 | netbios-ssn | 在红帽企业 Linux 中被 Samba 使用的NET BIOS 会话服务
143 | imap | 互联网消息存取协议（IMAP）
161 | snmp | 简单网络管理协议（SNMP）
162 | snmptrap | SNMP 的陷阱
163 | cmip-man | 通用管理信息协议（CMIP）
164 | cmip-agent | 通用管理信息协议（CMIP）
174 | mailq | MAILQ
177 | xdmcp | X 显示管理器控制协议
178 | nextstep | NeXTStep 窗口服务器
179 | bgp | 边界网络协议
191 | prospero | Cliffod Neuman 的 Prospero 服务
194 | irc | 互联网中继聊天（IRC）
199 | smux | SNMP UNIX 多路复用
201 | at-rtmp | AppleTalk 选路
202 | at-nbp | AppleTalk 名称绑定
204 | at-echo | AppleTalk echo 服务
206 | at-zis | AppleTalk 区块信息
209 | qmtp | 快速邮件传输协议（QMTP）
210 | z39.50 | NISO Z39.50 数据库
213 | ipx | 互联网络分组交换协议（IPX），被 Novell Netware 环境常用的数据报协议
220 | imap3 | 互联网消息存取协议版本3
245 | link | LINK
347 | fatserv | Fatmen 服务器
363 | rsvp_tunnel | RSVP 隧道
369 | rpc2portmap | Coda 文件系统端口映射器
370 | codaauth2 | Coda 文件系统验证服务
372 | ulistproc | UNIX Listserv
389 | ldap | 轻型目录存取协议（LDAP）
427 | svrloc | 服务位置协议（SLP）
434 | mobileip-agent | 可移互联网协议（IP）代理
435 | mobilip-mn | 可移互联网协议（IP）管理器
443 | https | 安全超文本传输协议（HTTP）
444 | snpp | 小型网络分页协议
445 | microsoft-ds | 通过 TCP/IP 的服务器消息块（SMB）
464 | kpasswd | Kerberos 口令和钥匙改换服务
468 | photuris | Photuris 会话钥匙管理协议
487 | saft | 简单不对称文件传输（SAFT）协议
488 | gss-http | 用于 HTTP 的通用安全服务（GSS）
496 | pim-rp-disc | 用于协议独立的多址传播（PIM）服务的会合点发现（RP-DISC）
500 | isakmp | 互联网安全关联和钥匙管理协议（ISAKMP）
535 | iiop | 互联网内部对象请求代理协议（IIOP）
538 | gdomap | GNUstep 分布式对象映射器（GDOMAP）
546 | dhcpv6-client | 动态主机配置协议（DHCP）版本6客户
547 | dhcpv6-server | 动态主机配置协议（DHCP）版本6服务
554 | rtsp | 实时流播协议（RTSP）
563 | nntps | 通过安全套接字层的网络新闻传输协议（NNTPS）
565 | whoami | whoami
587 | submission | 邮件消息提交代理（MSA）
610 | npmp-local | 网络外设管理协议（NPMP）本地 / 分布式排队系统（DQS）
611 | npmp-gui | 网络外设管理协议（NPMP）GUI / 分布式排队系统（DQS）
612 | hmmp-ind | HMMP 指示 / DQS
631 | ipp | 互联网打印协议（IPP）
636 | ldaps | 通过安全套接字层的轻型目录访问协议（LDAPS）
674 | acap | 应用程序配置存取协议（ACAP）
694 | ha-cluster | 用于带有高可用性的群集的心跳服务
749 | kerberos-adm | Kerberos 版本5（v5）的“kadmin”数据库管理
750 | kerberos-iv | Kerberos 版本4（v4）服务
765 | webster | 网络词典
767 | phonebook | 网络电话簿
873 | rsync | rsync 文件传输服务
992 | telnets | 通过安全套接字层的 Telnet（TelnetS）
993 | imaps | 通过安全套接字层的互联网消息存取协议（IMAPS）
994 | ircs | 通过安全套接字层的互联网中继聊天（IRCS）
995 | pop3s | 通过安全套接字层的邮局协议版本3（POPS3）

表 C-1. 著名端口

以下端口是 UNIX 特有的，涉及了从电子邮件到验证不等的服务。在方括号内的名称（如 [service]）是服务的守护进程名称或它的常用别名。

端口号码 / 层 | 名称 | 注释
512/tcp | exec | 用于对远程执行的进程进行验证
512/udp | biff [comsat] | 异步邮件客户（biff）和服务（comsat）
513/tcp | login | 远程登录（rlogin）
513/udp | who [whod] | 登录的用户列表
514/tcp | shell [cmd] | 不必登录的远程 shell（rshell）和远程复制（rcp）
514/udp | syslog | UNIX 系统日志服务
515 | printer [spooler] | 打印机（lpr）假脱机
517/udp | talk | 远程对话服务和客户
518/udp | ntalk | 网络交谈（ntalk），远程对话服务和客户
519 | utime [unixtime] | UNIX 时间协议（utime）
520/tcp | efs | 扩展文件名服务器（EFS）
520/udp | router [route, routed] | 选路信息协议（RIP）
521 | ripng | 用于互联网协议版本6（IPv6）的选路信息协议
525 | timed [timeserver] | 时间守护进程（timed）
526/tcp | tempo [newdate] | Tempo
530/tcp | courier [rpc] | Courier 远程过程调用（RPC）协议
531/tcp | conference [chat] | 互联网中继聊天
532 | netnews | Netnews
533/udp | netwall | 用于紧急广播的 Netwall
540/tcp | uucp [uucpd] | Unix 到 Unix 复制服务
543/tcp | klogin | Kerberos 版本5（v5）远程登录
544/tcp | kshell | Kerberos 版本5（v5）远程 shell
548 | afpovertcp | 通过传输控制协议（TCP）的 Appletalk 文件编制协议（AFP）
556 | remotefs [rfs_server, rfs] | Brunhoff 的远程文件系统（RFS）

表 C-2. UNIX 特有的端口

表 C-3列举了由网络和软件社区向 IANA 提交的要在端口号码列表中正式注册的端口。

端口号码 / 层 | 名称 | 注释
1080 | socks | SOCKS 网络应用程序代理服务
1236 | bvcontrol [rmtcfg] | Garcilis Packeten 远程配置服务器[a]
1300 | h323hostcallsc | H.323 电话会议主机电话安全
1433 | ms-sql-s | Microsoft SQL 服务器
1434 | ms-sql-m | Microsoft SQL 监视器
1494 | ica | Citrix ICA 客户
1512 | wins | Microsoft Windows 互联网名称服务器
1524 | ingreslock | Ingres 数据库管理系统（DBMS）锁定服务
1525 | prospero-np | 无特权的 Prospero
1645 | datametrics [old-radius] | Datametrics / 从前的 radius 项目
1646 | sa-msg-port [oldradacct] | sa-msg-port / 从前的 radacct 项目
1649 | kermit | Kermit 文件传输和管理服务
1701 | l2tp [l2f] | 第2层隧道服务（LT2P） / 第2层转发（L2F）
1718 | h323gatedisc | H.323 电讯守门装置发现机制
1719 | h323gatestat | H.323 电讯守门装置状态
1720 | h323hostcall | H.323 电讯主持电话设置
1758 | tftp-mcast | 小文件 FTP 组播
1759 | mtftp | 组播小文件 FTP（MTFTP）
1789 | hello | Hello 路由器通信端口
1812 | radius | Radius 拨号验证和记帐服务
1813 | radius-acct | Radius 记帐
1911 | mtp | Starlight 网络多媒体传输协议（MTP）
1985 | hsrp | Cisco 热备用路由器协议
1986 | licensedaemon | Cisco 许可管理守护进程
1997 | gdp-port | Cisco 网关发现协议（GDP）
2049 | nfs [nfsd] | 网络文件系统（NFS）
2102 | zephyr-srv | Zephyr 通知传输和发送服务器
2103 | zephyr-clt | Zephyr serv-hm 连接
2104 | zephyr-hm | Zephyr 主机管理器
2401 | cvspserver | 并行版本系统（CVS）客户 / 服务器操作
2430/tcp | venus | 用于 Coda 文件系统（codacon 端口）的 Venus 缓存管理器
2430/udp | venus | 用于 Coda 文件系统（callback/wbc interface 界面）的 Venus 缓存管理器
2431/tcp | venus-se | Venus 传输控制协议（TCP）的副作用
2431/udp | venus-se | Venus 用户数据报协议（UDP）的副作用
2432/udp | codasrv | Coda 文件系统服务器端口
2433/tcp | codasrv-se | Coda 文件系统 TCP 副作用
2433/udp | codasrv-se | Coda 文件系统 UDP SFTP 副作用
2600 | hpstgmgr [zebrasrv] | HPSTGMGR；Zebra 选路[b]
2601 | discp-client [zebra] | discp 客户；Zebra 集成的 shell
2602 | discp-server [ripd] | discp 服务器；选路信息协议守护进程（ripd）
2603 | servicemeter [ripngd] | 服务计量；用于 IPv6 的 RIP 守护进程
2604 | nsc-ccs [ospfd] | NSC CCS；开放式短路径优先守护进程（ospfd）
2605 | nsc-posa | NSC POSA；边界网络协议守护进程（bgpd）
2606 | netmon [ospf6d] | Dell Netmon；用于 IPv6 的 OSPF 守护进程（ospf6d）
2809 | corbaloc | 公共对象请求代理体系（CORBA）命名服务定位器
3130 | icpv2 | 互联网缓存协议版本2（v2）；被 Squid 代理缓存服务器使用
3306 | mysql | MySQL 数据库服务
3346 | trnsprntproxy | Trnsprnt 代理
4011 | pxe | 执行前环境（PXE）服务
4321 | rwhois | 远程 Whois（rwhois）服务
4444 | krb524 | Kerberos 版本5（v5）到版本4（v4）门票转换器
5002 | rfe | 无射频以太网（RFE）音频广播系统
5308 | cfengine | 配置引擎（Cfengine）
5999 | cvsup [CVSup] | CVSup 文件传输和更新工具
6000 | x11 [X] | X 窗口系统服务
7000 | afs3-fileserver | Andrew 文件系统（AFS）文件服务器
7001 | afs3-callback | 用于给缓存管理器回电的 AFS 端口
7002 | afs3-prserver | AFS 用户和组群数据库
7003 | afs3-vlserver | AFS 文件卷位置数据库
7004 | afs3-kaserver | AFS Kerberos 验证服务
7005 | afs3-volser | AFS 文件卷管理服务器
7006 | afs3-errors | AFS 错误解释服务
7007 | afs3-bos | AFS 基本监查进程
7008 | afs3-update | AFS 服务器到服务器更新器
7009 | afs3-rmtsys | AFS 远程缓存管理器服务
9876 | sd | 会话指引器
10080 | amanda | 高级 Maryland 自动网络磁盘归档器（Amanda）备份服务
11371 | pgpkeyserver | 良好隐私（PGP） / GNU 隐私卫士（GPG）公钥服务器
11720 | h323callsigalt | H.323 调用信号交替
13720 | bprd | Veritas NetBackup 请求守护进程（bprd）
13721 | bpdbm | Veritas NetBackup 数据库管理器（bpdbm）
13722 | bpjava-msvc | Veritas NetBackup Java / Microsoft Visual C++ (MSVC) 协议
13724 | vnetd | Veritas 网络工具
13782 | bpcd | Vertias NetBackup
13783 | vopied | Veritas VOPIED 协议
22273 | wnn6 [wnn4] | 假名/汉字转换系统[c]
26000 | quake | Quake（以及相关的）多人游戏服务器
26208 | wnn6-ds |
33434 | traceroute | Traceroute 网络跟踪工具
注: a. /etc/services 中的注释如下：端口1236被注册为“bvcontrol”，但是它也被 Gracilis Packeten 远程配置服务器使用。正式名称被列为主要名称，未注册的名称被列为别名。 b. 在 /etc/services 中的注释：端口 2600 到 2606 被 zebra 软件包未经注册而使用。主要名称是被注册的名称，被 zebra 使用的未注册名称被列为别名。 c. /etc/services 文件中的注释：该端口被注册为 wnn6，但是还在 FreeWnn 软件包中使用了未注册的“wnn4”。

表 C-3. 注册的端口

表 C-4显示了一个和数据报传递协议（DDP）有关的端口列表。DDP 在 AppleTalk 网络上被使用。

端口号码 / 层 | 名称 | 注释
1/ddp | rtmp | 路由表管理协议
2/ddp | nbp | 名称绑定协议
4/ddp | echo | AppleTalk Echo 协议
6/ddp | zip | 区块信息协议

表 C-4. 数据报传递协议端口

表 C-5是和 Kerberos 网络验证协议相关的端口列表。在标记的地方，v5 代表 Kerberos 版本5协议。注意，这些端口没有在 IANA 注册。

端口号码 / 层 | 名称 | 注释
751 | kerberos_master | Kerberos 验证
752 | passwd_server | Kerberos 口令（kpasswd）服务器
754 | krb5_prop | Kerberos v5 从属传播
760 | krbupdate [kreg] | Kerberos 注册
1109 | kpop | Kerberos 邮局协议（KPOP）
2053 | knetd | Kerberos 多路分用器
2105 | eklogin | Kerberos v5 加密的远程登录（rlogin）

表 C-5. Kerberos（工程 Athena/MIT）端口

表 C-6是一个未注册的端口列表。这些端口可能被安装在你的红帽企业 Linux 系统上的服务或协议使用，或者它们是在红帽企业 Linux 和运行其它操作系统的机器通信所必需的端口。

端口号码 / 层 | 名称 | 注释
15/tcp | netstat | 网络状态（netstat）
98/tcp | linuxconf | Linuxconf Linux 管理工具
106 | poppassd | 邮局协议口令改变守护进程（POPPASSD）
465/tcp | smtps | 通过安全套接字层的简单邮件传输协议（SMTPS）
616/tcp | gii | 使用网关的（选路守护进程）互动界面
808 | omirr [omirrd] | 联机镜像（Omirr）文件镜像服务
871/tcp | supfileserv | 软件升级协议（SUP）服务器
901/tcp | swat | Samba 万维网管理工具（SWAT）
953 | rndc | Berkeley 互联网名称域版本9（BIND 9）远程名称守护进程配置工具
1127 | sufiledbg | 软件升级协议（SUP）调试
1178/tcp | skkserv | 简单假名到汉字（SKK）日文输入服务器
1313/tcp | xtel | 法国 Minitel 文本信息系统
1529/tcp | support [prmsd, gnatsd] | GNATS 错误跟踪系统
2003/tcp | cfinger | GNU Finger 服务
2150 | ninstall | 网络安装服务
2988 | afbackup | afbackup 客户-服务器备份系统
3128/tcp | squid | Squid 万维网代理缓存
3455 | prsvp | RSVP 端口
5432 | postgres | PostgreSQL 数据库
4557/tcp | fax | FAX 传输服务（旧服务）
4559/tcp | hylafax | HylaFAX 客户-服务器协议（新服务）
5232 | sgi-dgl | SGI 分布式图形库
5354 | noclog | NOCOL 网络操作中心记录守护进程（noclogd）
5355 | hostmon | NOCOL 网络操作中心主机监视
5680/tcp | canna | Canna 日文字符输入界面
6010/tcp | x11-ssh-offset | 安全 Shell（SSH）X11 转发偏移
6667 | ircd | 互联网中继聊天守护进程（ircd）
7100/tcp | xfs | X 字体服务器（XFS）
7666/tcp | tircproxy | Tircproxy IRC 代理服务
8008 | http-alt | 超文本传输协议（HTTP）的另一选择
8080 | webcache | 万维网（WWW）缓存服务
8081 | tproxy | 透明代理
9100/tcp | jetdirect [laserjet, hplj] | Hewlett-Packard (HP) JetDirect 网络打印服务
9359 | mandelspawn [mandelbrot] | 用于 X 窗口系统的并行 Mandelbrot 生成程序
10081 | kamanda | 使用 Kerberos 的 Amanda 备份服务
10082/tcp | amandaidx | Amanda 备份服务
10083/tcp | amidxtape | Amanda 备份服务
20011 | isdnlog | 综合业务数字网（ISDN）登录系统
20012 | vboxd | ISDN 音箱守护进程（vboxd）
22305/tcp | wnn4_Kr | kWnn 韩文输入系统
22289/tcp | wnn4_Cn | cWnn 中文输入系统
22321/tcp | wnn4_Tw | tWnn 中文输入系统（台湾）
24554 | binkp | Binkley TCP/IP Fidonet 邮寄程序守护进程
27374 | asp | 地址搜索协议
60177 | tfido | Ifmail FidoNet 兼容邮寄服务
60179 | fido | FidoNet 电子邮件和新闻网络

表 C-6. 未注册的端口

后退 | 起点 | 前进
常见的漏洞利用和攻击 | 上级 | 索引


事件响应

后退 前进

第 10章 . 事件响应

如果系统安全被危及了，就有必要进行事件响应（incident response）。快速有效地对问题采取相应的行动是安全组的职责。

10.1. 事件响应的定义

事件响应是对问题和事件的有计划的反应。从信息安全的角度讲，它是指安全小组在某个黑客已经攻破了防火墙，当前正在嗅探内部网络的交通时所采取的行动。该事件是对安全性的一种破坏。对它的响应就应该包括：安全小组在试图保证数据完好性的同时如何反应；他们采取哪些行动来减少损失；以及他们何时能够恢复资源。

想一想你自己所在的机构，想一想它在各方各面上有多大程度要依赖于科技和计算机系统。如果其中出现了漏洞或弱点，想像一下潜在的灾难性结果。除了最明显的系统停用和数据失窃以外，还可能会出现数据损害、身份失窃（从在线人事记录中）、消极媒介宣传、甚至由于顾客和商业伙伴在获悉攻击真相后采取消极态度所导致的灾难性财政结果。

对已往安全破坏（内部和外部）的研究表明，安全破坏有时会导致公司破产。安全破坏会使资源不可用，还会导致数据被损或被窃。但是我们不能忽略那些很难用金钱来衡量的问题，如消极宣传。要真正了解有效的事件响应的重要性，组织机构必须要计算安全破坏会给它带来的损失，以及它会如何短期和长期地受其影响。

后退 | 起点 | 前进
基于网络的 IDS | 上级 | 制定事件响应计划


攻击者和弱点

后退 前进

第 2章 . 攻击者和弱点

为了设计和实现一个良好的安全策略，我们首先要明确激发攻击者决意攻击和破坏系统的原因所在。但是在详细阐明这些问题前，我们必须首先定义识别攻击者时所用的术语。

2.1. 黑客简明历史

黑客（hacker）这个术语的现代意义起源于1960年的麻省理工学院（MIT）技术模型铁路俱乐部。这个俱乐部设计比例较大、细节逼真的火车模型。“黑客”被用来称呼那些发现了聪明技巧或问题的绕行措施的俱乐部成员。

从那以后，“黑客”这个术语就被用来描述从计算机迷到具有天赋的编程员之类的人士。多数黑客的共通之处是他们对计算机系统和网络的自发的探索之心。开源软件开发者经常认为自己和他们的同事是黑客，并且把这个称谓当作一种尊称。

典型的黑客都遵守一种黑客道德（hacker ethic）。它要求黑客必须追求专门知识和技能，和社区分享这些知识和技能是每个黑客的职责。在追求知识的过程中，某些黑客会从规避计算机系统的安全控制的学术挑战中获得乐趣。由于这个原因，新闻媒界经常使用“黑客”这个术语来描述那些蓄意地、带有犯罪意图的非法进入系统和网络的人。描述这类人的更恰当的用语应该是怪客（cracker） — 被黑客在八十年代中期创造出来的术语，用来区分这两个社区。

2.1.1. 灰度

寻找和利用系统和网络弱点的人被区分成不同种类。这种类别是按照他们在进行安全弱点调查时所“戴”的帽子颜色来区分的。帽子的颜色代表了他们的企图。

白帽黑客（white hat hacker）测试网络和系统的性能来判定它们能够承受入侵的强弱程度。通常，白帽黑客攻击他们自己的系统，或被聘请来攻击客户的系统以便进行安全审查。学术研究人员和专职安全顾问就属于白帽黑客。

黑帽黑客（black hat hacker）是怪客的同义词。通常来说，怪客并不注重于入侵系统的编程或学术方面。他们经常为了个人利益而依靠现成的攻击程序和著名的系统漏洞弱点来发现保密信息，或破坏目标系统或网络。

另一方面，灰帽黑客（grey hat hacker）在多数情况下都具备白帽黑客的技术和意图，但是偶尔也使用这种知识来进行不太光明正大的行径。灰帽黑客可以被认为是偶尔会为个人企图而戴着黑帽的白帽黑客。

典型的灰帽黑客会遵循另一种黑客道德。他认为闯入系统是无可非议的，只要不进行盗窃或破坏保密信息行为就可以。不过，某些人可能会说，闯入系统本身就是不道德的。

不管入侵者的意图如何，了解怪客会试图利用的漏洞这一点都很重要。本章的剩余部分将会集中讨论这些问题。

后退 | 起点 | 前进
结论 | 上级 | 对网络安全的威胁


弱点测定

后退 前进

第 8章 . 弱点测定

只要有足够的时间、资源、和动力，怪客能够闯入几乎所有系统。最终，所有的安全手续和可用的技术都无法保证系统能免受入侵威胁。路由器能够帮助保护到互联网的网关的安全性；防火墙能够帮助保护网络边缘的安全性；虚拟专用网能够在加密流中安全地传递数据；入侵检测系统能够在出现蓄意活动的时候向你发出警告。可是，以上这些技术的成功与否都有很多依赖因素，这些因素有：

  • 负责配置、监视和维护相关技术的职员的专业程度。

  • 进行快速有效地更新或给服务和内核打补丁的能力。

  • 负责时刻警戒网络动静的职员的能力。

数据系统和技术的动态性使得保护公司企业资源的任务变得相当复杂。这种复杂性又给寻求各方面的系统专家带来一定难度。虽说要找到在信息安全的许多领域内都有渊博知识的人员是可能的，但是要保留这些多领域内的专家却不容易。这主要是因为信息安全的每一领域都要求其专业人士全身投入和时刻关注。而且信息安全本身也不是一种原地不动、停滞不前的行业。

8.1. 知己知彼

假设你是某个企业网络的管理员。这类网络通常包括操作系统、应用程序、服务器、网络监视器、防火墙、入侵检测系统等等。现在，想像一下要在以上每个方面都保持更新状态。鉴于今天的软件和网络环境的复杂性，程序漏洞和错误肯定存在。使用补丁和勘误来保持整个网络的更新状态对于拥有混合系统的大机构来说不能不算是一项繁杂冗长的任务。

由于对专业人才需求方面的严格性，以及保持更新状态任务的艰巨性，所以不该发生的事件难免会发生，系统的防守难免会被攻破，数据也难免遭到破坏，服务也会被迫中断。

要增强保安技术，协助对系统、网络和数据的保护，你应该想敌人所想，以怪客的角度来检测系统的弱点。对自己的系统及网络资源进行防范性弱点测定有助于发现潜在的问题，这些问题可以在攻击者找到利用方法之前被解决。

弱点测定是对你的网络和系统安全的内部审查；其结果会揭示你的网络的保密性、完好性、以及可用性情况（如第 1.1.4 节中所解释）。典型的弱点测定从勘察开始。勘察过程会收集有关目标系统和资源的重要数据。这之后的筹备阶段会检查目标系统中的所有已知弱点。随后的报告阶段会把所有的发现按威胁性的严重程度被分成高、中、低几级；最后，提高安全性（或减小弱点所造成的潜在威胁）的方法会被讨论。

如果你要你的住所进行安全检查，你很可能会检查一下所有的门户是否关闭上锁了。你还会检查每扇窗户，确定它们也被关紧插严。系统、网络和电子数据的保安方法也是基于相同的原则。恶意用户是数据盗贼。关注他们使用的工具、他们的所思所想、以及他们的动机和出发点，你就能够迅速地对他们的行动做出反应。

后退 | 起点 | 前进
测定你的安全性 | 上级 | 测定和测试


安全更新

后退 前进

第 3章 . 安全更新

当发现了安全弱点后，你必须更新受到影响的软件以便把潜在的安全威胁限制在一定范围内。如果该软件是目前支持的红帽企业 Linux 发行版本的一部分，Red Hat, Inc. 会保证尽快地发行修正弱点的更新软件包。在某个安全漏洞被宣布的同时通常会附带修正它的补丁（或源码）。然后，该补丁就会被应用到红帽企业 Linux 软件包中，当它被红帽的质检组测试后就会作为勘误更新而被发行。然而，如果安全漏洞在宣布的时候没有附带补丁，某个红帽开发人员就会和该软件的维护者合作来修正这个问题。当问题被修正后，该软件包会被测试并作为勘误更新而发行。

如果和你使用的软件有关的勘误更新被发行了，强烈建议你尽快地更新相关软件包，以便尽量缩短系统上存有潜在威胁的时间。

3.1. 更新软件包

在更新系统上的软件包时，从可信任源下载它们至关重要。某个攻击者可以轻而易举地使用修正问题的同一版本号码来重新建构某个软件包，却在其中隐藏另一种安全漏洞，然后在互联网上发行。如果这样的情况发生了，使用根据原始 RPM 来校验软件包这一方法就检测不到这个漏洞。因此，从可信任源（如 Red Hat, Inc.）下载 RPM，并检查软件包的签名来校验它的完好性这一点至关重要。

红帽提供两种检索安全勘误更新的方法：

  1. 从红帽网络下载它们。

  2. 从红帽勘误网站下载它们。

3.1.1. 使用红帽网络

红帽网络允许你自动化大部分更新进程。它会判定哪些软件包是你的系统必需的；从一个安全仓库中下载它们；校验 RPM 签名来确定它们没有被篡改；然后更新它们。软件包安装可以立即发生，也可以被安排在某一特定时间段内进行。

对于每台要更新的机器，红帽网络都需要一份系统配置文件。系统配置文件中包含和系统相关的硬件和软件信息。该信息会被保密，绝不会泄漏给他人。它仅被用来判定每个系统上应该使用哪些勘误更新。没有它，红帽网络无法判定系统所需的更新。当安全勘误（或任何一种类型的勘误）被发行后，红帽网络会发送一份电子邮件，其中不仅描述了该勘误，也列举了一系列受到影响的系统。要应用更新，使用红帽更新代理或通过 http://rhn.redhat.com 网站来调度要更新的软件包。

窍门 | 窍门
 | 红帽企业 Linux 中包括了红帽网络更新通知工具。它是一个简便的面板图标，在出现了适用于红帽企业 Linux 系统的更新后会显示可视的警告。关于这个小程序的详情，请参考以下 URL：http://rhn.redhat.com/help/basic/applet.html

要了解更多使用红帽网络的益处，请参考《红帽网络参考指南》。它位于 http://www.redhat.com/docs/manuals/RHNetwork/。你还可以访问 http://rhn.redhat.com。

重要 | 重要
 | 在安装任何安全勘误之前，请确定阅读包括在勘误报告内的特殊说明，并正确地执行它们。关于如何应用勘误更新的常规说明，请参阅第 3.1.3 节。

3.1.2. 使用红帽勘误网站

当安全勘误报告被发行时，它们被出版在红帽勘误网页：http://www.redhat.com/apps/support/errata/。从这一页上为你的系统选择产品和版本，然后选择网页上方的 security 按钮来只显示红帽企业 Linux 安全顾问。如果某个安全顾问中的概要所描述的是用在你的系统上的某个软件包，点击概要来阅读详情。

详情页描述了该安全漏洞，以及若要修正这个漏洞，除了升级软件包之外还必须要执行的特殊说明。

要下载更新软件包，点击软件包的名称，把它们保存在硬盘驱动器上。极力推荐你创建一个新目录，如 /tmp/updates，然后把所有的下载软件包放置在其中。

所有的红帽企业 Linux 软件包都使用 Red Hat, Inc. GPG 公钥签名。红帽企业 Linux 中的 RPM 工具会在安装软件包前自动校验它的 GPG 签名。如果你没有安装 Red Hat, Inc. GPG 公钥，请从一个安全、静态的位置（如红帽企业 Linux 安装光盘）上安装它。

假定光盘被挂载在 /mnt/cdrom，使用以下命令来把它导入到你的钥匙圈上：

rpm --import /mnt/cdrom/RPM-GPG-KEY

要显示所有已安装的用于 RPM 校验的公钥列表，执行以下命令：

rpm -qa gpg-pubkey*

Red Hat, Inc. 公钥的输出会包括：

gpg-pubkey-db42a60e-37ea5438

要显示特定公钥的细节，使用 rpm -qi 命令，和前一命令的输出。在这个例子中是：

rpm -qi gpg-pubkey-db42a60e-37ea5438

在安装 RPM 文件前校验它的签名这一个步骤至关重要。只有这样才能确保这些文件没有从 Red Hat, Inc. 软件包的发行版本中被篡改。要立刻校验所有已下载的软件包，使用以下命令：

rpm -K /tmp/updates/*.rpm

对于每个软件包来说，如果 GPG 公钥校验成功，它应该在输出中返回 gpg OK。

校验了 GPG 公钥，并下载了所有和勘误报告有关的软件包后，在 shell 提示下以根用户身份安装它们。

对多数软件包（除了内核软件包外）来说，你可以使用以下命令来安全地安装：

rpm -Uvh /tmp/updates/*.rpm

对于内核软件包来说，建议你使用以下命令：

rpm -ivh /tmp/updates/<kernel-package>

把前一个例子中的 <kernel-package> 改成内核 RPM 的名称。

一旦系统使用新内核被安全引导后，你可以使用以下命令来删除老内核：

rpm -e <old-kernel-package>

把前一个例子中的 <old-kernel-package> 改成老内核 RPM 的名称。

注记 | 注记
 | 删除老内核并不必要。

重要 | 重要
 | 在安装任何安全勘误之前，请确定阅读包括在勘误报告内的特殊说明，并正确地执行它们。关于如何应用勘误更新的常规说明，请参阅第 3.1.3 节。

3.1.3. 应用改变

通过红帽网络或红帽勘误网站下载并安装了安全勘误后，停用旧有软件、使用新软件这一点很重要。怎么做到这一点要根据你的软件类型而定。以下的列表详细列举了软件的一般类别，并为更新软件包后使用被更新的版本提供了说明。

注记 | 注记
 | 通常说来，重新引导系统是保证所用软件版本是最新版本的最肯定方法；但是，系统管理员并不总是能够使用这个办法。

应用程序

用户空间的应用程序是能够被系统用户引发的任何程序。通常，这类程序只有在某用户、脚本、或自动化任务工具启动它们时才被使用，而且并不持续运行很久。

当这类用户空间的应用程序被更新后，停运系统上该程序的所有实例，然后再重新启动它来使用更新的版本。

内核

内核是红帽企业 Linux 操作系统的核心软件组成部分。它管理到内存、处理器和外设的使用，还进行所有的任务调度。

由于这种核心角色，你不可能不停运计算机而重新启动内核。因此，在系统被重新引导前，更新的内核版本就无法被使用。

共享库

共享库是编码单元的集合，例如 glibc 被许多应用程序和服务所使用。使用共享库的应用程序通常在初始化的时候载入共享编码，因此使用已更新的共享库的应用程序必须停运并被重新启动。

要判定哪些链接到某个共享库的应用程序正在运行，使用 lsof 命令，如以下所示：

lsof /usr/lib/libwrap.so*

该命令返回一个使用 TCP 会绕程序来进行主机访问控制的所有正在运行的程序的列表。因此，如果 tcp_wrappers 软件包被更新了，所有列举了的程序都必须被停运并被重新启动。

SysV 服务

SysV 服务是在引导过程中启动的持续性服务器程序。SysV 服务的例子包括：sshd、vsftpd、和 xinetd。

因为只要机器被启动了，这些程序就通常持久性地滞留在内存中，所以每个更新了的 SysV 服务在软件包升级后必须被停运并重新启动。你可以使用服务配置工具来做到，或登录到根用户的 shell，然后使用 /sbin/service 命令，如以下所示：

/sbin/service <service-name> restart

在前面的例子中，把 <service-name> 改成服务的名称，如 sshd。

关于服务配置工具的详细信息，请参阅 《红帽企业 Linux 系统管理指南》的“控制对服务的访问”这一章。

xinetd 服务

由 xinetd 这个超级服务控制的服务只有在有活跃连接时才运行。由 xinetd 控制的服务包括：Telnet、IMAP、和 POP3。

因为这些服务的新实例是在每次 xinetd 收到新请求时被启动的，升级后的连接就会由已更新的软件来处理。然而，如果由 xinetd 控制的服务在被升级时还存在着一些活跃连接的话，这些连接就会由软件的老版本处理。

要停止某个 xinetd 控制的服务的早期实例，升级和该服务相应的软件包，然后使用 ps 命令来判定该进程是否在运行，再使用 kill 或 killall 命令来停运该服务的所有当前实例。

例如：如果 imap 软件包的安全勘误被发行了，升级这些软件包，然后以根用户身份在 shell 提示下键入以下命令：

ps -aux | grep imap

该命令返回所有活跃的 IMAP 会话。使用以下命令可以终止单个会话：

kill -9 <PID>

在前面的例子中，把 <PID> 替换为 IMAP 会话的进程号码。

要杀死所有活跃的 IMAP 会话，使用以下命令：

killall imapd

关于 xinetd 的一般信息，请参阅《红帽企业 Linux 参考指南》的“TCP 会绕程序和 xinetd”这一章。

后退 | 起点 | 前进
配置红帽企业 Linux 的保安系统 | 上级 | 工作站保安


服务器安全

后退 前进

第 5章 . 服务器安全

当系统被用作公共网络的服务器时，它就会成为攻击对象。正因此，对于系统管理员来说，加强系统防御和封闭某些服务就显得至关重要。

在深入研究具体问题之前，请回顾一下以下用来增强服务器安全性的常识：

  • 保持所有服务的更新状态来防御最新出现的威胁。

  • 尽量使用安全协议。

  • 在每台机器上尽量只使用一种网络服务的类型。

  • 密切监视所有服务器上的可疑活动。

5.1. 使用 TCP 会绕程序和 xinetd 来维护服务安全

TCP 会绕程序（TCP wrappers）为多项服务提供访问控制。多数现代的网络服务，如 SSH、Telnet 和 FTP，都使用 TCP 会绕程序。该会绕程序位于进入请求和被请求服务之间。

当与 xinetd 一起使用时，TCP 会绕程序的优越性就更为显著。xinetd 是一种提供附加的访问、记录、关联、重导向、和资源利用控制的超级服务。

窍门 | 窍门
 | 使用 TCP 会绕程序、xinetd、以及 IPTables 防火墙来创建服务访问控制的冗余性是一个好主意。关于使用 IPTables 命令来实现防火墙的详细信息，请参阅第7章 。

有关配置 TCP 会绕程序和 xinetd 的更多信息可以在《红帽企业 Linux 参考指南》的“TCP 会绕程序和 xinetd”这一章中找到。

以下各小节假定你已掌握了各个课题的基础知识，因此只集中讨论特定的安全选项。

5.1.1. 使用 TCP 会绕程序来强化安全

TCP 会绕程序的能力不仅局限于拒绝对服务的访问。本节会向您解释如何使用它来发送连接横幅、警告来自特定主机的攻击、以及如何使用它来增强记录功能。要获得 TCP 会绕程序功能的完整列表，请参阅 hosts_options 的说明书页。

5.1.1.1. TCP 会绕程序和连接横幅

给连接服务的客户发送一幅警戒性横幅是掩盖运行服务的系统的好办法，同时，它也让潜在的攻击者知道系统管理员是相当警惕的。要为某服务实现 TCP 会绕程序横幅，请使用 banner 选项。

这个例子为 vsftpd 实现了一个横幅。首先，创建一个横幅文件。它可以位于系统上的任何地方，但是它的名称必须和守护进程相同。在这个例子中，该文件叫做 /etc/banners/vsftpd。

该文件的内容如下所示：

220-Hello, %c
220-All activity on ftp.example.com is logged.
220-Act up and you will be banned.

%c 代符提供了各类客户信息，如用户名和主机名，或用户名和 IP 地址，从而使连接更令人生畏。《红帽企业 Linux 参考指南》 中列举了用于 TCP 会绕程序的其它代符。

要把这个横幅展示给每个进入连接，把以下行添加到 /etc/hosts.allow 文件中：

vsftpd : ALL : banners /etc/banners/

5.1.1.2. TCP 会绕程序和攻击警告

如果某个主机或网络被发现正在攻击服务器，TCP 会绕程序可以通过 spawn 指令对来自该主机或网络的后续攻击向管理员发出警告。

在这个例子中，假定某个来自 206.182.68.0/24 网络的怪客被发现正在试图攻击服务器。如果把以下行添加到 /etc/hosts.deny 文件中，连接企图就会被拒绝并记录在一个特殊的文件中。

 ALL : 206.182.68.0 : spawn /bin/ 'date' %c %d >> /var/log/intruder_alert

%d 代符提供攻击者其它访问的服务名称。

要运行连接并记录日志，把 spawn 指令放在 /etc/hosts.allow 文件中。

注记 | 注记
 | 因为 spawn 指令执行任何 shell 命令，你可以创建一个脚本，该脚本会在某个特定客户企图连接服务器的时候通知管理员或执行一系列命令。

5.1.1.3. TCP 会绕程序和强化记录

如果某类连接比其它连接更值得关注，你可以通过 severity 选项来提高该类服务的记录级别。

在这个例子中，假定每个企图连接 FTP 服务器的端口23（Telnet 端口）的 客户都是怪客。在日志文件中放置一个 emerg 标记而不是默认的 info 标记来否定连接。

要达到这个目的，把以下行放在 /etc/hosts.deny 文件中：

in.telnetd : ALL : severity emerg

它使用默认的 authpriv 记录设施，但是把优先级别从默认的 info 提高到 emerg，这会把日志消息直接显示在控制台上。

5.1.2. 使用 xinetd 来增强安全性

xinetd 超级服务器是另一个用来控制到其从属服务访问的有用工具。本节集中讨论如何使用 xinetd 来设置陷阱服务，以及如何使用它来控制任何给定 xinetd 服务可以使用的资源数量，从而阻挠拒绝服务攻击。要阅读更全面的可用选项列表，请参考 xinetd 和 xinetd.conf 的说明书页。

5.1.2.1. 设置陷阱

xinetd 的一个重要功能是把主机添加到全局 no_access 列表的能力。在这个列表上的主机到被 xinetd 管理的服务的后续连接都会被拒绝一段时间，直到 xinetd 被重新启动为止。这是通过使用 SENSOR 属性来实现的。该技术是阻塞试图扫描服务器端口的主机的简单方法。

设置 SENSOR 的第一个步骤是选择你不打算使用的服务。以下以 Telnet 为例进行说明。

编辑 /etc/xinetd.d/telnet 文件，把含有 flags 的行改成：

          flags           = SENSOR

在括号内添加以下行：

          deny_time       = 30

这会拒绝试图连接到端口的主机在今后30分钟内的所有连接。deny_time 属性还有一个可接受的值是 FOREVER，它会使该禁令在 xinetd 被重新启动前保持有效；NEVER 则会允许连接并且记录它。

最后，最后一行应该是：

          disable         = no

虽然使用 SENSOR 是检测和阻止恶意主机的好办法。它有两个缺点：

  • 它对暗中扫描不起作用。

  • 知道 SENSOR 在运行的攻击者可以通过伪造 IP 地址和连接到禁用端口来对某些特定主机发起“拒绝服务”攻击。

5.1.2.2. 控制服务器资源

xinetd 的另一个重要功能是它能够控制从属服务可以利用的资源量。

它通过以下指令来达到这个目的：

  • cps = <number_of_connections> <wait_period> — 指定每秒钟内被允许到服务的连接数量。该指令只接受整数值。

  • instances = <number_of_connections> — 指定允许到服务的连接总数。该指令接受整数值或 UNLIMITED。

  • per_source = <number_of_connections> — 指定每个主机被允许到服务的连接数量。该指令接受整数值或 UNLIMITED。

  • rlimit_as = <number[K|M]> — 指定服务可以占用的内存地址空间数量，以千字节或兆字节为单位。该指令接受整数值或 UNLIMITED。

  • rlimit_cpu = <number_of_seconds> — 指定服务占用 CPU 的时间（以秒为单位）。该指令接受整数值或 UNLIMITED。

使用这些指令有助于防止某个 xinetd 服务大量占用系统，从而导致“拒绝服务”情况的出现。

后退 | 起点 | 前进
被安全强化的通信工具 | 上级 | 保护 Portmap 的安全性


安全总览

后退 前进

第 1章 . 安全总览

由于近来对使用功能强大的联网计算机来帮助商业运转和记录个人信息的依赖性日益增强，许多围绕着网络和计算机安全的行业也渐渐形成。企业机构开始聘请安全专家来确切地评审系统以及定制适合其组织的解决方案。由于许多机构属于动态性质，工作人员要么本地要么远程地使用公司的信息技术资源，因此机构们对安全计算环境的需求已愈来愈强烈。

不幸的是，多数机构（以及个体用户）把安全问题当成“马后炮”。安全问题常常会由于对增强功能、提高生成率以及对预算的考虑而被忽略。正确的安全措施经常是根据事后调查（postmortem） — 非法的入侵事件出现之后 — 来实现的。安全专家们都一致认为，在把网站连接到不信任的网络（如国际互联网）之前预先采取正确的措施是阻挠入侵企图的有效方法。

1.1. 什么是计算机安全？

计算机安全这个通用术语所涉及的计算和信息处理领域比较广泛。依赖于计算机系统和网络来处理日常商业事务和存取重要信息的行业把它们的数据当作公司总资产的重要组成部分。一些术语和衡量标准也渐渐开始出现在我们的日常商业用语中。例如：整体拥有成本（total cost of ownership，TCO）、服务质量（quality of service，QoS）。在这些衡量标准中，行业把数据完好性和高可用性方面也计算入他们的计划和进程管理费用中。在某些行业（如电子商务）中，数据的可用性和可信性可能就会决定成败。

1.1.1. 计算机安全问题溯源

许多读者可能还会记得马修-布罗德里克（Matthew Broderick）主演的电影《战争游戏》。他在其中扮演了一个闯入美国国防部超级电脑而无意导致核战争危机的高中学生。在电影中，布罗德里克使用他的调制解调器拨入美国国防部的电脑（叫做 WOPR），和一个控制所有核导弹发射井的人工智能软件玩游戏。这个电影是在1983年前苏联和美国的冷战期间被发行的，它被认为是当年戏剧片的成功之作。它的流行激发了许多个人和团体开始实施那个年轻的主人公所用的闯入机密系统的方法，包括著名的“战争拨号（war dialing）” — 按照区号和电话前缀组合来搜索模拟调制解调器连接的电话号码。

十多年后，通过美国联邦调查局（FBI）和全美国的计算机专家的鼎力合作，和历时四年的多司法区的追踪，声名狼藉的计算机怪客凯文·米蒂尼克（Kevin Mitnick）终于被逮捕。他被指控了25项计算机和存取设备的诈骗盗窃罪。这些诈骗盗窃活动导致诺基亚（Nokia）、NEC、Sun Microsystems、Novell、富士（Fujitsu）、和摩托罗拉（Motorola）损失了近八千万美元的知识产权和源码。FBI 认为该案件是当时美国历史上最大的计算机犯罪案件。凯文·米蒂尼克被定罪并被判处了68个月的徒刑。他共服刑60个月，于2000年1月21日被假释。假释条件禁止他在2003年之前使用计算机或从事任何和计算机相关的顾问工作。调查员说，米蒂尼克是社交工程（social engineering） — 使用人际关系来获得口令，使用伪造身份来进入系统 — 的专家。

由于对使用公共网络来传送私人、财经、以及其它保密信息的依赖性越来越大，信息安全的性质也随之演变。米蒂尼克和范德米尔·列文（请参阅第 1.1.2 节）这类案件的层出不穷，使得各行各业都不得不开始重新考虑他们处理信息传输的策略。国际互联网的流行性是促使对数据安全方面付出更多努力的主要原因之一。

越来越多的人使用他们的个人计算机来获取国际互联网所提供的各项资源。从研究、信息检索，到电子邮件和电子商务，互联网已被公认为是二十世纪最重要的开发成果之一。

然而，互联网和它早期的协议是作为基于信任（trust-based） 的系统开发的。这就是说，互联网协议自身的设计是不安全的。TCP/IP 通信栈中没有内建任何被核准的安全标准，因此带有潜在不良企图的网络用户和进程几乎能够畅行无阻。虽然当前的开发已大大提高了互联网通信的安全性，但是偶尔仍有令人瞠目之事发生，时刻提醒我们世界上没有任何东西和事情是完全安全的。

1.1.2. 计算机安全大事表

在计算机安全问题的发生和发展过程中出现了几件对其产生了深远影响的重要事件。以下列出了一些使人们开始关注计算机和信息安全的重要事件。

1.1.2.1. 六十年代

  • 麻省理工学院的学生组织了技术模型铁路俱乐部（Tech Model Railroad Club，TMRC），开始使用学院里的 PDP-1 大型机进行编程探索。最终，这个小组使用了“黑客”这个术语，其意义和今天相仿。

  • 美国国防部创建了高级研究计划局网（Advanced Research Projects Agency Network，ARPANet）。它在研究界和学术界越来越流行，逐渐成为电子数据信息的交换渠道。这为创建今天所称的“互联网”奠定了基础。

  • Ken Thompson 开发了 UNIX 操作系统。由于这个系统提供了使用方便的开发工具和编译器，以及支持性的用户社区，它被广泛认为是最“黑客友好”的操作系统。与此同时，Dennis Ritchie 开发了 C 编程语言，该语言可以说是计算机历史上最流行的黑客语言。

1.1.2.2. 七十年代

  • Bolt, Beranek, and Newman 是美国政府和行业内的计算机研究和开发承包商。它们开发了 Telnet 协议 - ARPANet 的公共扩展。该协议为公开使用从前仅限于政府承包商和学术研究者的数据网络打开了方便之门。同时，据几位安全研究员表明，Telnet 也可以算是公共网络中最不安全的协议。

  • Steve Jobs 和 Steve Wozniak 创办了苹果计算机（Apple Computer），并开始推销个人计算机（PC）。PC 是好几个蓄意不良的用户学习使用普通电脑通信硬件（如模拟调制解调器和战争拨号器）来远程入侵系统这门艺术的跳板。

  • Jim Ellis 和 Tom Truscott 创建了 USENET - 用于在分散形用户间进行电子通信的公告板风格的系统。USENET 迅速成为交换计算机、网络、以及入侵方面的观点见解的最流行论坛之一。

1.1.2.3. 八十年代

  • IBM 开发并销售基于 Intel 8086 微型处理器的 PC。它是一种相对来说价格较低廉的体系，它把计算机从办公室延伸到了家庭。它使 PC 渐渐成为一种功能比较强大、使用方便、而又普通常见、极易获取的工具，从而促进了这类硬件在蓄意不良用户的家庭和办公场所日益增多。

  • 由 Vint Cerf 开发的传输控制协议被分裂成两个独立的部分。互联网协议（IP）就是从这次分裂中诞生的。被组合在一起的 TCP/IP 协议成为今天所有互联网通信的标准。

  • 基于在电话欺诈（phreaking） - 探索和攻击电话系统 - 方面的发展情况，2600: The Hacker Quarterly 杂志被创办。该杂志开始面向比较广泛的读者听众，讨论入侵计算机和计算机网络之类的课题。

  • 经过九天的自由入侵，414帮会（根据他们居住和攻击基地而命名）非法进入了许多系统，甚至包括像 Los Alamos National Laboratory - 一个核武器研究设施 - 这样的绝密机构，他们终于被有关权力机关清查。

  • Legion of Doom 和 Chaos Computer Club 是两个开始在计算机和电子数据网络中探索弱点的先锋怪客组织。

  • Ian Murphy（又称 Captain Zap）非法进入了军事计算机，从公司商业订单数据库中窃取了信息，使用了被严格限制的政府电话交换台来打电话。由于他的这些入侵活动，美国国会在1986年投票通过了计算机欺诈和滥用法规（Computer Fraud and Abuse Act）。

  • 根据这个法规，法庭才能够因为毕业生 Robert Morris 把 Morris Worm 传播给6000多台连接到互联网上的计算机而给他定罪。按照这个法规裁决的下一例最著名的案件是 Herbert Zinn。他这名高中退学生非法闯入并滥用了属于 AT&T 和美国国防部的系统。

  • 很多人担忧 Morris Worm 事件可能会重演，因此计算机紧急响应组（CERT）被创建来在网络安全问题上给计算机用户报警。

  • Clifford Stoll 编纂了 The Cuckoo's Egg。它是 Stoll 调查入侵他的系统的怪客的亲身经历。

1.1.2.4. 九十年代

  • ARPANet 被关闭。到该网络的交通都被转到互联网上。

  • Linus Torvalds 开发了 Linux 内核以用于 GNU 操作系统；对 Linux 的广泛开发和采用在很大程度上是用户和开发者通过互联网通信的结果。因为它源于 UNIX，Linux 在黑客和管理员中最为流行。他们发现 Linux 对于在运行专有（闭源）操作系统的早期服务器中建构另类安全措施很有帮助。

  • 图形化万维网浏览器被创建，导致对公共互联网访问的需求迅速增加。

  • 范德米尔·列文及其同伙闯入花期银行的中央数据库，非法地将一千万美元巨额转入几个帐户。列文被 Interpol 逮捕，所有遗失款项都被追回。

  • 凯文·米蒂尼克可能是所有怪客中最为先锋的一个。他闯入了几家大公司的系统，从著名人士的私人信息，到两万余张信用卡和专有公司的源码，他所窃取的信息包罗万象。他被逮捕并以电子贪污定罪，被判处了5年徒刑。

  • 凯文·鲍尔森和一个不知名的同伙操纵了广播电台的电话系统来骗赢汽车和奖金。他以计算机和电子贪污定罪，也被判处了5年徒刑。

  • 非法闯入和电话诈骗的故事已渐渐成为传奇。一些未来的怪客在一年一度的 DefCon 会议中集会庆祝非法入侵并彼此交换见解。

  • 一名19岁的以色列学生被逮捕并以在波斯湾冲突期间协调对美国政府系统的非法闯入而定罪。军方人员将其称为是美国历史上对政府系统“最有组织和系统化的攻击”。

  • 为了对在政府系统中日益增多的安全破坏情况采取相应措施，美国司法部长 Janet Reno 组建了国家机构设施保护中心。

  • 英国通讯卫星被未知违法者劫获并绑票。英国政府最终夺回了卫星控制权。

1.1.3. 当前的安全性

在2000年2月，互联网上几个流量最繁忙的站点遭到了一次分布型拒绝服务（DDoS）攻击。这次攻击使 yahoo.com、cnn.com、amazon.com、fbi.gov 和许多其它站点完全无法被正常用户使用，因为它使用大字节的 ICMP 分组传输（又称试通洪流、ping flood）把这些站点的路由器困住了几个小时。一群未知攻击者使用特别创建的、可广泛获取的程序来扫描防守薄弱的网络服务器；在这些服务器上安装叫做特洛伊木马（trojan）的客户程序；然后安排了一个攻击时间，让每个受感染的服务器满负荷地向受害站点发出分组，从而使受害站点变得不可用。许多人把这次攻击怪罪于所用路由器和协议结构中的基础缺陷，因为所用路由器和协议接受所有进入的数据，而不管这些分组是从哪里或为哪些目的而发送来的。

这就把我们带到了新千年中 - 全世界约有四亿人使用或使用过互联网。同时：

  • 在任意一天内，报告到卡内基－梅隆大学的 CERT 协调中心的主要安全破坏事件约有225起。［参考资料：http://www.cert.org］

  • 在2002年，报告到 CERT 的事件从2001年的52,658起剧增到82,094起。在本书编纂之时，仅在2003第一季度内报告的事件就有42,586起。［参考资料：http://www.cert.org］

  • 在过去两年中出现的三个最危险的互联网病毒对世界经济的影响估计约为132亿美元。［参考资料：http://www.newsfactor.com/perl/story/16407.html］

计算机安全已经渐渐成为信息工程预算中的一项可以测量而且无可非议的开支。那些要求数据完好性和高可用性的机构借助系统管理员、开发者、和工程师们的技术力量来保证它们的系统、服务和信息的每时每刻的可靠性。

不幸的是，系统安全和网络安全是一项比较困难的议题，它需要你对某个组织如何对待、使用、处理、以及传输信息有精心深入的了解。理解某个组织（以及组成它的所有人员）的运转方式对于实施正确的安全计划来说至关重要。

1.1.4. 安全标准化

各行各业中的企业都依赖于由制定标准的机构，如美国医疗协会（AMA）或电气和电子工程师学会（IEEE），所设置的法则和规定。信息安全也不例外。许多安全顾问和厂商都认同一个叫做 CIA，或保密性、完好性、和可用性（Confidentiality, Integrity, and Availability）的标准安全模型。这个三层模型是用来评测保密信息所面临的危险以及建立安全策略的被普遍接受的安全标准的一个组成部分。以下详细描述了 CIA 模型：

  • 保密性 — 保密信息必须只能够被一组预先限定的人员存取。对这类信息的未经授权的传输和使用应该被严格限制。例如，信息保密性会确保顾客的个人和财务信息不被未经授权的人员获取以用于窃取身份或信用卡贪污之类的不良企图。

  • 完好性 — 信息不应该被能够导致它不完整或不正确的方式改变。未经授权的用户不应该具备修改或破坏保密信息的能力。

  • 可用性 — 信息应该能够被授权的用户在任何需要的时候都可以被存取。可用性是信息能够在规定的时间范围内、按照规定的频率而能够被获取的保证。这通常是按照百分比来衡量的，并且被网络服务器提供者和他们的企业客户使用的服务级别协议（SLA）正式达成协议。

后退 | 起点 | 前进
安全问题概述 | 上级 | 安全控制


虚拟专用网

后退 前进

第 6章 . 虚拟专用网

带有卫星办公室的机构为了高效率和保护所传输机密数据的安全性而经常使用专用线路来彼此连接。例如，许多公司使用帧中继或不对称传输模式（Asynchronous Transfer Mode，ATM）线路作为连接办公室的端点到端点的解决方案。这种方法比较昂贵，特别对于想要扩展而又想避免企业级别的专用数字线路带来的昂贵支出的中小型企业而言。

工程师们开发出一种解决这个问题的开支较少的方案 — 虚拟专用网（Virtual Private Networks，VPN）。VPN 使用和专用线路相同的原理，它允许在两个节点（或网络）间进行安全的数字通信，从现存的本地网（LAN）中创建一个广域网（WAN）。它和帧中继或 ATM 的不同之处在于所用的传输介质。VPN 使用数据报（UDP）作为传输层，但通过 IP 来传输，把它变成一个到目标点的安全通道。多数免费的软件 VPN 实现包括了开放标准、开源加密来进一步掩护传输中的数据。

某些组织使用硬件 VPN 来进行保安，而有些组织使用软件或基于协议的实现方法。Cisco、Nortel、IBM 和 Checkpoint 等几家厂商提供了硬件 VPN 解决方案。有一种叫做 FreeS/Wan 的用在 Linux 上的基于软件的免费 VPN 解决方案，它利用了被标准化的 IPsec（或互联网协议安全）实现。这些 VPN 解决方案充当位于办公室和办公室之间的 IP 连接的特殊路由器。

当分组从客户中被传输，它通过路由器或网关被发送，然后其中被添加叫做验证头（Authentication Header，AH）的关于选路和验证的头信息。该数据是被加密的，并且被包含在叫做封装安全载荷（ESP）的解密和处理说明中。接收 VPN 路由器会剥离头信息，把它选路发送到所要去的目的地（工作站或网络上的节点）。网络到网络间 VPN 连接的加密和解密进程对本地节点是透明的。

使用了这种被提高了的安全级别，怪客不但必须劫获分组，还需要能够解密分组（在多数 VPN 情况下，通常使用三次数据加密标准[3DES]的168位加密术）。利用客户和服务器间的中间人攻击方法的入侵者还必须获取用于验证会话的钥匙。VPN 是一种把多个远程节点连接成一个统一的内联网的安全而有效的方法。

6.1. VPN 和红帽企业 Linux

要实现软件方案来连接和安全保障 WAN，红帽企业 Linux 用户和管理员可以选用多种方法。不过，红帽企业 Linux 目前只支持两种实现 VPN 连接的方法。有一种相当于 VPN 的解决方案，它使用 OpenSSH 作为远程节点间的隧道。这种方法是 Telnet、rsh、和其它远程主机通信协议的较好的替换品，但是它并不能解决所有大公司中的电子通讯者和办公室之间的使用需要。包括在红帽企业 Linux 中的另外两种更切合 VPN 的实际定义的方案是加密 IP 封装（CIPE）和互联网协议安全（IPsec）。

后退 | 起点 | 前进
校验哪些端口正在监听 | 上级 | 加密 IP 封装（Crypto IP Encapsulation，CIPE）


工作站保安

后退 前进

第 4章 . 工作站保安

保护 Linux 环境的安全应从工作站开始。无论是锁定个人机器还是保护企业系统，可靠的安全策略都应从个体计算机开始。毕竟，一个计算机网络只能和它最弱的环节一样安全。

4.1. 评估工作站的安全性

在评估红帽企业 Linux 工作站的安全性时，请考虑以下因素：

  • BIOS 和引导装载程序的安全性 — 未经授权的用户是否能够亲手使用机器，并不必使用口令而引导单用户或救援模式？

  • 口令安全 — 机器上的用户帐号的口令有多安全？

  • 管理控制 — 谁在系统上有帐号？他们有多大的管理权？

  • 可用的网络服务 — 哪些服务在监听网络上的请求？它们应不应该运行？

  • 个人防火墙 — 哪类防火墙是必要的？

  • 经安全强化的通信工具 — 哪些工具应该被用来在工作站直接通信？哪些应该避免使用？

后退 | 起点 | 前进
安全更新 | 上级 | BIOS 和引导装载程序的安全性


后记

这些指南手册使用 DocBook SGML v4.1 格式编写。HTML 和 PDF 格式使用定制的 DSSSL 风格表单和定制的 jade 会绕脚本来编写。DocBook SGML 文件借助 Emacs 的 PSGML 模式编写。

Marianne Pecci <goddess@ipass.net> 创建了警诫图形（注记、窍门、重要、小心、和警告）。在获得 Marianne Pecci 和 Red Hat, Inc. 的书面许可后，它们可以被重新发行。

红帽产品文档组的成员如下：

Sandra A. Moore — 《红帽企业 Linux 用于 x86、Itanium™、和 AMD64 体系的安装指南》的主要撰写人和维护者；《红帽企业 Linux 用于 IBM® eServer™ iSeries™ 和 IBM® eServer™ pSeries™ 体系的安装指南》的主要撰写人和维护者；《红帽企业 Linux 逐步指南》的参与撰写人

Tammy Fox — 《红帽企业 Linux 系统管理指南》的主要撰写人和维护者；《红帽企业 Linux 用于 x86、Itanium™、和 AMD64 体系的安装指南》的参与撰写人；《红帽企业 Linux 安全指南》的参与撰写人；《红帽企业 Linux 逐步指南》的参与撰写人；DocBook 的定制风格表和脚本的编写人和维护者

Edward C. Bailey — 《红帽企业 Linux 系统管理介绍》的主要撰写人和维护者；“发行注记”的主要撰写人和维护者；《红帽企业 Linux 用于 x86、Itanium™、和 AMD64 体系的安装指南》的参与撰写人

Johnray Fuller — 《红帽企业 Linux 参考指南》的主要撰写人和维护者；《红帽企业 Linux 安全指南》的参与撰写人和维护者；《红帽企业 Linux 系统管理介绍》的参与撰写人

John Ha — 《红帽群集套件 群集配置和管理》的主要撰写人和维护者；“红帽术语”的主要撰写人和维护者；《红帽企业 Linux 用于 IBM® S/390® 和 IBM® eServer™ zSeries® 体系的安装指南》的主要撰写人和维护者；《红帽企业 Linux 安全指南》的参与撰写人和维护者；《红帽企业 Linux 系统管理介绍》的参与撰写人和维护者；《红帽企业 Linux 逐步指南》的参与撰写人和维护者

红帽产品文档翻译组的成员如下：

Jean-Paul Aubry — 法文翻译

David Barzilay — 巴西葡萄牙文翻译

Bernd Groh — 德文翻译

桥田喜代人 — 日文翻译

金芝恩 — 韩文翻译

Yelitza Louze — 西班牙文翻译

水本纪子 — 日文翻译

Nadine Richter — 德文翻译

Audrey Simons — 法文翻译

Francesco Valente — 意大利文翻译

王赛英 — 简体中文翻译

吴宏彬 — 繁体中文翻译

后退 | 起点
索引 |


索引

Symbols

802.11x, 无线网络
和安全, 无线网络
安全勘误, 安全更新
什么时候重新引导, 应用改变
通过红帽勘误网站, 使用红帽勘误网站
通过红帽网络, 使用红帽网络
应用改变, 应用改变
安全考虑
网络传输, 传输考虑
无线, 无线网络
物理网络, 硬件和网络保护
硬件, 硬件和网络保护
安全总览, 安全总览
病毒, 当前的安全性
计算机安全定义, 什么是计算机安全？
计算机安全问题的演变, 计算机安全问题溯源
结论, 结论
拒绝服务（DoS）, 当前的安全性
控制
见 控制
白帽黑客
见 黑客
报告事件, 报告事件
病毒
特洛伊木马, 当前的安全性
不安全服务, 不安全服务
rsh, 不安全服务
Telnet, 不安全服务
vsftpd, 不安全服务
常见的漏洞利用和攻击, 常见的漏洞利用和攻击
表格, 常见的漏洞利用和攻击
常用端口
表格, 常用端口
端口
常用, 常用端口
监视, 校验哪些端口正在监听
法律问题, 法律上的考虑
防火墙, 防火墙
个人, 个人防火墙
类型, 防火墙
其它资料, 其它资料
防火墙类型, 防火墙
代理, 防火墙
分组过滤器, 防火墙
网络地址转换（NAT）, 防火墙
服务, 校验哪些端口正在监听
服务配置工具, 识别和配置服务
服务器安全
Apache HTTP 服务器, 保护 Apache HTTP 服务器的安全
cgi 安全性, 限制对可执行目录的权限
指令, 保护 Apache HTTP 服务器的安全
FTP, 保护 FTP 的安全
TCP 会绕程序和, 使用 TCP 会绕程序来控制访问
vsftpd, 保护 FTP 的安全
匿名访问, 匿名访问
匿名上传, 匿名上传
问候横幅, FTP 问候横幅
用户帐号, 用户帐号
NFS, 保护 NFS 的安全
网络设计, 谨慎制定网络计划
语法错误, 注意语法错误
NIS, 保护 NIS 的安全
IPTables, 分配静态端口，使用 IPTables 规则
Kerberos, 使用 Kerberos 验证
NIS 域名, 使用像口令一样的 NIS 域名和主机名
securenets, 编辑 /var/yp/securenets 文件
静态端口, 分配静态端口，使用 IPTables 规则
网络计划, 谨慎制定网络计划
portmap, 保护 Portmap 的安全性
Sendmail, 保护 Sendmail 的安全
和 NFS, NFS 和 Sendmail
限制 DoS, 限制“拒绝服务”攻击
TCP 会绕程序, 使用 TCP 会绕程序来强化安全
攻击警告, TCP 会绕程序和攻击警告
横幅, TCP 会绕程序和连接横幅
记录, TCP 会绕程序和强化记录
xinetd, 使用 xinetd 来增强安全性
SENSOR 陷阱, 设置陷阱
使用……抵御 DoS, 控制服务器资源
使用……管理资源, 控制服务器资源
端口
监视, 校验哪些端口正在监听
总览, 服务器安全
根, 允许根权限
禁用方法, 禁止根存取权限
改变根 shell, 禁用根登录
禁用 SSH 登录, 禁用根的 SSH 登录
使用 PAM, 使用 PAM 禁用根权限
禁止存取, 禁止根存取权限
限制存取权限, 限制根存取权限
和 su, su 命令
和 sudo, sudo 命令
使用用户管理器, su 命令
允许存取权限, 允许根权限
根用户
见 根
更新
见 安全勘误
工作站保安, 工作站保安
BIOS, BIOS 和引导装载程序的安全性
评估
BIOS, 评估工作站的安全性
个人防火墙, 评估工作站的安全性
管理控制, 评估工作站的安全性
口令, 评估工作站的安全性
通信, 评估工作站的安全性
引导装载程序, 评估工作站的安全性
引导装载程序
口令, 引导装载程序口令
攻击者和威胁, 攻击者和弱点
怪客
定义, 黑客简明历史
黑帽黑客, 灰度
黑客
白帽, 灰度
定义, 黑客简明历史
黑帽
见 怪客
灰帽, 灰度
黑客道德, 黑客简明历史
黑帽黑客
见 怪客
灰帽黑客
见 黑客
恢复资源, 恢复资源
给系统打补丁, 给系统打补丁
重新安装系统, 重新安装系统
基本输入输出系统
见 BIOS
计算机紧急情况响应组, 计算机紧急情况响应组（CERT）
介绍, 介绍
课题, 介绍
类别、使用本指南, 介绍
其它红帽企业 Linux 指南手册, 介绍
拒绝服务（DoS）
分布型, 当前的安全性
可插入验证模块（PAM）
强制实行强健口令, 强制使用强健口令
控制, 安全控制
管理, 管理控制
技术, 技术控制
物理, 物理控制
口令
在机构内, 在机构内创建用户口令
口令安全, 口令安全
方法, 安全口令创建方法
和 PAM, 强制使用强健口令
老化, 口令老化
强健口令, 创建强健的口令
强制执行, 强制使用强健口令
审核工具, 强制使用强健口令
Crack, 强制使用强健口令
John the Ripper, 强制使用强健口令
Slurpie, 强制使用强健口令
在机构内, 在机构内创建用户口令
口令老化, 口令老化
入侵检测系统, 入侵检测
RPM 软件包管理器（RPM）, RPM 作为一种 IDS
Tripwire, Tripwire
定义, 入侵检测系统详述
基于网络, 基于网络的 IDS
Snort, Snort
基于主机, 基于主机的 IDS
类型, IDS 类型
日志文件, 基于主机的 IDS
弱点
测定, 弱点测定
测试, 测定和测试
定义, 测定和测试
建立一套方法, 建立一套方法
使用 Nessus 来测定, Nessus
使用 Nikto 来测定, Nikto
使用 Nmap 测定, 使用 Nmap 来扫描主机
使用 VLAD 扫描器来测定, VLAD 扫描器
事后调查分析, 调查事件
事件响应
报告事件, 报告事件
调查, 调查事件
定义, 事件响应的定义
和法律问题, 法律上的考虑
恢复资源, 恢复资源
计算机紧急情况响应组（CERT）, 计算机紧急情况响应组（CERT）
介绍, 事件响应
实施, 实施事件响应计划
事后调查分析, 调查事件
收集入侵后的信息, 收集入侵后的信息
收集证据
使用 dd, 收集证据映像
制定计划, 制定事件响应计划
事件响应计划, 制定事件响应计划
收集证据
见 事件响应
文件审核工具, 收集入侵后的信息
dd, 收集入侵后的信息
file, 收集入侵后的信息
find, 收集入侵后的信息
grep, 收集入侵后的信息
md5sum, 收集入侵后的信息
script, 调查事件
stat, 收集入侵后的信息
strings, 收集入侵后的信息
停火区域, DMZ 和 iptables
通信端口, 常用端口
通信工具
安全, 被安全强化的通信工具
GPG, 被安全强化的通信工具
OpenSSH, 被安全强化的通信工具
同一地点服务, 硬件安全
网络, 硬件和网络保护
分段, 网络分段和 DMZ
和安全, 安全网络拓扑
集线器, 传输考虑
停火区域（DMZ）, 网络分段和 DMZ
无线, 无线网络
转换器, 传输考虑
网络服务, 可用网络服务
识别和配置, 识别和配置服务
威胁, 对服务的威胁
缓冲溢出, 对服务的威胁
脚本弱点, 对服务的威胁
拒绝服务, 对服务的威胁
网络拓扑, 安全网络拓扑
环形, 物理拓扑
线形, 物理拓扑
星形, 物理拓扑
威胁
补丁和勘误, 未打补丁的服务
不安全服务, 带有固有不安全因素的服务
打开的端口, 未用的服务和打开的端口
服务器, 对服务器安全的威胁
管理疏忽, 管理疏忽
工作站和家用电脑, 对工作站和家用电脑安全性的威胁, 不良口令
应用程序, 有弱点的客户应用程序
网络, 对网络安全的威胁
体系, 不安全的体系
文件审核
工具, 收集入侵后的信息
无线安全, 无线网络
802.11x, 无线网络
虚拟专用网, 虚拟专用网
CIPE, 加密 IP 封装（Crypto IP Encapsulation，CIPE）
IPsec, IPsec
安装, IPsec 安装
配置, IPsec 网络到网络配置
主机到主机, IPsec 主机到主机配置
引导装载程序
GRUB
口令保护, 用口令保护 GRUB
LILO
口令保护, 用口令保护 LILO
安全性, 引导装载程序口令
硬件, 硬件和网络保护
便携电脑, 硬件安全
服务器, 硬件安全
工作站, 硬件安全
和安全, 硬件安全
约定
文档, 文档约定
总览, 安全总览

A

Apache HTTP 服务器
cgi 安全性, 限制对可执行目录的权限
介绍, 保护 Apache HTTP 服务器的安全
指令, 保护 Apache HTTP 服务器的安全

B

BIOS
安全性, BIOS 和引导装载程序的安全性
口令, BIOS 口令
非 x86 平台的同等品
口令, 保护非 x86 平台的安全

C

CIPE, 加密 IP 封装（Crypto IP Encapsulation，CIPE）
安装, CIPE 安装
定制, 定制 CIPE
cupsd, 识别和配置服务

D

dd
使用……进行文件审核, 收集入侵后的信息
使用……收集证据, 收集证据映像
DMZ
见 停火区域
见 networks

E

EFI Shell
安全性
口令, 保护非 x86 平台的安全

F

file
使用……进行文件审核, 收集入侵后的信息
find
使用……进行文件审核, 收集入侵后的信息
FTP
TCP 会绕程序和, 使用 TCP 会绕程序来控制访问
vsftpd, 保护 FTP 的安全
介绍, 保护 FTP 的安全
匿名访问, 匿名访问
匿名上传, 匿名上传
问候横幅, FTP 问候横幅
用户帐号, 用户帐号

G

grep
使用……进行文件审核, 收集入侵后的信息

I

IDS
见 入侵检测系统
ip6tables, IP6Tables
IPsec, IPsec
安装, IPsec 安装
配置, IPsec 网络到网络配置
主机到主机, IPsec 主机到主机配置
网络到网络, IPsec 网络到网络配置
主机到主机, IPsec 主机到主机配置
iptables, Netfilter 和 IPTables
和 DMZ, DMZ 和 iptables
其它资料, 其它资料
使用, 使用 IPTables

K

Kerberos
NIS, 使用 Kerberos 验证

L

lpd, 识别和配置服务
lsof, 校验哪些端口正在监听

M

md5sum
使用……进行文件审核, 收集入侵后的信息

N

Nessus, Nessus
Netfilter, Netfilter 和 IPTables
其它资料, 其它资料
Netfilter 6, IP6Tables
netstat, 校验哪些端口正在监听
NFS, 保护 NFS 的安全
和 Sendmail, NFS 和 Sendmail
网络设计, 谨慎制定网络计划
语法错误, 注意语法错误
Nikto, Nikto
NIS
IPTables, 分配静态端口，使用 IPTables 规则
Kerberos, 使用 Kerberos 验证
NIS 域名, 使用像口令一样的 NIS 域名和主机名
securenets, 编辑 /var/yp/securenets 文件
介绍, 保护 NIS 的安全
静态端口, 分配静态端口，使用 IPTables 规则
网络计划, 谨慎制定网络计划
nmap, 校验哪些端口正在监听, 使用 Nmap 来扫描主机
命令行版本, 使用 Nmap

O

OpenSSH, 被安全强化的通信工具
scp, 被安全强化的通信工具
sftp, 被安全强化的通信工具
ssh, 被安全强化的通信工具

P

portmap, 识别和配置服务
和 IPTables, 使用 IPTables 来保护 portmap
和 TCP 会绕程序, 使用 TCP 会绕程序来保护 portmap。

R

RPM
导入 GPG 钥匙, 使用红帽勘误网站
检查 GPG 签名, 使用红帽勘误网站
入侵检测, RPM 作为一种 IDS

S

sendmail, 识别和配置服务
和 NFS, NFS 和 Sendmail
介绍, 保护 Sendmail 的安全
限制 DoS, 限制“拒绝服务”攻击
Snort, Snort
sshd, 识别和配置服务
stat
使用……进行文件审核, 收集入侵后的信息
strings
使用……进行文件审核, 收集入侵后的信息
su
根, su 命令
sudo
根, sudo 命令

T

TCP 会绕程序
攻击警告, TCP 会绕程序和攻击警告
和 FTP, 使用 TCP 会绕程序来控制访问
和 portmap, 使用 TCP 会绕程序来保护 portmap。
横幅, TCP 会绕程序和连接横幅
记录, TCP 会绕程序和强化记录
Tripwire, Tripwire

V

VLAD 扫描器, VLAD 扫描器
VPN, 虚拟专用网

W

Wi-Fi 网络
见 802.11x

X

xinetd, 识别和配置服务
SENSOR 陷阱, 设置陷阱
使用……抵御 DoS, 控制服务器资源
使用……管理资源, 控制服务器资源
后退 | 起点 | 前进
常用端口 |  | 后记


Red Hat, Inc.

1801 Varsity Drive Raleigh NC 27606-2072 USA 电话：+1 919 754 3700 电话：888 733 4281 传真：+1 919 754 3701 PO Box 13588 Research Triangle Park NC 27709 USA

rhel-sg(ZH-CN)-3-HTML-RHI (2003-07-25T17:12)

版权© 2003，Red Hat, Inc. 本资料只允许在开放出版许可（Open Publication License）V1.0 或更新版本的条款下发行。（最新版本目前位于http://www.opencontent.org/openpub/）。

没有版权所有者的明确许可，禁止发行该文档的独立修改的版本。

除非事前从版权所有者处获得许可，禁止使用任何标准（纸印）书籍格式为商业目的而发行该作品或从该作品推导出的作品。

红帽、Red Hat、红帽网络、Red Hat Network、红帽“Shadow Man”徽标、RPM、Maximum RPM、RPM 徽标、Linux Library、PowerTools、Linux Undercover、RHmember、RHmember More、Rough Cuts、Rawhide 以及所有基于红帽的商标和徽标是商标或 Red Hat, Inc. 在美国和其它国家的注册商标。

Linux 是 Linus Torvalds 的注册商标。

Motif 和 UNIX 是 The Open Group 的注册商标。

Intel 和 Pentium 是 Intel Corporation 的注册商标。Itanium 和 Celeron 是 Intel Corporation 的商标。

AMD、Opteron、Athlon、Duron、以及 K6 是 Advanced Micro Devices, Inc. 的注册商标。

Netscape 是 Netscape Communications Corporation 在美国和其它国家的注册商标。

Windows 是 Microsoft Corporation 的注册商标。

SSH 和 Secure Shell 是 SSH Communications Security, Inc. 的商标。

FireWire 是 Apple Computer Corporation 的商标。

IBM、AS/400、OS/400、RS/6000、S/390、和 zSeries 是 International Business Machines Corporation 的注册商标。eServer、iSeries、和 pSeries 是 International Business Machines Corporation 的商标。

本书中所引用的所有其它商标和版权均属其拥有者所有。

security@redhat.com 密钥的 GPG 指纹是：

CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E

起点


附录

后退 前进

V. 附录

这个部分讨论了入侵者闯入你的系统或截取传输中数据的常用方法。它还详细描述了一些最常使用的服务和相关端口号码。这些知识有助于管理员减少被攻击的可能性。

目录
A. 硬件和网络保护
B. 常见的漏洞利用和攻击
C. 常用端口
后退 | 起点 | 前进
报告事件 |  | 硬件和网络保护


测定你的安全性

后退 前进

III. 测定你的安全性

这个部分提供了对安全评估的理论和实践的总览。从网络监视器到攻击工具，管理员可以通过攻击网络来学习如何保护系统和网络免遭攻击。

目录
8章 . 弱点测定
后退 | 起点 | 前进
其它资料 |  | 弱点测定


配置红帽企业 Linux 的保安系统

后退 前进

II. 配置红帽企业 Linux 的保安系统

这个部分为管理员提供了保护红帽企业 Linux 工作站、红帽企业 Linux 服务器以及网络资源所要使用的正确技术和工具。它还讨论了如何进行安全连接；锁定端口和服务；以及实现积极过滤来防止网络入侵。

目录
3章 . 安全更新
4章 . 工作站保安
5章 . 服务器安全
6章 . 虚拟专用网
7章 . 防火墙
后退 | 起点 | 前进
对工作站和家用电脑安全性的威胁 |  | 安全更新


安全问题概述

后退 前进

I. 安全问题概述

这个部分概述了信息安全的定义、历史、以及由此而发展出来的行业。它还讨论了计算机用户或管理员可能会面临的安全威胁。

目录
1章 . 安全总览
2章 . 攻击者和弱点
后退 | 起点 | 前进
未来的扩充 |  | 安全总览


入侵和事件响应

后退 前进

IV. 入侵和事件响应

网络受到入侵或网络资源被滥用是不可避免的。这个部分讨论一些管理员可以采取的积极措施来防止安全入侵的发生。例如组织一个能够快速有效地对安全问题做出响应的紧急情况响应组。它还详细列举了入侵事件发生后管理员收集和分析证据所需采取的步骤。

目录
9章 . 入侵检测
10章 . 事件响应
后退 | 起点 | 前进
评估工具 |  | 入侵检测


使用 IPTables

后退 第 7章 . 防火墙 前进

7.2. 使用 IPTables

使用 IPTables 的第一步是启动 IPTables 服务。这可以使用以下命令进行：

service iptables start

警告 警告

你应该使用以下命令关闭 IP6Tables 服务才能使用 IPTables 服务：

service ip6tables stop
chkconfig ip6tables off

要使 IPTables 在系统引导时默认启动，你必须使用 chkconfig 来改变服务的运行级别状态。

chkconfig --level 345 iptables on

IPTables 的语法被分成几个层次。主要层次为“链”（chain）。“链”指定处理分组的状态。其用法为：

iptables -A chain -j target

-A 在现存的规则集合内后补一条规则。chain 是规则所在“链”的名称。IPTables 中有三个内建的链（即影响每一个在网络中经过的分组的链）：INPUT、OUTPUT、和 FORWARD。这些链是永久性的，不能被删除。

重要 重要

在创建 IPTables 规则集合时，记住规则的顺序是至关重要的。例如：如果某个链指定了来自本地子网 192.168.100.0/24 的任何分组都应放弃，然后一个允许来自 192.168.100.13（在前面要放弃分组的子网范围内）的分组的链被补在这个规则后面（-A），那么这个后补的规则就会被忽略。你必须首先设置允许 192.168.100.13 的规则，然后再设置放弃规则。

要在现存规则链的任意处插入一条规则，使用 -I，随后是你想插入规则的链的名称，然后是你想放置规则的位置号码（1,2,3,...,n）。例如：

iptables -I INPUT 1 -i lo -p all -j ACCEPT

这条规则被插入为 INPUT 链的第一条规则，它允许本地环回设备上的交通。

7.2.1. 基本防火墙策略

在一开始就建立的某些基本策略为建构更详细的用户定义的规则奠定了基础。IPTables 使用策略（policy, -P）来创建默认规则。对安全敏感的管理员通常想采取放弃所有分组、只逐一允许指定分组的策略。以下规则阻塞网络上所有的出入分组。

iptables -P INPUT DROP
iptables -P OUTPUT DROP

此外，还推荐你拒绝所有转发分组（forwarded packets） — 要从防火墙被选路发送到它的目标节点的网络交通 — 以便限制内部客户对互联网的无心暴露。要达到这个目的，使用以下规则：

iptables -P FORWARD DROP

注记 | 注记
 | 在处理添加的规则时，REJECT（拒绝）目标和 DROP（放弃）目标这两种行动有所不同。REJECT 会拒绝目标分组的进入，并给企图连接服务的用户返回一个 connection refused 的错误消息。DROP 会放弃分组，而对 telnet 用户不发出任何警告；不过，为了避免导致用户由于迷惑不解而不停试图连接的情况的发生，推荐你使用 REJECT 目标。

设置了策略链后，为你的特定网络和安全需要创建新规则。以下各节概述了一些你在建构 IPTables 防火墙时可能要实现的规则。

7.2.2. 保存和恢复 IPTables 规则

防火墙规则只在计算机处于开启状态时才有效。如果系统被重新引导，这些规则就会自动被清除并重设。要保存规则以便今后载入，请使用以下命令：

/sbin/service iptables save

保存在 /etc/sysconfig/iptables 文件中的规则会在服务启动或重新启动时（包括机器被重新引导时）被应用。

后退 | 起点 | 前进
防火墙 | 上级 | 常用 iptables 过滤


IP6Tables

后退 第 7章 . 防火墙 前进

7.7. IP6Tables

下一代互联网协议 IPv6 的出现突破了 IPv4（或 IP）的32位地址限制。IPv6 支持128位地址，因此识别 IPv6 的载体网络就能够制定比 IPv4 更多的可选路地址。

红帽企业 Linux 支持使用 Netfilter 6 子系统和 IP6Tables 命令的 IPv6 防火墙规则。使用 IP6Tables 的第一步是启动 IP6Tables 服务。它可以使用以下命令进行：

service ip6tables start

警告 警告

你必须关闭 IPTables 服务才能专门使用 IP6Tables 服务：

service iptables stop
chkconfig iptables off

要使 IP6Tables 在系统引导时默认启动，使用 chkconfig 来改变服务的运行级别状态。

chkconfig --level 345 ip6tables on

其语法在各方面都和 IPTables 相同，只不过 IPTables 支持128位的地址。例如：在识别 IPv6 的网络服务器器上的 SSH 连接可以使用以下规则来启用：

ip6tables -A INPUT -i eth0 -p tcp -s 3ffe:ffff:100::1/128 --dport 22 -j ACCEPT

关于 IPv6 联网的详情，请参阅 IPv6 的信息页：http://www.ipv6.org/。

后退 | 起点 | 前进
病毒和假冒 IP 地址 | 上级 | 其它资料


常用 iptables 过滤

后退 第 7章 . 防火墙 前进

7.3. 常用 iptables 过滤

把远程攻击者拒之“LAN”外是网络保安的一个重要方面。LAN 的完好性应该通过使用严格的防火墙规则来抵御蓄意不良的远程用户而被保护。但是，如果默认策略被设置为阻塞所有进入、输出、和转发的分组，防火墙/网关和内部 LAN 用户之间的通信就无法进行。要允许用户执行和网络相关的功能以及使用联网应用程序，管理员必须打开某些端口进行通信。

例如：要允许到防火墙上的端口80的通信，添加以下规则：

iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

这会允许用户浏览通过端口80通信的网站。要允许到安全网站（如 https://www.example.com/）的访问，你还必须打开端口443。

iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT

有时候，你可能会需要从 LAN 之外远程地进入 LAN。SSH 和 CIPE 之类的安全服务可以用于到 LAN 服务的加密远程连接。对于拥有基于 PPP 资源（如调制解调器池或批量 ISP 帐号）的管理员来说，拨号进入可以被用来安全地避开防火墙，因为调制解调器连接是直接连接，通常位于防火墙/网关之后。 然而，对于有宽带连接的远程用户来说，你就需要制定些特殊规定。你可以配置 IPTables 接受来自远程 SSH 和 CIPE 客户的连接。例如，要允许远程 SSH 访问，你可以使用以下规则：

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p udp --sport 22 -j ACCEPT

来自外部的 CIPE 连接请求可以使用以下命令来接受（把 x 替换成你的设备号码）：

iptables -A INPUT -p udp -i cipcbx -j ACCEPT
iptables -A OUTPUT -p udp -o cipcbx -j ACCEPT

CIPE 使用它自己的传输数据报（UDP）分组的虚拟设备，因此这条规则允许 cipcb 接口上的进入连接，而不是规定源地端口或目标端口（虽然它们可以被用来代替设备选项）。关于使用 CIPE 的信息，请参阅第6章 。

你可能还想为其它服务定义规则。关于 IPTables 及其各类选项的完整信息，请参阅《红帽企业 Linux 参考指南》。

这些规则允许到防火墙上的常规及安全服务的访问；然而，它们并不允许防火墙之后的机器使用这些服务。要允许 LAN 使用这些服务，你可以使用带有 IPTables 过滤规则的 NAT。

后退 | 起点 | 前进
使用 IPTables | 上级 | FORWARD 和 NAT 规则


FORWARD 和 NAT 规则

后退 第 7章 . 防火墙 前进

7.4. FORWARD 和 NAT 规则

多数机构从它们的 ISP 处得到数量有限的可公开选路的 IP 地址。鉴于这种限额，管理员必须创建性地积极寻求分享互联网服务的方法，而又不必把稀有的 IP 地址分配给 LAN 上的每一台机器。使用专用 IP 地址是允许 LAN 上的所有机器正确使用内部和外部网络服务的常用方法。边缘路由器（如防火墙）可以接收来自互联网的进入交通，并把这些分组选路发送它们意图发送的 LAN 节点上；同时，防火墙/网关还可以把来自 LAN 节点的输出请求选路发送到远程互联网服务中。这种转发网络交通行为有时会很危险，特别是随着能够假冒内部 IP 地址、使远程攻击者的机器成为你的 LAN 上的一个节点的现代攻击工具的出现。为防止此类事件的发生，iptables 提供了选路发送和转发策略，你可以实施它们来防止对网络资源的变相利用。

FORWARD 策略允许管理员控制分组可以被选路发送到 LAN 内的哪些地方。例如：要允许整个 LAN 的转发（假定防火墙/网关在 eth1 上有一个内部 IP 地址），你可以设置以下规则：

iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT

注记 注记

按照默认设置，红帽企业 Linux 内核中的 IPv4 策略禁用了对 IP 转发的支持，这会防止运行红帽企业 Linux 的机器成为专用边缘路由器。要启用 IP 转发，请运行以下命令：

sysctl -w net.ipv4.ip_forward=1

如果该命令是通过 shell 提示运行的，那么其设置在重新引导后就不会被保存。你可以通过编辑 /etc/sysctl.conf 文件来永久性地设置转发。寻找并编辑以下行，把 0 改成 1：

net.ipv4.ip_forward = 0

执行以下命令来启用 sysctl.conf 文件中的改变：

sysctl -p /etc/sysctl.conf

这会允许 LAN 节点彼此通信；不过，它们没有被允许和外界（如互联网）通信。要允许带有专用 IP 地址的 LAN 节点和外部的公共网络通信，配置防火墙的 IP 伪装（IP masquerading），这会把来自 LAN 节点的请求都伪装成防火墙的外部设备（在这个例子中是 eth0）的 IP 地址。

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
后退 | 起点 | 前进
常用 iptables 过滤 | 上级 | DMZ 和 iptables


病毒和假冒 IP 地址

后退 第 7章 . 防火墙 前进

7.6. 病毒和假冒 IP 地址

你可以更精心设计一些规则来控制到 LAN 内指定子网的访问，甚至到指定机器的访问。你还可以限制某些类似特洛伊木马、蠕虫、以及其它客户/服务器病毒的可疑服务联系它们的服务器。例如：有些特洛伊木马会扫描端口31337到31340（即黑客语言中的 elite 端口）上的服务。既然合法服务都不使用这些非标准端口来通信，阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会。

iptables -A OUTPUT -o eth0 -p tcp --dport 31337 --sport 31337 -j DROP
iptables -A FORWARD -o eth0 -p tcp --dport 31337 --sport 31337 -j DROP

你还可以阻塞试图假冒你所在 LAN 的专用 IP 地址混入的连接。例如：如果你的 LAN 使用 192.168.1.0/24 范围，面向互联网的网络设备（如 eth0）上就可以设置一条规则来放弃到那个设备的使用你所在 LAN 的 IP 范围的分组。因为默认策略是拒绝转发分组，所有到面向外界的设备（eth0）的假冒 IP 地址都会被自动拒绝。

iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -j DROP
后退 | 起点 | 前进
DMZ 和 iptables | 上级 | IP6Tables


其它资料

后退 第 7章 . 防火墙 前进

7.8. 其它资料

关于防火墙和 Linux Netfilter 子系统的许多方面在这里都没有涉及。要获得更多信息，请参考以下资料。

7.8.1. 安装了的文档

  • 《红帽企业 Linux 参考指南》中有一章比较详尽地描述了和 IPTables 有关的内容，包括所有命令行选项的定义。

  • IPTables 的说明书页中也包含各类选项的简短摘要。

  • 在附录 C和 /etc/services 文件中可以找到常用服务及其端口号码的列表。

7.8.2. 有用的网站

  • http://www.netfilter.org/ — Netfilter/IPTables 工程的官方网页。

  • http://www.tldp.org/ — Linux 文档计划（The Linux Documentation Project）中包含几个和创建及管理防火墙相关的指南。

  • http://www.iana.org/assignments/port-numbers — 被互联网域名分配协会（Internet Assigned Numbers Authority，IANA）分配的常用注册服务端口的官方列表。

7.8.3. 相关文档

  • Linux Firewalls，Robert Ziegler 著；New Riders Press. 出版 — 包含关于使用 2.2 内核的 IPChains，以及 Netfilter 和 IPTables 来建构防火墙的丰富信息。还涉及了如远程访问问题和入侵检测系统等安全性课题。

后退 | 起点 | 前进
IP6Tables | 上级 | 测定你的安全性


基于主机的 IDS

后退 第 9章 . 入侵检测 前进

9.2. 基于主机的 IDS

基于主机（host-based）的 IDS 分析几个方面来判定滥用（来自网络内部的蓄意或妄用活动）或入侵（来自外界的突破）情况。基于主机的 IDS 考查若干日志文件（内核、系统、服务器、网络、防火墙等等），并拿日志文件和常见已知攻击的内部数据库进行比较。UNIX 和 Linux 的基于主机的 IDS 大量使用 syslog 命令及其根据严重性（例如，次要的打印机错误消息相对于重要的内核警告）来区分所要记录事件的能力。基于主机的 IDS 过滤日志（记录网络和内核事件的日志可能会非常详细）、分析日志、使用它自己的严重性级别系统来重新给异常消息标签、并把它们收集到它自己的特殊日志以供管理员分析使用。

基于主机的 IDS 还可以校验重要文件和可执行文件的完好性。它检查敏感文件（以及管理员添加的任何文件）的数据库，并使用 md5sum（128 位算法）或 sha1sum（160 位算法）之类的消息文件摘要工具来为每个文件创建一个校验和（checksum）。然后，基于主机的 IDS 把这些校验和保存到一个纯文本文件中，并定期比较实际文件的校验和与这个纯文本文件中保存的数值。如果发现了任何不符之处，IDS 就会通过电子邮件或传呼机来警告管理员。这是 Tripwire 所使用的一般过程，第 9.2.1 节中对此有详细讨论。

9.2.1. Tripwire

Tripwire 是最流行的用于 Linux 的基于主机的 IDS。Tripwire, Inc. 是 Tripwire 的开发商，它们新近为 Linux 版本按照 GNU 通用公共许可证的条款开放了源码。Tripwire 在 http://www.tripwire.org/ 上可以获得。

注记 | 注记
 | Tripwire 没有被包括在红帽企业 Linux 中，它也不被支持。本书之所以包括了对它的介绍，是想为有兴趣使用它的用户提供一个参考。

9.2.2. RPM 作为一种 IDS

RPM 软件包管理器（RPM）是另一个可以被用作基于主机的 IDS 的程序。RPM 包含各类用于查询软件包及其内容的选项。对于那些怀疑重要的系统文件和可执行文件已被修改的管理员来说，这些校验选项具有很高的价值。

以下列表详细地描述了一些可以用来校验你的红帽企业 Linux 系统上的文件完好性的 RPM 选项。关于使用 RPM 的完整信息，请参阅《红帽企业 Linux 系统管理指南》

重要 重要

以下列表中的某些命令需要你把红帽 GPG 公钥导入到系统的 RPM 钥匙圈上。该钥匙会校验安装在你的系统上的软件包是否包含红帽软件包签名，从而确保这些软件包的确来自 Red Hat。你可以使用以下命令来导入钥匙（把 <version> 改成安装在你的系统上的 RPM 版本）：

rpm --import /usr/share/doc/rpm-<version>/RPM-GPG-KEY

rpm -V 软件包名称

-V 选项校验已安装了的叫做“package_name”的软件包中的文件。如果该命令没有显示任何输出而退出，这就意味着其中所有文件自从最后一次 RPM 数据库更新以来都没有被修改。如果该命令给出了错误，例如：

S.5....T c /bin/ps

那么，这就说明该文件已被修改了。你需要决定是应该保留它（如果被修改的文件是 /etc 中的配置文件）还是删除它再重新安装包含这个文件的软件包。以下列表解释了表示校验失败的这八个字符（上面例子中是 S.5....T）的含义。

  • . — 已通过这一阶段的校验测试

  • ? — 测试中发现了一份无法读取的文件，这极可能是文件权限问题

  • S — 测试中发现了一份比最初安装在系统上的文件稍大或稍小的文件

  • 5 — 测试中发现了一份和最初安装时的 md5 校验和不匹配的文件

  • M — 测试中检测到文件权限或文件类型错误

  • D — 测试中检测到主/次号码不匹配的设备文件

  • L — 测试中找到一个被改变到另一个文件路径的符号链接

  • U — 测试中找到一份用户所有者被改变的文件

  • G — 测试中找到一份组群所有者被改变的文件

  • T — 测试中遇到文件的 mtime 校验错误

rpm -Va

-Va 选项校验所有安装了的软件包，并找出校验测试中的失败之处（和 -V 选项相似），但是由于它校验每个安装了的软件包，其输出要比 -V 选项更详细。

rpm -Vf /bin/ls

-Vf 选项校验某个安装了的软件包中的单个文件。如果你打算只快速地校验一个有疑点的文件，这个选项就很有用。

rpm -K application-1.0.i386.rpm

-K 选项对于检查 RPM 软件包文件的 md5 校验和与 GPG 签名来说很有用。你可以用它来检查你想安装的软件包是否被 Red Hat 或被其它你已导入 GPG 公钥的机构签名了。没有被正确签名的软件包会显示一条和以下相似的消息：

application-1.0.i386.rpm (SHA1) DSA sha1 md5 (GPG) NOT OK
          (MISSING KEYS: GPG#897da07a)

在安装未被签名的软件包时请务必谨慎从事，因为它们没有被 Red Hat, Inc. 批准，有可能包含有害源码。

PRM 是一个强大的工具，它所提供的诸多对安装了的软件包和 RPM 软件包文件的校验工具就足以证明这一点。我们强烈建议你在安装了红帽企业 Linux 后，把 RPM 数据库目录（/var/lib/rpm/）备份到只读介质（如光盘）上。这么做会使你能够根据只读数据库而不是你的系统上的数据库来校验文件和软件包，因为有不良企图的用户可能会破坏你的数据库来歪曲校验结果。

9.2.3. 其它基于主机的 IDS

以下列表讨论了某些其它较流行的基于主机的入侵检测系统。请参考这些工具的相应网站来获得更多关于在你的环境中安装和配置它们的信息。

注记 | 注记
 | 这些应用程序没有被包括在红帽企业 Linux 中，并且不被支持。本书之所以包括了对它们的介绍，是想为有兴趣使用它们的用户提供一个参考。

  • SWATCH http://www.stanford.edu/~atkins/swatch/ — 简单监视器（Simple WATCHer，SWATCH）根据用户的配置文件，使用 syslog 生成的日志文件来在发生异常时警告管理员。SWATCH 最初的设计目的是记录所有用户想加进配置文件中的事件，但是目前它已被广泛地用作基于主机的 IDS。

  • LIDS http://www.lids.org/ — Linux 入侵检测系统（The Linux Intrusion Detection System，LIDS）是一种内核补丁和管理工具，它还可以使用访问控制列表（ACL）来控制对文件的修改，保护进程及文件，甚至连根用户也在 ACL 的控制之内。

后退 | 起点 | 前进
入侵检测 | 上级 | 基于网络的 IDS


基于网络的 IDS

后退 第 9章 . 入侵检测 前进

9.3. 基于网络的 IDS

基于网络的入侵检测系统和基于主机的入侵检测系统的工作方式不同。基于网络的 IDS 的设计哲学是在路由器或主机级别扫描网络分组、审查分组信息、并在一个特殊文件中详细记录可疑分组。根据这些可疑分组，基于网络的 IDS 可以扫描它自己的已知网络攻击特征数据库，并为每个分组指定严重级别。如果严重级别够高，它就会给安全组的成员发送电子邮件或通知传呼机，因此安全组的成员就可以进一步调查这些异常特点。

随着互联网在其范围和交通流量方面的增大，基于网络的 IDS 已经越来越受欢迎。在安全行业中，能够扫描大量网络活动并成功地标记可疑传输的 IDE 很受好评。鉴于 TCP/IP 协议所固有的安全问题，开发扫描器、嗅探器、以及其它网络评审和检测工具来防止由蓄意不良的网络活动所带来的安全破坏已显得极端重要。这些活动包括：

  • IP 假冒（Spoofing）

  • “拒绝服务”攻击

  • arp 缓存污染

  • DNS 名称破坏

  • 中间人攻击

多数基于网络的 IDS 需要把主机系统网络设备设置为混杂（promiscuous）模式。该模式允许设备捕捉每个经过网络的分组。混杂模式可以通过 ifconfig 命令来设置，例如：

ifconfig eth0 promisc

运行不带选项的 ifconfig 会显示出 eth0 现在处于混杂（PROMISC）模式。

eth0      Link encap:Ethernet  HWaddr 00:00:D0:0D:00:01
          inet addr:192.168.1.50  Bcast:192.168.1.255  Mask:255.255.252.0
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:6222015 errors:0 dropped:0 overruns:138 frame:0
          TX packets:5370458 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2505498554 (2389.4 Mb)  TX bytes:1521375170 (1450.8 Mb)
          Interrupt:9 Base address:0xec80

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:21621 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21621 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1070918 (1.0 Mb)  TX bytes:1070918 (1.0 Mb)

使用一个类似于 tcpdump（包括在红帽企业 Linux 中）的工具，我们能够看到网络中的大量交通：

tcpdump: listening on eth0
02:05:53.702142 pinky.example.com.ha-cluster > \
 heavenly.example.com.860:  udp 92 (DF)
02:05:53.702294 heavenly.example.com.860 > \
 pinky.example.com.ha-cluster:  udp 32 (DF)
02:05:53.702360 pinky.example.com.55828 > dns1.example.com.domain: \
 PTR? 192.35.168.192.in-addr.arpa. (45) (DF)
02:05:53.702706 ns1.example.com.domain > pinky.example.com.55828: \
 6077 NXDomain* 0/1/0 (103) (DF)
02:05:53.886395 shadowman.example.com.netbios-ns > \
 172.16.59.255.netbios-ns: NBT UDP PACKET(137): QUERY; BROADCAST
02:05:54.103355 802.1d config c000.00:05:74:8c:a1:2b.8043 root \
 0001.00:d0:01:23:a5:2b pathcost 3004 age 1 max 20 hello 2 fdelay 15
02:05:54.636436 konsole.example.com.netbios-ns > 172.16.59.255.netbios-ns:\
 NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
02:05:56.323715 pinky.example.com.1013 > heavenly.example.com.860:\
 udp 56 (DF)
02:05:56.323882 heavenly.example.com.860 > pinky.example.com.1013:\
 udp 28 (DF)

你会注意到，目的地不是我们这台机器（pinky.example.com）的分组也会被 tcpdump 扫描并记录。

9.3.1. Snort

虽然 tcpdump 是一个很有用的评审工具，它并不是一个真正的 IDS，因为它并不分析或标记异常分组。tcpdump 把所有分组信息不加分析地打印到输出屏幕或日志文件中。一个正确的 IDS 将会分析分组、标记潜在的恶意分组传输、并把它贮存到一个格式化了的日志中。

Snort 是一个 IDS，它能够准确简明地成功记录恶意网络活动，并在潜在破坏出现时通知管理员。Snort 使用标准的 libcap 库和 tcpdump 作为分组记录后端。

除了它的功能外，Snort 的最受重视的特性是其灵活的攻击特征子系统。Snort 有一个可以通过互联网来添加和更新的不断更新的攻击数据库。用户可以根据新网络攻击来创建其特征，并提交到 Snort 特征邮件列表中（位于 http://www.snort.org/lists.html），因此所有的 Snort 用户都可以从中受益。这种社区共享精神使 Snort 成为最新最强健的基于网络的 IDS。

注记 | 注记
 | Snort 没有被包括在红帽企业 Linux 中，它也不被支持。本书之所以包括了对它的介绍，是想为有兴趣使用它的用户提供一个参考。

关于使用 Snort 的详情，请参见官方网站：http://www.snort.org/。

后退 | 起点 | 前进
基于主机的 IDS | 上级 | 事件响应


未来的扩充

后退 介绍 前进

2. 未来的扩充

《红帽企业 Linux 安全指南》是 Red Hat 对红帽企业 Linux 用户提供及时有效支持所做出的承诺的一部分。随着新工具和保安方法的出现，本指南也会被扩充来包括这些内容。

2.1. 递交你的反馈

如果你在《红帽企业 Linux 安全指南》中发现错别字，或者有改进本书的建议，我们很希望能收到您的来函！请向 Bugzilla 网站（http://bugzilla.redhat.com/bugzilla/）提交一份关于 rhel-sg 的报告：

在提交报告的时候，请明确指定本书的标记：

rhel-sg(ZH-CN)-3-HTML-RHI (2003-07-25T17:12)

只有指定这本指南的标记，我们才能确切了解您的指南的版本。

如果您有改变本书的建议，请尽可能详细地阐明。如果您发现了错误，请包括所在章节及段落，因此我们可以轻易地查找到。

后退 | 起点 | 前进
介绍 | 上级 | 安全问题概述


IPsec 安装

后退 第 6章 . 虚拟专用网 前进

6.10. IPsec 安装

实现 IPsec 要求你在所有 IPsec 主机（若使用主机到主机配置）或路由器（若使用网络到网络配置）上安装 ipsec-tools RPM 软件包。RPM 软件包中包含帮助你设置 IPsec 连接所基本必需的库、守护进程、和配置文件。

  • /lib/libipsec.so — 包含红帽企业 Linux 中使用的 Linux 内核与 IPsec 实现间的 PF_KEY 信任的钥匙管理套接字接口。

  • /sbin/setkey — 在内核中操作 IPsec 的钥匙管理和安全属性。该可执行文件被 racoon 钥匙管理守护进程控制。关于 setkey 的更多信息，请参阅 setkey(8) 说明书页。

  • /sbin/racoon — IKE 钥匙管理守护进程，用来管理和控制 IPsec 连接的系统之间的安全关联和钥匙共享。守护进程可以通过编辑 /etc/racoon/racoon.conf 文件而被控制。关于 racoon 的详细信息，请参阅 racoon(8) 说明书页。

  • /etc/racoon/racoon.conf — racoon 守护进程配置文件，用来配置 IPsec 连接的各个方面，包括连接中使用的验证方法和加密算式。要获得完整的指令列表，请参阅 racoon.conf(5) 说明书页。

在红帽企业 Linux 上配置 IPsec 可以通过网络管理工具来进行，也可以通过手工编辑联网和 IPsec 配置文件来进行。要通过 IPsec 来连接两个联网的主机，请参阅第 6.11 节。

要通过 IPsec 来连接两个联网的主机，请参阅第 6.11 节。要通过 IPsec 把一个 LAN/WAN 连接到另一个，请参阅第 6.12 节。

后退 | 起点 | 前进
IPsec | 上级 | IPsec 主机到主机配置


IPsec 主机到主机配置

后退 第 6章 . 虚拟专用网 前进

6.11. IPsec 主机到主机配置

IPsec 可以通过主机到主机连接的配置来连接一个桌面或工作站到另一个桌面或工作站。这类连接使用每个主机所连的网络来创建彼此间的安全隧道。主机到主机连接的要求很少，每个主机的 IPsec 配置的要求也很少。主机只需要到载体网络（如互联网）的专用连接和红帽企业 Linux 就能够创建 IPsec 连接。

创建连接的第一步是从每个工作站收集系统和网络信息。对于主机到主机连接，你需要以下信息：

  • 两个主机的 IP 地址

  • 用来把 IPsec 连接从其它设备或连接中区别出来的独特名称（如 ipsec0）

  • 固定的加密钥匙或被 racoon 自动生成的钥匙

  • 被用来初始连接和在会话中交换加密钥匙的预共享验证钥匙

例如：假定工作站 A 和工作站 B 想通过 IPsec 隧道来彼此连接。它们想使用值为 foobarbaz 的预共享钥匙来连接，并且用户同意让 racoon 自动生成和共享每个主机间的验证钥匙。两个主机用户都决定把它们的连接命名为 ipsec0。

以下是工作站 A 的主机到主机 IPsec 连接的 ifcfg 文件。在这个例子中用来识别该连接的独特名称是 ipsec0，因此其结果文件被命名为 /etc/sysconfig/network-scripts/ifcfg-ipsec0。

DST=X.X.X.X
TYPE=IPsec
ONBOOT=yes
IKE_METHOD=PSK

工作站 A 将会把 X.X.X.X 替换成工作站 B 的 IP 地址，而工作站 B 将会把 X.X.X.X 替换成工作站 A 的 IP 地址。连接被设置成引导时被引发（ONBOOT=yes），并使用预共享钥匙验证方法（IKE_METHOD=PSK）。

以下是预共享钥匙文件（叫做 /etc/sysconfig/network-scripts/keys-ipsec0），两个工作站都使用它来彼此验证。该文件的内容应该完全一致，并且只有根用户才应该有读写权。

IKE_PSK=foobarbaz

重要 重要

要改变 keys-ipsec0 文件的权限，因此只有根用户才有读写权，在创建了该文件后执行以下命令：

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0

要在任何时候改变验证钥匙，编辑两个工作站上的 keys-ipsec0 文件。两个文件必须完全一致才能保证正确的连接性。

除了 include "/etc/racoon/X.X.X.X.conf" 这个声明外，/etc/racoon/racoon.conf 文件应该完全一致。该声明（以及它引用的文件）在 IPsec 隧道被激活时被生成。对于工作站 A，include 声明中的 X.X.X.X 是工作站 B 的 IP 地址。工作站 B 的情况正好相反。下面显示了一个当 IPsec 连接被激活时的典型 racoon.conf 文件。

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
    pfs_group 2;
    lifetime time 1 hour ;
    encryption_algorithm 3des, blowfish 448, rijndael ;
    authentication_algorithm hmac_sha1, hmac_md5 ;
    compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

要启动连接，在每个主机上以根用户身份重新引导工作站或执行以下命令：

/sbin/ifup ipsec0

要测试 IPsec 连接，运行 tcpdump 工具来查看在主机（或网络）间传输的网络分组，并校验它们是否通过 IPsec 被加密了。分组应该包括 AH 头，而且应该被显示为 ESP 分组。ESP 意味着它被加密了。例如：

17:13:20.617872 pinky.example.com > ijin.example.com: \
        AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF)
后退 | 起点 | 前进
IPsec 安装 | 上级 | IPsec 网络到网络配置


IPsec 网络到网络配置

后退 第 6章 . 虚拟专用网 前进

6.12. IPsec 网络到网络配置

IPsec 还可以使用网络到网络连接配置把整个网络（如 LAN 或 WAN）连接到一个远程网络上。网络到网络配置要求你在所连接网络的每一边上设置 IPsec 路由器来处理和选路发送从一个网络上的节点到另一个远程网络上的节点间的信息。图 6-2显示了一个网络到网络的 IPsec 隧道连接。

图 6-2. 网络到网络的 IPsec 隧道连接

该图表显示了两个被互联网分开的 LAN。这些网络使用 IPsec 路由器来验证和引发使用通过互联网的安全隧道的连接。在传输中被劫获的分组将需要强力解密才能攻破保护这些 LAN 之间的分组的加密术。从 192.168.1.0/24 IP 范围的一个节点到 192.168.2.0/24 上的另一个节点间的通信对于这些节点而言是完全透明的，因为对 IPsec 分组的处理、加密、解密、以及选路都是由 IPsec 路由器一手经办。

网络到网络连接所需的信息包括：

  • 专用 IPsec 路由器的可从外部进入的 IP 地址

  • 被 IPsec 路由器提供服务的 LAN/WAN 的网络地址范围（如 192.168.0.0/24 或 10.0.1.0/24）

  • 把来自网络节点的数据选路发送到互联网的网关设备的 IP 地址

  • 用来把 IPsec 连接从其它设备或连接中区别出来的独特名称（如 ipsec0）

  • 固定的加密钥匙或被 racoon 自动生成的钥匙

  • 被用来初始连接和在会话中交换加密钥匙的预共享验证钥匙

例如：假设 LAN A 和 LAN B 想通过 IPsec 隧道来彼此连接。LAN A 的网络地址在 192.168.1.0/24 范围内，LAN B 使用 192.168.2.0/24 范围。LAN A 的网关 IP 地址是 192.168.1.254，LAN B 的网关地址是192.168.2.254。在这个例子中，网关设备也充当 IPsec 路由器。网关使用两个网络设备：eth0 被分派给可从外部进入的静态 IP 地址，它被用来进入互联网；eth1 充当在每个节点间和 eth0 设备中处理和传输 LAN 分组以便传输到互联网的选路点。

每个网络间的 IPsec 连接使用一个值为 r3dh4tl1nux 的预共享钥匙，A 和 B 的管理员都同意让 racoon 自动生成和共享每个 IPsec 路由器之间的验证钥匙。LAN A 的管理员决定把 IPsec 连接命名为 ipsec0，而 LAN B 的管理员决定把 IPsec 连接命名为 ipsec1。

以下是 LAN A 的网络到网络 IPsec 连接的 ifcfg 文件。在这个例子中用来识别该连接的独特名称是 ipsec1，因此其结果文件被命名为 /etc/sysconfig/network-scripts/ifcfg-ipsec1。

TYPE=IPsec
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=192.168.1.254
DSTGW=192.168.2.254
SRCNET=192.168.1.0/24
DSTNET=192.168.2.0/24
DST=X.X.X.X

连接被设置成引导时被引发（ONBOOT=yes），并使用预共享钥匙验证方法（IKE_METHOD=PSK）。LAN A 的管理员输入目标网关（即 LAN B 的网关 DSTGW=192.168.2.254），以及源网关（即 LAN A 的网关 IP 地址 SRCGW=192.168.1.254）。然后，管理员输入目标网络，即 LAN B 的网络范围（DSTNET=192.168.2.0/24），以及源网络（SRCNET=192.168.1.0/24）。最后，管理员输入目标 IP 地址，它是 LAN B 的可从外界进入的 IP 地址（X.X.X.X）。

以下是预共享钥匙文件（叫做 /etc/sysconfig/network-scripts/keys-ipsecX，这里的 X 对 LAN A 来说是0，对 LAN B 来说是1），两个工作站都使用它来彼此验证。该文件的内容应该完全一致，并且只有根用户才应该有读写权。

IKE_PSK=r3dh4tl1nux

重要 重要

要改变 keys-ipsec0 文件的权限，因此只有根用户才有读写权，在创建了该文件后执行以下命令：

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1

要在任何时候改变验证钥匙，编辑两个 IPsec 路由器上的 keys-ipsecX 文件。这两个钥匙必须 完全一致才能保证正确的连接性。

以下是 IPsec 连接的 /etc/racoon/racoon.conf 配置文件。注意，文件底部的 include 行只有在连接到 IPsec 隧道时才会出现，因为它是在 IPsec 连接被激活时被自动生成的。

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
    pfs_group 2;
    lifetime time 1 hour ;
    encryption_algorithm 3des, blowfish 448, rijndael ;
    authentication_algorithm hmac_sha1, hmac_md5 ;
    compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

以下是连接到远程网络的配置文件。该文件的名称为 X.X.X.X.conf（把 X.X.X.X 替换成远程 IPsec 路由器的 IP 地址）。注意，一旦 IPsec 隧道被激活，该文件会被自动生成。

;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

在启动 IPsec 连接前，内核中应该启用 IP 转发。在 shell 提示下作为根用户来启用 IP 转发：

  1. 编辑 /etc/sysctl.conf，把 net.ipv4.ip_forward 设置为 1。

  2. 执行以下命令来启用改变：

    sysctl -p /etc/sysctl.conf

要启动 IPsec 连接，重新引导 IPsec 路由器或在每个路由器上以根用户身份执行以下命令：

/sbin/ifup ipsec0

连接被激活，LAN A 和 LAN B 能够彼此通信。通过对 IPsec 连接运行 ifup，路线会通过初始脚本被自动创建。要显示网络的路线列表，运行以下命令：

/sbin/ip route list

要测试 IPsec 连接，运行 tcpdump 工具来查看在主机（或网络）间传输的网络分组，并校验它们是否通过 IPsec 被加密了。分组应该包括 AH 头，而且应该被显示为 ESP 分组。ESP 意味着它被加密了。例如，要检查 LAN A 的 IPsec 连接，键入：

tcpdump -n -i eth0 host lana.example.com

分组应该包含 AH 头，应该为显示为 ESP 分组。ESP 意味着它被加密了。例如（反斜线代表应该在一行上继续）：

12:24:26.155529 lanb.example.com > lana.example.com: AH(spi=0x021c9834,seq=0x358): \
      lanb.example.com > lana.example.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
      (ipip-proto-4)
后退 | 起点 | 前进
IPsec 主机到主机配置 | 上级 | 防火墙


DMZ 和 iptables

后退 第 7章 . 防火墙 前进

7.5. DMZ 和 iptables

你还可以设置一些把交通选路发送到某些机器（如专用 HTTP 或 FTP 服务器）的规则，这些机器最好是位于停火区域（de-militarized zone，DMZ）的和内部网络分开的机器。要设置一条把所有进入的 HTTP 请求都选路发送到 IP 地址为 10.0.4.2、端口为80（LAN 192.168.1.0/24 范围之外）的专用 HTTP 服务器的规则，网络地址转换（NAT）会调用 PREROUTING 表来把这些分组转发到恰当的目的地：

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT \
        --to-destination 10.0.4.2:80

使用这项命令，所有来自 LAN 以外的到端口80的 HTTP 连接都会被选路发送到和内部网络分离的另一个网络上的 HTTP 服务器上。这种网络分段会比允许到内部网络中的机器上的 HTTP 连接更安全。如果 HTTP 服务器被配置接受安全连接，那么端口443也必须被转发。

后退 | 起点 | 前进
FORWARD 和 NAT 规则 | 上级 | 病毒和假冒 IP 地址


硬件安全

后退 附录 A. 硬件和网络保护 前进

A.2. 硬件安全

由美国 FBI 和计算机安全学院（CSI）在2000年发行的研究表明，百分之七十以上被报告的的对保密信息和资源的攻击出现在机构内部。实现内部安全政策和实现外部安全政策一样重要。本节描述了一些管理员和用户可以采取的用来保护他们的系统免遭内患的常用措施。

在多数情况下，职员的工作站，特别是位于被正确配置的防火墙之后的工作站，成为远程攻击目标的可能性不是很大。可是，你仍可以实施一些防护措施来使个体工作站资源免遭内部或物理攻击。

现代工作站和家用 PC 都有在硬件级别上控制系统资源的 BIOS。工作站用户可以在 BIOS 中设置管理口令来防止蓄意不良的用户使用或启动系统。BIOS 口令会阻止蓄意不良的用户引导你的系统，从而避免用户快速地存取或盗窃贮存在硬盘上的信息。

然而，如果蓄意不良的用户盗窃了 PC（在携带便携电脑或其它可移设备的频繁旅行人员中最常见的盗窃行为），并将它带到一个可以把 PC 解体的地点。BIOS 口令就不会阻止攻击者移除硬盘驱动器，将它安装到另一个无 BIOS 限制的 PC 上，再挂载这个硬盘驱动器来读取其中的内容。在这些情况下，推荐你给工作站上锁以便限制对内部硬件的使用。专用的安全防护系统，如可上锁的铁柜，可以被连接到 PC 和便携电脑的底盘上来防止盗窃；还可以在底盘上加上密码锁来防止内部使用。这类硬件在 Kensington 和 Targus 等生产厂商中都有很多种。

服务器硬件，特别是生产服务器，通常是被挂在服务器房间中的架子上的。服务器柜通常有可上锁的门，个体服务器的底盘也有可上锁的前门，以防错误的（或故意的）的关机。

企业还可以利用“同一地点服务”提供者来安置他们的服务器，因为同一地点服务提供者提供更高的带宽、时刻技术支持、以及在系统安全和服务器安全方面的专家技术。对于要为 HTTP 传输或流式媒介服务而向外寻求安全及连接服务来说，它是一种有效手段。然而，特别对于中小型企业而言，其费用却会令人望而却步。同一地点服务的设施以安全性著称，它时刻被训练有素的保安人员严密防守和监视。

后退 | 起点 | 前进
硬件和网络保护 | 上级 | 常见的漏洞利用和攻击


实施事件响应计划

后退 第 10章 . 事件响应 前进

10.3. 实施事件响应计划

一旦制定了行动计划，它必须被严格遵守并积极实施。在积极实施过程中，不管是计划在哪一方面出现疑问都会在破坏事件发生的时候导致不理想的响应时间和停运时期。这时候就体现出了实际经验的价值。如果在计划付诸于行动之前没有人对其质疑，计划的方方面面都应该被直接有关的人员和部门严格遵守并执行。

如果检测到了安全破坏，并且 CERT 能够对其采取快速行动，这些行动也可以多种多样。CERT 组可以决定禁用网络连接；断开所有受到影响的系统；给漏洞打补丁；然后在事态进一步复杂化之前迅速地重新连接。该行动组还可以观察入侵者并跟踪他们的行动。他们甚至还能够把入侵者重导向到一个蜜罐（honeypot） — 一个包含故意存放的错误数据的系统或网络的一个组成部分 — 中，以便安全地跟踪入侵者的行动而不干扰正常的生产资源。

对事件的响应还应该尽可能地包含信息收集。运行进程、网络连接、文件、目录、诸如此类，都应该在实时内被积极地审核。对生产资源定期检查比较有助于跟踪恶作剧服务或进程。CERT 成员和在职专家是跟踪系统上此类异常现象的优秀资源。在运行 top 或 ps 命令的时候，系统管理员知道哪些进程应该出现，哪些进程不应该出现。网络管理员在运行 Snort 或 tcpdump 的时候，对正常的网络交通应该是什么样子也会了如指掌。这些小组成员应该了解他们的系统，而且应该能够比对体系不熟悉的人更快地觉察到异常现象。

后退 | 起点 | 前进
制定事件响应计划 | 上级 | 调查事件


调查事件

后退 第 10章 . 事件响应 前进

10.4. 调查事件

调查计算机破坏就如同调查犯罪现场一样。侦探们会收集证据；注意所有异常线索；并总结丢失的和损坏的物品。对计算机攻击的分析可以在攻击正在发生的时候进行，也可以进行事后调查分析（post-mortem）。

虽说信任被攻击的系统上的日志文件是不明智的，但是你还可以使用其它工具来帮助你分析情况。这些工具的目的和功能都不尽相同，但是它们大多都会创建媒介、交关事件和进程的位图映像；显示低级文件系统信息；并在可能的时候恢复删除的文件。

使用 script 命令来记录所有在泄密的系统上进行的调查行动也是一个好办法。如以下例子所示：

script -q <file-name>

把 <file-name> 替换成 script 日志的文件名。总是把该日志文件保存在泄密系统的硬盘以外的介质上 — 软盘就这个目的而言就特别有用。

通过记录所有行动，你就会建立一个审核行踪。这在捕获了攻击者后就会显示出其价值。

10.4.1. 收集证据映像

创建媒介的位图映像是一个比较现实的第一步骤。如果要进行数据化验工作，它还是一个必需的条件。推荐你做两份映像：一份用于分析调查，一份和其它证据原件一起保存以用于法律目的。

你可以使用 dd 命令来创建被破坏系统的一个整块映像。dd 命令是红帽企业 Linux 的 coreutils 软件包中的一部分。所创建的整块映像可以被用作调查证据，或用来和信任的映像做比较。假定系统上有一个你想制作映像的硬盘，把它连接为你的系统的从属，然后使用 dd 命令来创建映像文件，如：

dd if=/dev/hdd bs=1k conv=noerror,sync of=/home/evidence/image1

这个命令会使用 1k 的块来创建一个叫做 image1 的单个文件。conv=noerror,sync 选项强制 dd 即便在驱动器上遇到了坏块也要继续读取和转储数据。现在，你就可以研究这个映像文件，甚至试图恢复删除的文件了。

10.4.2. 收集入侵后的信息

数字化验和分析这个课题本身的涉及面比较广泛，可是它所用的多数工具却是体系特有的，而且不能被通用。然而，事件响应、分析、和恢复是很重要的课题。若具备了恰当的知识和经验，红帽企业 Linux 能够成为执行这类分析的优秀平台，因为它包括了好几种用于执行事后响应和修复的工具。

表 10-1详细的介绍了一些用于文件审核和管理的命令。它还列举了一些能够被用来正确识别文件和文件属性（如权限和存取日期）的例子，因此你可以收集更多证据来进行分析。这些工具，当和入侵检测系统、防火墙、被强化的服务、以及其它保安措施一起使用时，能够帮助你在发生攻击时减小潜在的破坏程度。

注记 | 注记
 | 关于每个工具的详细信息，请参考相应的说明书页。
命令 | 功能 | 例子
dd | 创建文件和分区的位图映像（或磁盘转储，disk dump）。再对每个映像进行 md5sums 检查，管理员就能够比较一下分区或文件在被破坏前的映像和被破坏后的映像，来决定校验和是否匹配。 | dd if=/bin/ls of=ls.dd |md5sum ls.dd >ls-sum.txt
grep | 在文件和目录中找出有用的文本信息，如权限、脚本改变、文件属性等等。多数用作被另一个命令（如 ls、ps、或 ifconfig）管道输出的命令。 | ps auxw |grep /bin
strings | 显示文件中的可显示字符。这在审核可执行文件（如 mail 命令）中的异常情况时最有用。你可以注意到陌生的地址或者到非标准的日志文件的记录。 | strings /bin/ps |grep 'mail'
file | 根据格式、编码、所链接的库（若有）、以及文件类型（二进制、文本等）来判定文件的特性。它可以用来判定 /bin/ls 之类的可执行文件是否已被静态库修改了。这种迹象表明该可执行文件已经被蓄意不良的用户安装的文件替换了。 | file /bin/ls
find | 在目录中搜索特定文件。它在按照关键字、存取日期和时间、权限等来搜索目录结构上很有用途。这有助于管理员执行对某些文件或目录的常规系统审核。 | find -atime +12 -name *log* -perm u+rw
stat | 显示关于某文件的各类信息，包括最后存取时间、权限、UID 和 GID 位的设置等等。它对于检查某个遭到破坏的系统可执行文件在何时被最后使用或修改方面有用。 | stat /bin/netstat
md5sum | 使用 md5 散列算式来计算128位的校验和。你可以使用这个命令来创建一个文本文件，在其中列举所有可能会在安全破坏中被修改或替换的重要文件。把这个校验和重新导向到一个文件来创建一个简单的校验和数据库，然后把这个文件复制到只读介质如光盘上。 | md5sum /usr/bin/gdm >>md5sum.txt

表 10-1. 文件审核工具

后退 | 起点 | 前进
实施事件响应计划 | 上级 | 恢复资源


制定事件响应计划

后退 第 10章 . 事件响应 前进

10.2. 制定事件响应计划

在组织机构中制定一个事件响应计划（incident response plan）；使之被全体支持；并且定期的测试它；这些都是非常重要的措施。一个良好的事件响应计划可能会在最大程度上减少安全破坏带来的影响。它甚至会减少消极宣传。

从安全小组的角度上看，安全破坏是否会发生并不重要（因为这类事件的发生是使用不可信任的载体网络如互联网来进行商业运转的必然组成部分），但是安全破坏发生的时机却很重要。不要因此而认为你的系统是薄弱的或有可乘之机的。你需要认识到，只有给予足够的时间和资源，即便是最安全的系统或网络也会被人攻破。位于 http://www.securityfocus.com 的 Security Focus 网站提供了有关安全破坏和弱点的最新详细信息。从对公司网站的频繁改头换面，到2002年发生的对 DNS 根名称服务器进行的试图瘫痪整个国际互联网的攻击[1]，该网站都有详细描述。

认识到系统破坏的不可避免性的积极面是，它允许安全小组制定一个能够最小化潜在损失的行动计划。利用专业知识和行动计划，安全小组就可以用一种井然有序而又灵敏快捷的态度来在逆境中运筹自如。

事件响应计划自身可以分成四个阶段：

  • 停止或减小事件影响的立即措施

  • 事件调查

  • 受影响的资源的恢复

  • 向适当途径报告事件

事件响应必须果断，行动必须迅速。多数情况下不容你犯错。通过演习紧急事件并测量响应时间，我们有可能逐渐形成一种培养速度和准确性的方法。快速反应还可能会减小被系统攻击所造成的资源不可用和潜在的损失。

事件响应计划具备一些特殊要求，它们包括：

  • 一组在职专家（计算机紧急响应组，Computer Emergency Response Team）

  • 在法律上被审核并批准的策略

  • 公司的财政支持

  • 上级管理支持

  • 现实可行的行动计划

  • 物理资源，例如：冗余的存储器、备用系统和备份服务

10.2.1. 计算机紧急情况响应组（CERT）

计算机紧急情况响应组（Computer Emergency Response Team，CERT）的组成人员是能够在灾难性计算机事件发生的时候采取快速行动的在职专家。为 CERT 搜寻具备关键能力的人员非常具有挑战性。合适的人员这一概念不仅仅是指技术上的出类拔萃，它还包括一些后勤性事务，如所在位置、时间的灵活性、以及在发生紧急情况时不顾个人利益而以大局为重的品格；紧急情况可能会随时发生，所有的 CERT 成员都必须愿意接受这种随意性挑战，而且乐此不疲。

典型的 CERT 成员包括系统管理员和网络管理员，以及信息安全部门的成员。系统管理员会提供对系统资源的知识和见解，包括可用的数据备份、硬件备份等等。网络管理员会提供他们在网络协议方面的知识以及动态地重新为网络交通选路的能力。信息安全人员在全面跟踪分析安全问题以及执行对危及系统的事后调查研究方面能够发挥作用。

CERT 人员应该有一定的冗余性，虽然这并不总是很现实。如果某机构在核心部门的人力不够，那么就要尽可能地实施“交叉培训”。注意，如果执掌数据安全和完好性关键的只有一人，那么如果这个人不在，整个机构都会茫然无措。

10.2.2. 法律上的考虑

事件响应的一些重要方面与法律问题有关。在制定安全计划的时候应该让处理法律事务的人员参加。就象每个公司都应该有它自己的公司安全法规一样，每个公司都应该有它自己的从法律角度而言的事件处理方法。地方、州省、以及中央司法问题超出了本书的讨论范围，但是本书之所以仍旧提及了它们是因为执行事后调查分析在一定程度上是被法律问题所左右的。法律专家可以作为技术人员在系统破坏，泄漏客户的私人、医疗、或财政记录，以及紧要使命环境如医院、银行的服务恢复上提供法律影响方面的顾问。

注

[1]

http://www.gcn.com/21_32/web/20404-1.html

后退 | 起点 | 前进
事件响应 | 上级 | 实施事件响应计划


报告事件

后退 第 10章 . 事件响应 前进

10.6. 报告事件

事件响应计划的最后一部分是报告事件。安全组应该在进行事件响应的时候开始记录其过程，这样就能够正确地向本地和中央权力机构（或者是多生产商的软件弱点机构，如 CVE 这个位于 http://cve.mitre.org 的常见弱点和漏洞网站）报告这个事件。根据企业聘用的法律顾问类型而定，可能还需要进行事后分析调查。即使事后分析调查不是必需的行动，它也能够帮助你了解怪客的心态以及你的系统结构，这样就能够帮助你防御未来的破坏行为。

后退 | 起点 | 前进
恢复资源 | 上级 | 附录


恢复资源

后退 第 10章 . 事件响应 前进

10.5. 恢复资源

在事件响应过程中，CERT 小组既应该进行调查研究，也应该努力进行数据和系统恢复。不幸的是，破坏的性质会决定恢复的行动策略。这时候，若拥有了备份的或备用的冗余系统就会价值菲浅。

要恢复系统，响应组必须把所有停运的系统或程序重新联机，例如验证服务器、数据库服务器，以及其它生产资源。

强烈建议你备有生产备份硬件，如额外的硬盘驱动器、热备用服务器等等。现成系统应该载入了所有生产软件，能够被立即使用。也许，只有最近期的和最相关的数据需要被导入。这个现成系统应该从可能会受影响的网络中隔离出来。如果攻击事件发生了，而这个备份系统也是网络的一部分，那么这个备份系统就毫无意义了。

系统恢复是一项冗长而繁琐的工作。在许多情况下，你都有两种行动可选。管理员可以完整地重新安装操作系统，再恢复所有数据和应用程序。或者，管理员可以给出了问题的地方打补丁，然后再让受影响的系统重新会到生产环境中。

10.5.1. 重新安装系统

执行完整的重新安装会确保受影响的系统中的所有“特洛伊木马”、后门、和恶意进程都被清除。重新安装还能够确保所有数据（如果从可信任的备份源中恢复了）都没有被恶意篡改。它唯一的缺陷是，从零开始重建系统会花较长时间。不过，如果你有可用的热备份系统，你唯一要做的事只是转储最近期的数据，然后系统停运时间就会被大大缩短。

10.5.2. 给系统打补丁

另一种恢复方法是给受影响的系统打补丁。这种方法执行起来比较危险，应该格外谨慎从事。其危险性在于决定你是否已经完全地清除了系统内的“特洛伊木马”、漏洞和破坏性数据。如果使用的是模块化内核，那么给一个受损系统打补丁就更加困难。多数 rootkits（怪客留下的能够获得你的系统上的根特权的程序或软件包）、特洛伊木马系统命令、以及 shell 环境被刻意设计用来从例行审核中隐藏恶意行为的行踪。如果使用了打补丁的方法，你只应该使用信任的二进制程序（例如，来自挂载的只读光盘的程序）。

后退 | 起点 | 前进
调查事件 | 上级 | 报告事件


对网络安全的威胁

后退 第 2章 . 攻击者和弱点 前进

2.2. 对网络安全的威胁

在配置网络的以下方面时，某些不良习惯会增加系统被攻击的危险性。

2.2.1. 不安全的体系

一个被错误配置的网络是未经授权用户的主要入口。把一个基于信任的开放型本地网络向极不安全的互联网敞开就如同住在一个罪案重重的街区里却不封门闭户一样 — 在一段时间内可能什么也不会发生，但是最终总会有人要利用这个机会。

2.2.1.1. 广播式网络

系统管理员经常忽略联网硬件在保安计划里的重要性。简单的硬件，如集线器和路由器，依赖广播或非转换的原理；这就是说，不管什么时候某个节点通过网络来传输数据，集线器或路由器都会广播这些数据分组，直到接收节点收到并处理这些数据为止。这种方法最容易被外界入侵者和本地未经授权的用户施行地址解析协议（arp）或媒体访问控制（MAC）的地址假冒攻击。

2.2.1.2. 中央化的服务器

另一种潜在的联网危险是对中央化计算系统的使用。许多企事业中最常使用的节省开支措施是把所有的服务都集中于单个功能强大的机器上。这种方法会很省事，因为它比多服务器的配置要更好管理，而且开支也少。然而，中央化的服务器也给网络带来了单一失效点的问题。如果中央服务器泄密了，这就会导致整个网络都变得完全无用，甚至造成数据被篡改或盗窃。在以上这些情况下，中央服务器就成为一个敞开的大门，允许任何人进入整个网络。

后退 | 起点 | 前进
攻击者和弱点 | 上级 | 对服务器安全的威胁


对服务器安全的威胁

后退 第 2章 . 攻击者和弱点 前进

2.3. 对服务器安全的威胁

服务器安全和网络安全同等重要，这是因为服务器中常常贮存着机构内部的大量重要信息。如果一个服务器泄密了，其中的所有内容都可以被怪客随心所欲地利用。以下各节讨论了一些主要问题。

2.3.1. 未用的服务和打开的端口

红帽企业 Linux 的完整安装包括1200多个应用程序和库软件包。不过，多数服务器管理员并不打算安装发行版本中的每个软件包，而倾向于进行基本安装，再包括几个服务器程序。

在系统管理员中常会发生的是，他们安装了操作系统却不关注那些被安装了的程序。这可能会导致问题，因为不需要的服务可能会被安装，并使用默认设置配置，而且可能还被默认启用。这就会导致不需要的服务，如 Telnet、DHCP、或 DNS 在服务器或工作站上运行，而管理员对此却一无所知。由此而带来到该服务器的不受欢迎的交通，甚至给怪客制造了一条潜在的路径。关于关闭端口和禁用不使用的服务的信息，请参阅第5章 。

2.3.2. 未打补丁的服务

多数被包括在默认安装中的服务器程序是稳定的、被全面测试过的软件。在生产环境中被使用了多年后，这些软件的源码已经被全面精化，许多软件中存在的错误已被发现并修正。

然而，世界上并不存在完美无缺的软件，万事都有提高的余地。除此之外，由于更新的软件在生产环境中的使用时间不长，或者因为它没有其它服务器软件那么流行，它可能没有像人们所期待的一样被全面测试过。

开发者和系统管理员经常会在服务器程序中发现可被当作漏洞而利用的程序错误并在错误跟踪和安全相关的网站（如 Bugtraq 邮件列表：http://www.securityfocus.com）或计算机紧急响应组（CERT）的网站（http://www.cert.org）上公开这些信息。虽然这些机制是向社区发出安全弱点警告的有效方法，但它却要依靠管理员来及时地给各自的系统打补丁。如果怪客也能够获得同样的弱点跟踪服务，他们一有机会就会使用这些信息来攻击未加补丁的系统。优秀的系统管理要求你时刻警惕、时刻跟踪错误、并且进行正确的系统维护来保证安全的计算环境。

关于保持系统更新状态的详情，请参阅第3章 。

2.3.3. 管理疏忽

忘记给系统打补丁的管理员是威胁服务器安全的最大因素。据系统管理网络和安全学院（System Administration Network and Security Institute，SANS）调查，计算机安全弱点的主要导致原因是“指派未经培训的人员来维护安全，并且不提供使其能够胜任的培训和时间”[1]。这不仅是指那些没有经验的管理员，也是指那些过分自信或自以为是的管理员。

某些管理员忘记了给他们的服务器和工作站打补丁，而另一些则忘记了查看来自系统内核或网络交通的日志消息。另一个常见错误是不改变服务的默认口令或密码。例如，某些数据库有默认的管理口令，因为数据库开发者假定系统管理员在安装后会立即改变这些口令。如果某个数据库管理员忘记了改变口令，甚至一个毫无经验的怪客也能够使用众所周知的默认口令来获得到数据库的管理特权。这里仅列举了几种漫不经心的管理给服务器所带来的潜在威胁。

2.3.4. 带有固有不安全因素的服务

如果所选的网络服务带有固有的不安全因素，即便是警惕性最高的组织也可能成为受害者。例如，许多服务是在用于可信任网络的假定条件下被开发的；然而，一旦这些服务可通过互联网被使用，这个假定条件就不适用了。互联网本身就带有固有的不可信任性。

还有一类不安全网络服务是那些需要用户名和口令来验证的服务。Telnet 和 FTP 就属于这类服务。如果分组嗅探软件正在监视远程用户和这类服务器间的交通，口令就能够被轻而易举地窃取。

以上提及的服务还会轻易地遭到安全行业称之为“中间人”（man-in-the-middle）的攻击。在这类攻击中，怪客会设计让网络上的一个已攻破的的名称服务器指向自己的机器而不是实际的目标服务器来重新导向网络交通。一旦某人打开了一个到该服务器的远程会话，怪客的机器就会充当一个隐型导管，悄悄地坐在远程服务和毫无疑心的用户间截取信息。怪客可以用这种方法来收集管理性口令和原始数据，服务器和用户对此却一无所知。

另一类不安全服务是网络文件系统和信息服务，如 NFS 或 NIS。它们仅仅是为 LAN 而开发的，但是不幸的是，后来又被扩展来包括 WAN（以方便于远程用户）。按照默认设置，NFS 没有配置任何验证或安全机制来防止怪客挂载 NFS 共享以便存取其中的数据。同样的，NIS 也有网络上的每个计算机都必须知道的重要信息，包括口令和文件权限。它们都存在于一个纯文本的 ACSII 或 DBM（由 ASCII 推导出的）数据库中。能够进入这个数据库的怪客就能够进入网络上的每个用户帐号，包括管理员的帐号。

按照默认设置，Red Hat 关闭此类服务。然而，管理员经常会发现他们不得不使用这些服务，因此谨慎配置就至关重要。关于安全地设置这类服务的更多信息，请参阅第5章 。

注

[1]

来自：http://www.sans.org/newlook/resources/errors.html，“assign untrained people to maintain security and provide neither the training nor the time to make it possible to do the job.”

后退 | 起点 | 前进
对网络安全的威胁 | 上级 | 对工作站和家用电脑安全性的威胁


对工作站和家用电脑安全性的威胁

后退 第 2章 . 攻击者和弱点 前进

2.4. 对工作站和家用电脑安全性的威胁

工作站和家用电脑对攻击者的吸引力可能不会像网络或服务器那么大，但是由于其上经常包含保密信息，如信用卡信息，这些机器也被系统怪客看好。工作站还能够被怪客在协调的攻击中被用作“从属”机器，而其主人对此却一无所知。由于这些原因，了解工作站的弱点也能够帮助用户避免重新安装操作系统的麻烦。

2.4.1. 不良口令

不良口令是攻击者获得对系统的访问权的最简单的方法之一。关于如何避免创建口令时的常见错误，请参阅第 4.3 节。

2.4.2. 有弱点的客户应用程序

虽然管理员可能会有一个完全安全的、全面打过补丁的服务器，这并不意味着远程用户在进入它时就是安全的。例如，如果服务器提供经由公共网络的 Telnet 或 FTP 服务，攻击者可能会在纯文本用户名和口令在网络中经过时劫获它们，然后使用这个帐号信息来进入远程用户的工作站。

甚至在使用安全协议如 SSH 的时候，如果远程用户没有时时更新他们的客户程序，他们也可能遭受某些攻击。例如，使用 SSH 第一版本的用户就有可能遭受来自蓄意不良的 SSH 服务器的 X 转发攻击。一旦连接到了服务器上，攻击者就能够不动声色地截取客户通过网络进行的击键和鼠标点击。这个问题在 SSH 协议的第二版本中被修正了，但是它却要依赖于用户自身的自觉性，看他是否关注哪些应用程序有哪些弱点，并在必要时更新这些程序。

第4章 详细讨论了管理员和家庭用户要限制计算机工作站的可乘之机所应采取的步骤。

后退 | 起点 | 前进
对服务器安全的威胁 | 上级 | 配置红帽企业 Linux 的保安系统


保护 FTP 的安全

后退 第 5章 . 服务器安全 前进

5.6. 保护 FTP 的安全

文件传输协议（FTP）是用来在网络上传输文件的早期 TCP 协议。因为所有和服务器的事务，包括用户验证，都是不经加密的，所以它也被认为是不安全的协议，应该被谨慎配置。

红帽企业 Linux 提供三种 FTP 服务器。

  • gssftpd — 使用了 Kerberos 的基于 xinetd 的 FTP 守护进程。它不在网络中传递验证信息。

  • 红帽内容加速器（Red Hat Content Accelerator，tux）— 带有 FTP 能力的内核空间万维网服务器。

  • vsftpd — 一个独立的面向安全的 FTP 服务。

以下保安原则适用于设置 vsftpd FTP 服务。

5.6.1. FTP 问候横幅

在提供用户名和口令前，所有的用户都会看到一个问候横幅。按照默认设置，该横幅含有版本信息，这有利于怪客找出系统的弱点。

要改变 vsftpd 的问候横幅，把以下指令添加到 /etc/vsftpd/vsftpd.conf 中：

ftpd_banner=<insert_greeting_here>

把以上指令中的 <insert_greeting_here> 替换成问候消息。

对于多行横幅，你最好是使用一个横幅文件。要简化对多个横幅的管理，把所有横幅都放在一个叫做 /etc/banners/ 的新目录中。在这个例子中，FTP 连接的横幅文件是 /etc/banners/ftp.msg。以下是这类文件的例子：

####################################################
# Hello, all activity on ftp.example.com is logged.#
####################################################

注记 | 注记
 | 你不必让文件的每一行都以 220 开头，如第 5.1.1.1 节中所指定。

要为 vsftpd 引用这个问候横幅文件，把以下指令添加到 /etc/vsftpd/vsftpd.conf 中：

banner_file=/etc/banners/ftp.msg

你还可能使用 TCP 会绕程序给进入连接发送附加横幅，如第 5.1.1.1 节中所描述。

5.6.2. 匿名访问

/var/ftp/ 目录的存在会激活匿名帐号。

创建这个目录的最简单方法是安装 vsftpd 软件包。该软件包会为匿名用户设置目录树，把目录的权限为匿名用户配置为只读。

按照默认设置，匿名用户不能写入任何目录。

小心 | 小心
 | 如果启用到 FTP 服务器的匿名访问，你需要留意保密信息的存储位置。

5.6.2.1. 匿名上传

要允许匿名用户上传文件，推荐你在 /var/ftp/pub/ 内创建只写目录。

要做到它，键入：

mkdir /var/ftp/pub/upload

下一步，改变权限，因此匿名用户就看不到目录中的内容，键入：

chmod 730 /var/ftp/pub/upload

长格式的目录列表看起来应该像：

drwx-wx---    2 root     ftp          4096 Feb 13 20:05 upload

警告 | 警告
 | 允许匿名用户在目录中读写的管理员经常发现他们的服务器成为被窃软件的仓库。

此外，在 /etc/vsftpd/vsftpd.conf 文件的 vsftpd 下，添加以下一行：

anon_upload_enable=YES

5.6.3. 用户帐号

因为 FTP 在不安全的网络中传递明文用户名和口令来验证，拒绝系统用户从他们的用户帐号来进入服务器是一个好办法。

要在 vsftpd 中禁用用户帐号，在 /etc/vsftpd/vsftpd.conf 中添加以下指令：

local_enable=NO

5.6.3.1. 约束用户帐号

禁用某组特定帐号（如根用户帐号，以及有 sudo 特权的用户帐号）的最简单方法是使用 PAM 列表文件，如第 4.4.2.4 节中所描述。vsftpd 的 PAM 配置文件是 /etc/pam.d/vsftpd。

你还可能在每个服务中直接禁用用户帐号。

要在 vsftpd 中禁用指定用户帐号，把用户名添加到 /etc/vsftpd.ftpusers 中。

5.6.4. 使用 TCP 会绕程序来控制访问

使用 TCP 会绕程序来控制到每种 FTP 守护进程的访问，如第 5.1.1 节中所概述。

后退 | 起点 | 前进
保护 Apache HTTP 服务器的安全 | 上级 | 保护 Sendmail 的安全


保护 Apache HTTP 服务器的安全

后退 第 5章 . 服务器安全 前进

5.5. 保护 Apache HTTP 服务器的安全

Apache HTTP 服务器是红帽企业 Linux 包括的最稳定和最安全的服务之一。保护 Apache HTTP 服务器安全的方法和技术多得数不胜数 — 在这里我们无法逐一详述。

在配置 Apache HTTP 服务器时阅读它的文档是很重要的。这些文档包括：《红帽企业 Linux 参考指南》的“Apache HTTP 服务器”这一章；《红帽企业 Linux 系统管理指南》的“Apache HTTP 服务器 配置”这一章；以及在 http://www.redhat.com/docs/manuals/stronghold/ 上的原有手册。

以下是管理员应该小心使用的配置选项列表。

5.5.1. FollowSymLinks

该指令被默认启用，在创建到万维网服务器的文档根的符号链接时请小心。例如，提供一个到 / 的符号链接就不是个好主意。

5.5.2. Indexes 指令

该指令被默认启用，但它可能不应该被启用。要阻止访问者浏览服务器上的文件，你可以删除该指令。

5.5.3. UserDir 指令

UserDir 指令被默认禁用，因为它可以确认某个用户帐号在系统上是否存在。要启用服务器上的用户目录浏览，请使用以下指令：

UserDir enabled
UserDir disabled root

这些指令为除了 /root/ 以外的所有用户目录激活浏览。要把用户添加到禁用帐号列表中，在 UserDir disabled 行中添加一个用空格隔开的用户列表。

5.5.4. 不要删除 IncludesNoExec 指令

按照默认设置，服务器端包括（server-side includes）模块不能执行命令。除非在极端必要的情况下，建议你不要改变这个设置，因为它有可能会使攻击者能够在系统上执行命令。

5.5.5. 限制对可执行目录的权限

对于任何包含脚本或 CGI 的目录，请确定只给根用户以写权限。这可以通过键入以下命令来达到：

chown root <directory_name>
chmod 755 <directory_name>

还有，总是在把脚本放入生产环境之前校验它们在系统上的运行情况符合你的设想。

后退 | 起点 | 前进
保护 NFS 的安全 | 上级 | 保护 FTP 的安全


保护 Sendmail 的安全

后退 第 5章 . 服务器安全 前进

5.7. 保护 Sendmail 的安全

Sendmail 是使用简单邮件传输协议（SMTP）的邮件传输代理（MTA）。它在其它 MTA 和电子邮件客户或分发代理之间传送电子消息。虽然许多 MTA 都能够加密彼此间的交通，多数不能够，因此通过公共网络发送邮件被认为是一 种带有固有不安全因素的通信方式。

关于电子邮件的工作原理以及普通配置的总览，请参阅《红帽企业 Linux 参考指南》的“电子邮件”这一章。本节假定你已具备如何通过编辑 /etc/mail/sendmail.mc 和运行 m4 命令来生成有效的 /etc/mail/sendmail.cf 的基本知识，这些在《红帽企业 Linux 参考指南》中都有说明。

推荐任何打算实现 Sendmail 服务器的用户解决以下问题。

5.7.1. 限制“拒绝服务”攻击

由于电子邮件的性质，一个决意要攻击某个服务器的攻击者可以轻易地使用邮件来充斥服务器，从而导致拒绝服务的攻击。通过设置 /etc/mail/sendmail.mc 的以下目录的限度，这类攻击的有效性就会大受限制。

  • confCONNECTION_RATE_THROTTLE — 服务器每秒能够接受的连接数量。按照默认设置，Sendmail 不限制连接数量。如果限度被设置并到达，以后的连接就会被延迟。

  • confMAX_DAEMON_CHILDREN — 服务器能够分出的子进程的最大数量。按照默认设置，Sendmail 不限制子进程的数量。如果限度被设置并达到，以后的连接就会被延迟。

  • confMIN_FREE_BLOCKS — 必须为服务器保留的用来接受邮件的空闲块的最少数量。默认为100块。

  • confMAX_HEADERS_LENGTH — 消息头的可接受大小的最大限度（以字节为单位）。

  • confMAX_MESSAGE_SIZE — 单个消息的可接受大小的最大限度（以字节为单位）。

5.7.2. NFS 和 Sendmail

决不要把邮件假脱机目录 /var/spool/mail/ 放在 NFS 共享文件卷上。

因为 NFS 对用户组群 ID 没有控制，因此，几个 UID 相同的用户可以收到和阅读彼此的邮件。

5.7.3. 仅邮件用户

要帮助防止本地用户利用 Sendmail 服务器上的漏洞，最好是让邮件用户只使用电子邮件程序来访问 Sendmail 服务器。邮件服务器上的 Shell 帐号不应该被允许，/etc/passwd 文件中的所有用户 shell 都应该被设置为 /sbin/nologin（根用户可能是个例外）。

后退 | 起点 | 前进
保护 FTP 的安全 | 上级 | 校验哪些端口正在监听


保护 NFS 的安全

后退 第 5章 . 服务器安全 前进

5.4. 保护 NFS 的安全

网络文件系统或 NFS 是和 portmap 以及其它相关服务一起使用的 RPC 服务，它被用来为客户机器提供可联网存取的文件系统。关于 NFS 的工作原理，请参阅《红帽企业 Linux 参考指南》的“网络文件系统（NFS）”这一章。关于配置 NFS 的信息，请参阅《红帽企业 Linux 系统管理指南》。以下各小节假定你对 NFS 的基本知识已有了解。

重要 | 重要
 | 推荐任何打算实现 NFS 服务器的用户首先按照第 5.2 节的步骤来保护 portmap 服务的安全，然后再解决下面的问题。

5.4.1. 谨慎制定网络计划

因为 NFS 在网络上明文传输所有信息，所以令服务器在防火墙背后在一个分段的安全网络上运行这一点就很重要。无论何时在不安全的网络上传递 NFS 信息都有被截取的危险。从这个角度讲，谨慎制定网络计划就有助于防御重要的安全破坏。

5.4.2. 注意语法错误

NFS 服务器通过 /etc/exports 文件来决定要导出哪些文件系统，以及把这些目录导出到哪些主机上。编辑这个文件的时候要特别小心不添加额外的空格。

例如：/etc/exports 文件中的以下行会令主机 bob.example.com 可以读写地共享 /tmp/nfs/ 目录。

/tmp/nfs/     bob.example.com(rw)

但是 /etc/exports 文件中这一行的情况却不同。它共享同一目录，让主机 bob.example.com 拥有只读权限，却给全局以读写权限。这全是由主机后面的一个空格造成的！

/tmp/nfs/     bob.example.com (rw)

使用 showmount 命令来校验哪些目录被共享，从而检查你的 NFS 共享配置是一个好习惯。

showmount -e <hostname>

5.4.3. 不要使用 no_root_squash 选项

按照默认设置，NFS 共享把根用户改成用户 nfsnobody，它是一个不具备特权的用户帐号。这样，所有根用户创建的文件都会被用户 nfsnobody 所有，从而防止了设置 setuid 的程序被上传到系统。

如果使用了 no_root_squash，远程用户就能够改变共享文件系统上的任何文件，把设置了特洛伊木马的程序留给其它用户在无意中执行。

后退 | 起点 | 前进
保护 NIS 的安全 | 上级 | 保护 Apache HTTP 服务器的安全


保护 NIS 的安全

后退 第 5章 . 服务器安全 前进

5.3. 保护 NIS 的安全

NIS 代表网络信息服务（Network Information Service）。它是叫做 ypserv 的 RPC 服务，和 portmap 以及其它相关服务一起使用，被用来在声称属于 NIS 域内的计算机间分发关于用户名、口令、以及其它保密信息的映射表。

NIS 服务器包括几个应用程序。它们是：

  • /usr/sbin/rpc.yppasswdd — 又称 yppasswdd 服务，该守护进程允许用户改变他们的 NIS 口令。

  • /usr/sbin/rpc.ypxfrd — 又称 ypxfrd 服务，该守护进程负责在网络上传输 NIS 映射表。

  • /usr/sbin/yppush — 该应用程序把 NIS 数据库的改变传播给多个 NIS 服务器。

  • /usr/sbin/ypserv — 这是 NIS 服务器守护进程。

按照今天的标准来看，NIS 不太安全。它没有主机验证机制，在网络上明文传输所有的信息，包括口令散列。结果是，在设置使用 NIS 的网络时你必须格外谨慎。更糟糕的是，默认的 NIS 配置就有其固有的不安全性。

推荐任何打算实现 NIS 服务器的用户首先按照第 5.2 节的步骤来保护 portmap 服务的安全，然后再解决下面的问题。

5.3.1. 谨慎制定网络计划

因为 NIS 在网络上明文传输保密信息，所以令服务器在防火墙背后在一个分段的安全网络上运行这一点就很重要。无论何时在不安全的网络上传递 NIS 信息都有被截取的危险。从这个角度讲，谨慎制定网络计划就有助于防御重要的安全破坏。

5.3.2. 使用像口令一样的 NIS 域名和主机名

NIS 域内的任何机器都不经验证就可以使用命令从服务器中抽取信息，只要用户知道 NIS 服务器的 DNS 主机名和 NIS 域名即可。

例如：如果某人把便携电脑连接到网络上，或从外部闯入了网络（而且成功地假冒了内部 IP 地址），以下命令会揭示 /etc/passwd 映射表：

ypcat -d <NIS_domain> -h <DNS_hostname> passwd

如果攻击者是一个根用户，他就可以通过键入以下命令来获得 /etc/shadow 文件：

ypcat -d <NIS_domain> -h <DNS_hostname> shadow

注记 | 注记
 | 如果使用了 Kerberos，/etc/shadow 文件就不会保存在 NIS 映射表中。

要使攻击者不能够轻易地获取 NIS 映射表，你可以为 DNS 主机名创建一个随机字符串，比如 o7hfawtgmhwg.domain.com。同理，你还可以创建一个不同的随机 NIS 域名。这就令攻击者进入 NIS 服务器比较困难。

5.3.3. 编辑 /var/yp/securenets 文件

如果 /var/yp/securenets 文件是空白的或不存在（按默认方式安装后的情形就会如此），NIS 就会监听所有网络。它做的第一件事是在文件中放置一对子网掩码/网络值，因此 ypserv 只会对来自恰当网络的请求做出答复。

以下是 /var/yp/securenets 文件中的示例项目：

255.255.255.0     192.168.0.0

警告 | 警告
 | 在首次使用 NIS 服务器前，决不能没有创建 /var/yp/securenets 文件就启动它。

这种技术并不提供对 IP 假冒攻击的保护，但是它至少限制了 NIS 服务器要为哪些网络提供服务。

5.3.4. 分配静态端口，使用 IPTables 规则

所有和 NIS 相关的服务器都可以被分配给指定的端口，只有 rpc.yppasswdd 例外 — 该守护进程允许用户改变他们自己的登录口令。给其它两个 NIS 服务器守护进程，rpc.ypxfrd 和 ypserv 分配端口可以允许管理员创建防火墙规则来进一步保护 NIS 服务器守护进程免受入侵者的骚扰。

要达到这个目的，把以下几行添加到 /etc/sysconfig/network 中：

YPSERV_ARGS="-p 834"
YPXFRD_ARGS="-p 835"

以下 IPTables 规则可以被用来实施服务器会监听哪些网络上的这些端口。

iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 834 -j DROP
iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 835 -j DROP

窍门 | 窍门
 | 关于使用 IPTables 命令实现防火墙的详情，请参阅第7章 。

5.3.5. 使用 Kerberos 验证

使用 NIS 验证的一个最明显的固有缺陷是，无论何时用户在机器上登录，/etc/shadow 映射表中的口令散列都会在网络上发送。如果入侵者获得了到 NIS 域的进入权，并且开始嗅探网络交通，他就可以悄悄地收集用户名和口令散列。只有有足够的时间，口令破译程序就可以猜出薄弱的口令，攻击者就可以获得对网络上有效帐号的使用权。

由于 Kerberos 使用密钥加密术，口令散列就决不会在网络上传送，从而使系统更加安全。关于 Kerberos 的详情，请参阅《红帽企业 Linux 参考指南》的“Kerberos”这一章。

后退 | 起点 | 前进
保护 Portmap 的安全性 | 上级 | 保护 NFS 的安全


保护 Portmap 的安全性

后退 第 5章 . 服务器安全 前进

5.2. 保护 Portmap 的安全性

portmap 服务是用于 RPC 服务（如 NIS 和 NFS）的动态端口分配守护进程。它的验证机制比较薄弱，而且具备为它所控制的服务分配大范围端口的能力。由于这些原因，要保护它的安全比较困难。

如果运行 RPC 服务，请遵守以下基本规则。

5.2.1. 使用 TCP 会绕程序来保护 portmap。

使用 TCP 会绕程序来限制可以使用 portmap 服务的网络或主机这一点很重要，因为 portmap 没有内建的验证方式。

更进一步，在限制对服务的使用时，只使用 IP 地址。避免使用主机名，因为主机名可以通过 DNS 污染或其它方法被伪造。

5.2.2. 使用 IPTables 来保护 portmap

要进一步限制对 portmap 服务的使用，在服务器上添加 IPTables 规则来限制到指定网络的进出是一个好办法。

以下是两个 IPTables 命令的例子，允许网络 192.168.0/24TCP 和 localhost（Nautilus 程序使用的 sgi_fam 服务所必需的）到 portmap 服务（监听端口111）的连接。所有其它分组都被放弃。

iptables -A INPUT -p tcp -s! 192.168.0.0/24  --dport 111 -j DROP
iptables -A INPUT -p tcp -s 127.0.0.1  --dport 111 -j ACCEPT

要以相似的方法限制 UDP 交通，使用以下命令。

iptables -A INPUT -p udp -s! 192.168.0.0/24  --dport 111 -j DROP

窍门 | 窍门
 | 关于使用 IPTables 命令实现防火墙的详情，请参阅第7章 。
后退 | 起点 | 前进
服务器安全 | 上级 | 保护 NIS 的安全


校验哪些端口正在监听

后退 第 5章 . 服务器安全 前进

5.8. 校验哪些端口正在监听

配置了网络服务之后，关注一下哪些端口在监听系统的网络接口这一点很重要。任何打开的端口都可能是入侵的证明。

要列举正在监听网络的端口，有两种基本方法。一种不太可靠的方法是通过键入 netstat -an 或 lsof -i 之类的命令来查询网络堆栈。这种方法之所以不太可靠是因为这些程序不连接网络上的机器，而是查看系统上在运行什么。因此，它们频繁成为攻击者的替换目标。怪客在打开了未经授权的网络端口后，就以这种方法来企图掩盖他们的踪迹。

更可靠的方法是使用 nmap 之类的端口扫描器来检查哪些端口正在监听网络。

以下从控制台发出的命令会判定哪些端口在监听来自网络上的 TCP 连接：

nmap -sT -O localhost

该命令的输出和以下相似：

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1596 ports scanned but not shown below are in state: closed)
Port       State       Service
22/tcp     open        ssh
111/tcp    open        sunrpc
515/tcp    open        printer
834/tcp    open        unknown
6000/tcp   open        X11
Remote OS guesses: Linux Kernel 2.4.0 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)

Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds

该输出显示了由于 sunrpc 服务的存在，系统正在运行 portmap。然而，端口834上还有一个神秘服务。要查看一下该端口是否和任何已知服务相关，键入：

cat /etc/services | grep 834

该命令没有返回任何输出。这表明虽然该端口是在保留范围内（即从0到1023内），并且需要根权限才能打开，它并没有关联任何已知服务。

下一步，检查使用 netstat 或 lsof 的端口的信息。要使用 netstat 检查端口834，使用以下命令：

netstat -anp | grep 834

该命令返回以下输出：

tcp   0    0 0.0.0.0:834    0.0.0.0:*   LISTEN   653/ypbind

这个开放端口在 netstat 中存在，这一点比较令人安慰，因为如果怪客在被攻击的系统上暗中打开一个端口，他们很可能不会让这个端口使用该命令被暴露出来。还有，[p] 选项揭示了打开这个端口的进程 id（PID）。在这个例子中，被打开的端口属于 ypbind（NIS），这是和 portmap 服务一起进行的 RPC 服务。

lsof 命令揭示了相似的信息，因为它也能够链接开放端口和服务：

lsof -i | grep 834

以下是这个命令中和讨论有关的输出部分：

ypbind      653        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      655        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      656        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      657        0    7u  IPv4       1319                 TCP *:834 (LISTEN)

这些工具揭示了大量关于运行在机器上的服务状态的信息。它们很灵活，能够提供关于网络服务和配置的许多信息。强烈推荐你阅读 lsof、netstat、nmap 和 services 的说明书页。

后退 | 起点 | 前进
保护 Sendmail 的安全 | 上级 | 虚拟专用网


结论

后退 第 1章 . 安全总览 前进

1.3. 结论

现在，你已经了解到安全问题的起源、成因、以及其它相关因素，你便可以决定要对红帽企业 Linux 采取哪些适当的措施。了解形成安全问题的因素和条件对于计划和实现正确的策略来说是很重要的。了解了这些信息后，这个过程就可以被正式化，在你深入推究安全问题的方方面面时，路径就会更清楚开阔些。

后退 | 起点 | 前进
安全控制 | 上级 | 攻击者和弱点


安全控制

后退 第 1章 . 安全总览 前进

1.2. 安全控制

计算机安全经常被分成三大特性鲜明的主要类别，一般被称为“控制”：

  • 物理控制

  • 技术控制

  • 管理控制

这三大类别定义了恰当安全实现的主要目标。这些控制之中还有一些子类别，它们更进一步描述了控制以及如何实现这些控制。

1.2.1. 物理控制

物理控制是一种在被规定的结构内实现安全性的措施，它用来防范或防止对保密资料未经授权的存取。物理控制的例子有：

  • 闭路监控照相机

  • 动作或热像报警系统

  • 警卫人员

  • 照片证件

  • 上锁的和带有锁定插销的钢门

1.2.2. 技术控制

技术控制使用技术作为控制对整个物理结构内和网络中的机密数据使用的基础。技术控制的范围比较广，它包括的技术有：

  • 加密

  • 智能卡

  • 网络验证

  • 访问存取控制列表（ACL）

  • 文件完好性审查软件

1.2.3. 管理控制

管理控制定义了安全问题在人员方面的因素。它涉及了机构中所有级别的人员，并使用类似以下的方法来决定哪些用户可以存取哪些资源：

  • 培训和警惕性

  • 灾难预备和恢复计划

  • 人员招聘和分工策略

  • 人员注册和记录

后退 | 起点 | 前进
安全总览 | 上级 | 结论


加密 IP 封装（Crypto IP Encapsulation，CIPE）

后退 第 6章 . 虚拟专用网 前进

6.2. 加密 IP 封装（Crypto IP Encapsulation，CIPE）

CIPE 是主要为 Linux 而开发的 VPN 实现。CIPE 使用加密的 IP 分组，这些分组被封装或“包围”在数据报（UDP）分组中。CIPE 分组被给以目标头信息，并使用默认的 CIPE 加密机制来加密。然后，这些分组再通过 CIPE 虚拟网络设备（cipcbx）和 IP 层，以及通讯公司的网络被作为 UDP 分组传输给预想中的远程节点。下面的图例显示了一个连接两个基于 Linux 网络的典型 CIPE 设置：

图 6-1. 由 CIPE 连接的网络和远程机器

该图表显示了一个在防火墙上运行 CIPE 的网络，和一个充当启用 CIPE 节点的远程客户机器。CIPE 连接仿佛是一个隧道，所有到内联网的数据都在远程节点间被选路传送。所有数据都使用动态生成的128位钥匙来加密，大文件传输还可以被进一步压缩，或者把 X 应用程序用隧道输送到远程主机。CIPE 可以被配置来在两个或更多启用了 CIPE 的 Linux 机器间通信，它还有用于基于 Win32 的操作系统的网络驱动程序。

后退 | 起点 | 前进
虚拟专用网 | 上级 | 为什么使用 CIPE？


配置客户的 CIPE

后退 第 6章 . 虚拟专用网 前进

6.6. 配置客户的 CIPE

成功地配置了 CIPE 服务器并测试了它的功能后，你现在就可以在客户机器上使用这种连接了。

CIPE 客户应该能够自动地连接和断开 CIPE 连接。因此，CIPE 包含内建的机制来为个别使用自定设置。例如，远程职员可以通过键入以下命令来连接到 LAN 上的 CIPE 设备：

/sbin/ifup cipcb0

设备应该自动出现；防火墙规则和选路信息也应该和连接一起配置。远程职员应该能够使用以下命令来终止连接：

/sbin/ifdown cipcb0

配置客户需要创建在设备被载入后需运行的脚本。服务配置本身可以通过用户创建的文件 /etc/sysconfig/network-scripts/ifcfg-cipcb0 来本地配置。这个文件中包含一些参数，如判定 CIPE 连接是否在引导时发生的参数；代表 CIPE 设备名称的参数等。以下是一个连接到 CIPE 服务器的远程客户的 ifcfg-cipcb0 文件：

DEVICE=cipcb0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

# This is the device for which we add a host route to our CIPE peer through.
# You may hard code this, but if left blank, we will try to guess from
# the routing table in the /etc/cipe/ip-up.local file.
PEERROUTEDEV=

# We need to use internal DNS when connected via cipe.
DNS=192.168.1.254

CIPE 设备的名称是 cipcb0。CIPE 设备将会在引导时间被载入（通过 ONBOOT 字段配置），而且将不会使用一种引导协议（如 DHCP）来接收该设备的 IP 地址。PEERROUTEDEV 字段决定连接到客户的 CIPE 服务器设备名称。如果这个字段中没有指定任何设备，在设备被载入后就会为它决定一个。

如果你的内部网络是在防火墙背后，你需要设置规则来允许客户机器上的 CIPE 接口发送和接收 UDP 分组。关于为红帽企业 Linux 配置防火墙的信息请参阅第7章 。我们这个配置例子中使用了 iptables 规则。

注记 | 注记
 | 客户应该这样配置，因此所有被本地化的参数都被放在一个用户创建的叫做/etc/cipe/ip-up.local 的文件中。CIPE 会话被关闭后，应该使用 /etc/cipe/ip-down.local 来还原本地参数。

客户机器上的防火墙应该被配置接受 CIPE UDP 封装分组。规则的差距可能会很大，但是对 UDP 分组的基本接受对于 CIPE 连接来说却是必需的。以下的 iptables 规则允许连接到 LAN 上的远程客户机器进行 UDP CIPE 传输；最后一条规则添加了 IP 伪装来允许远程客户与 LAN 和互联网通信。

/sbin/modprobe iptables
/sbin/service iptables stop
/sbin/iptables -P INPUT DROP
/sbin/iptables -F INPUT
/sbin/iptables -A INPUT -j ACCEPT -p udp -s 10.0.1.1
/sbin/iptables -A INPUT -j ACCEPT -i cipcb0
/sbin/iptables -A INPUT -j ACCEPT -i lo
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

你必须还在客户机器上添加用来像访问本地网络一样访问 CIPE 连接背后的节点的选路规则。这可以通过运行 route 命令来完成。在我们的例子中，客户工作站需要添加以下网络路线：

route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.1.2

以下显示了用于客户工作站的最终 /etc/cipe/ip-up.local 脚本：

#!/bin/bash -v
if [ -f /etc/sysconfig/network-scripts/ifcfg-$1 ] ; then
        . /etc/sysconfig/network-scripts/ifcfg-$1
else
        cat <<EOT | logger
Cannot find config file ifcfg-$1. Exiting.
EOF
        exit 1
fi

if [ -n ${PEERROUTEDEV} ]; then
        cat <<EOT | logger
Cannot find a default route to send cipe packets through!
Punting and hoping for the best.
EOT
        # Use routing table to determine peer gateway
        export PEERROUTEDEV=`/sbin/route -n | grep ^0.0.0.0 | head -n 1 \
           | awk '{ print $NF }'`

fi

####################################################
# Add The routes for the remote local area network #
####################################################

route add -host 10.0.1.2 dev $PEERROUTEDEV
route add -net 192.168.1.0 netmask 255.255.255.0 dev $1

####################################################
# IP TABLES Rules to restrict traffic              #
####################################################

/sbin/modprobe iptables
/sbin/service iptables stop
/sbin/iptables -P INPUT DROP
/sbin/iptables -F INPUT
/sbin/iptables -A INPUT -j ACCEPT -p udp -s 10.0.1.2
/sbin/iptables -A INPUT -j ACCEPT -i $1
/sbin/iptables -A INPUT -j ACCEPT -i lo
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
后退 | 起点 | 前进
CIPE 服务器配置 | 上级 | 定制 CIPE


定制 CIPE

后退 第 6章 . 虚拟专用网 前进

6.7. 定制 CIPE

CIPE 的配置方法多种多样，你可以在启动 ciped 时作为命令行参数来传递它们，也可以生成新的共享静态钥匙。这给安全管理员定制 CIPE 会话来在保证安全的同时还提高生成率方面提供了灵活性。

注记 | 注记
 | 最常用的参数应该被放在 /etc/cipe/options.cipcbx 文件中，它们会在运行时间被自动载入。 请注意，任何在命令行中作为选项来传递的参数将会超越和在 /etc/cipe/options.cipcbx 配置文件中设置的相应参数。

表 6-1详细描述了一些运行 ciped 守护进程时的命令行参数。

参数 | 描述
arg | 把参数传递给 /etc/cipe/ip-up 初始脚本
cttl | 设置载体生存时间值（TTL）；推荐的值是64
debug | 启用调试的布尔值
device | 给 CIPE 设备命名
ipaddr | CIPE 机器的可公开选路的 IP 地址
ipdown | 选择另一个 ip-down 脚本，而不是默认的 /etc/cipe/ip-down
ipup | 选择另一个 ip-up 脚本，而不是默认的 /etc/cipe/ip-up
key | 为 CIPE 连接指定一个共享静态密钥
maxerr | 在 CIPE 守护进程退出前允许的错误数量
me | CIPE 机器的 UDP 地址
mtu | 设置设备的最大传输单位
nokey | 不使用加密
peer | 对端的 CIPE UDP 地址
ping | 设置 CIPE 特有的（非 ICMP）保持活跃 ping 间隔
socks | 用于代理连接的 SOCKS 服务器的 IP 地址和端口号码
tokey | 设置动态钥匙的活跃时间；默认为10分钟（600秒）
tokxc | 共享钥匙互换的超时值；默认为10秒钟
tokxts | 共享钥匙互换时间戳的超时值；默认为0（无时间戳）
toping | 保存活跃 ping 的超时值；默认为0

表 6-1. CIPE 参数

后退 | 起点 | 前进
配置客户的 CIPE | 上级 | CIPE 的钥匙管理


CIPE 安装

后退 第 6章 . 虚拟专用网 前进

6.4. CIPE 安装

在 Linux 下安装 CIPE 和安装网络接口一样。CIPE RPM 软件包包含 /etc/cipe/ 中的配置文件、CIPE 守护进程（/usr/sbin/ciped-cb）、载入内核模块和激活/解除 CIPE 接口（if*-cipcb）的网络脚本、以及 /usr/share/doc/cipe-<version>/samples/ 中的配置文件范例。其中还包括了一个详细解释 CIPE 协议和各类实现细节的文本信息文件。

以下说明详细描述了一个配置范例。它涉及了一个想要安全地连接到带有 CIPE 网关的远程 LAN 的工作站客户。这个工作站使用电缆调制解调器连接的动态 IP 地址，启用了 CIPE 的网关机器使用 192.168.1.0/24 范围。这被称为是“典型”的 CIPE 配置。图 6-1显示了这种典型 CIPE 设置。

在客户和 CIPE 服务器间安装 CIPE 会允许你使用互联网作为 WAN 交通的传输媒介来进行安全的端到端连接。客户工作站通过互联网给启用了 CIPE 的防火墙发送一份文件，每个分组都被加以时间戳、并被给予接收端的地址。然后，目标防火墙读取它的头信息，剥离它，并把它传送给远程 LAN 路由器，接着再被选路发送到目标节点。整个过程天衣无缝，并对终端用户完全透明。传输的主要过程是在启用了 CIPE 的对端间完成的。

后退 | 起点 | 前进
为什么使用 CIPE？ | 上级 | CIPE 服务器配置


CIPE 的钥匙管理

后退 第 6章 . 虚拟专用网 前进

6.8. CIPE 的钥匙管理

如前面所提到，CIPE 包括一个静态链接钥匙（link key）和加密交通的安全组合来在载体网络如互联网中创建一个安全隧道。静态链接钥匙为两个启用了 CIPE 的网络安全传递信息提供了一个公共参考点。因此，这两个启用了 CIPE 的网络网关分享完全相同的钥匙这一点是极端重要的，否则 CIPE 通信就不能够进行。

生成 CIPE 钥匙需要你懂得哪类钥匙是兼容的。随机的字母数字生成器是行不通的。静态钥匙必须是128位、32字符的字符串。这些字符串可以通过运行以下命令来被创建。该命令使用 od 来创建使用 /dev/random 随机数字设备的十六进制密钥：

od -N 16 /dev/random -t x4 | awk '{print $2 $3 $4 $5}'

把输出放在 /etc/cipe/options.cipcb0 文件中以用于所有 CIPE 服务器和客户。

后退 | 起点 | 前进
定制 CIPE | 上级 | IPsec


CIPE 服务器配置

后退 第 6章 . 虚拟专用网 前进

6.5. CIPE 服务器配置

要设置 CIPE 服务器，从红帽企业 Linux 光盘或通过红帽网络来安装 cipe RPM 软件包。

重要 | 重要
 | 如果你使用的是较老的红帽企业 Linux，并且／或者有一个较老的 CIPE，你应该升级到最新的版本。

下一步是把位于 /usr/share/doc/cipe-version/samples/ 的配置文件范例复制到 /etc/cipe/ 中（这里的 version 是安装在你的系统上的 CIPE 版本）。复制完毕后，你将需要编辑 /etc/cipe/options.cipcbx（x 是从0开始的递增数字，为那些想要在 CIPE 服务器上不止有一个 CIPE 连接的客户提供）文件来包括你的 LAN 子网地址和可公共选路的防火墙 IP 地址。以下是包括在红帽企业 Linux CIPE RPM 中的 options 文件范例。在这个例子中，它被重命名为 options.cipbcb0：

# Surprise, this file allows comments (but only on a line by themselves)
# This is probably the minimal set of options that has to be set
# Without a "device" line, the device is picked dynamically

# the peer's IP address
ptpaddr         6.5.4.3

# our CIPE device's IP address
ipaddr          6.7.8.9

# my UDP address. Note: if you set port 0 here, the system will pick
# one and tell it to you via the ip-up script. Same holds for IP 0.0.0.0.
me              bigred.inka.de:6789

# ...and the UDP address we connect to. Of course no wildcards here.
peer            blackforest.inka.de:6543

# The static key. Keep this file secret!
# The key is 128 bits in hexadecimal notation.
key             xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ptpaddr 是远程 LAN 的 CIPE 地址。ipaddr 是工作站的 CIPE IP 地址。me 地址是客户的可公共选路的 IP 地址，它通过互联网发送 UDP 分组。peer 是 CIPE 服务器的可公共选路的 IP 地址。注意，客户工作站的 IP 地址是 0.0.0.0，因为它使用动态连接。CIPE 客户将会处理到 CIPE 服务器的连接。key 字段（用 x 代表；你的钥匙应该是密钥）是共享静态钥匙。这个钥匙在两个对端上必须是相同的，否则连接就不能成立。关于如何为你的 CIPE 机器生成共享静态钥匙，请参阅第 6.8 节。

这是客户工作站将会使用的被编辑过的 /etc/cipe/options.cipcb0：

ptpaddr        10.0.1.2
ipaddr         10.0.1.1
me             0.0.0.0
peer           LAN.EXAMPLE.COM:6969
key            123456ourlittlesecret7890shhhh

这是 CIPE 服务器的 /etc/cipe/options.cipcb0 文件：

ptpaddr        10.0.1.1
ipaddr         10.0.1.2
me             LAN.EXAMPLE.COM:6969
peer           0.0.0.0
key            123456ourlittlesecret7890shhhh
后退 | 起点 | 前进
CIPE 安装 | 上级 | 配置客户的 CIPE


为什么使用 CIPE？

后退 第 6章 . 虚拟专用网 前进

6.3. 为什么使用 CIPE？

CIPE 是安全管理员和系统管理员的明智选择，其原因如下：

  • CIPE 被包括在红帽企业 Linux 中，因此所有你想连接到你的内联网的红帽企业 Linux 边缘机器（如防火墙和网关机器）和个体客户机器上都可以利用它。红帽企业 Linux 还包括支持 CIPE 的加密术。

  • CIPE 使用标准的 Blowfish 或 IDEA 加密算法来支持加密。根据你所在国家的加密出口法规而定，你可以使用默认方法（Blowfish）来加密你的专用网上的所有 CIPE 交通。

  • 因为 CIPE 是基于软件的，只要运行红帽企业 Linux，任何一个较老的或闲置的机器都可以充当 CIPE 网关，所以你不必购买昂贵的专用 VPN 硬件来安全地连接两个局域网，从而给机构节省资金。

  • CIPE 被积极开发来与 iptables、ipchains、以及其它基于规则的防火墙一起使用。要和现存的防火墙规则共同存在，只需要让对端接受进入的 CIPE UDP 分组就可以了。

  • CIPE 配置是通过文本文件来完成的。这使管理员不必使用通过网络运行效果不佳的图形化工具来远程地配置 CIPE 服务器和客户。CIPE 还可以使用网络管理工具来配置。

后退 | 起点 | 前进
加密 IP 封装（Crypto IP Encapsulation，CIPE） | 上级 | CIPE 安装


IPsec

后退 第 6章 . 虚拟专用网 前进

6.9. IPsec

红帽企业 Linux 支持在公共载体网络如互联网上使用安全隧道来彼此连接远程主机和网络的协议。该协议叫做 IPsec，它可以使用主机到主机（一个计算机工作站到另一个计算机工作站）或网络到网络（一个 LAN/WAN 到另一个 LAN/WAN）来实现。红帽企业 Linux 中的 IPsec 实现使用互联网密钥交换（IKE）。它是一个被 IETF 实现的用于互相验证和连接系统间的安全关联的协议。

红帽企业 Linux 中的 IPsec 实现使用 IKE 来在互联网的主机间共享钥匙。racoon 这个钥匙守护进程处理 IKE 钥匙分发和交换任务。

后退 | 起点 | 前进
CIPE 的钥匙管理 | 上级 | IPsec 安装


测定和测试

后退 第 8章 . 弱点测定 前进

8.2. 测定和测试

弱点测定可以被分化成两类：“由外向里看”（Outside looking in）和“由里向外看”（inside looking around）。

在进行“由外向里看”的弱点测定时，你是在试图从外部打入你的系统。站在系统之外会给你提供怪客的视角。你会看到怪客所见 — 可公开选路的 IP 地址、位于 DMZ 上的系统、整个防火墙的外在界面等等。

在进行“有里向外看”的弱点测定时，你占据一定的优势，因为你是局内人，你的状态被提升为可信任的。这是你和你的同事在系统上登录后的视角。你会看到打印服务器、文件服务器、数据库、以及其它资源。

这两类弱点测定截然不同。站在局内人的角度给你更多特权 — 比局外人要多得多。可是，现在的多数机构中，保安配置的目的仍是旨在把入侵者拒之门外。在保持机构内部安全方面（如部门间的防火墙、用户级别的安全控制、内部资源的验证手续、等等）做的却相当少。典型情况下，如果从内部看，可用资源要比从外部看多得多，因为多数系统都是公司内部使用的。一旦你步出公司之外，你就会被立即给予不信任状态。你可以使用的系统资源就会大受限制。

考虑一下弱点测定和侵入测试（penetration tests）的区别。弱点测定应该是侵入测试的第一步。测定中所积累的信息将会用于测试。弱点测定是检查漏洞及潜在缺陷的过程，而侵入测试是试图利用这些漏洞缺陷的实践行为。

测定网络体系是一个动态过程。信息安全和物理安全都是动态的。执行测定只会显示一个大概，它有可能会造成一些假象，让你白担心或者空欢喜一场。

安全管理员只能尽其工具和知识经验之能。使用任何当前可用的测定工具，在系统上运行它们，你几乎可以肯定会出现一些假警报。不管这是程序的错误还是用户的错误，其结果都是一样的。工具可能会发现实际上不存在的弱点（false positive）；甚至更糟糕的是，它可能会漏掉实际上存在的弱点（false negative）。

现在，弱点测定和侵入测试之间的区别已经被表明了，在进行侵入测试前仔细评审弱点测定中的发现通常是一个良好的习惯。

警告 | 警告
 | 试图寻找生产资源上的漏洞弱点会给你的系统和网络的生成力和效率带来不利影响。

以下列表讨论了执行弱点测定会给你带来的优势。

  • 积极地将注意力集中在信息安全上

  • 在怪客找到潜在漏洞前发现它们

  • 通常导致系统的时刻更新和补丁的及时应用

  • 鼓励成长，并有助于职员深化其专业知识

  • 减少财政损失和消极宣传

8.2.1. 建立一套方法

为了帮助弱点测定中的工具选择，建立一套弱点测定方法是明智之举。不幸的是，目前还没有预先定义的或被行业批准的方法论；然而，常识和经验通常足以充当向导。

目标是什么？我们在看一个服务器还是整个网络，抑或是网络内的一切？我们是在公司之内还是公司之外？这些问题的答案是很重要的，因为它们不但能够帮助你判定应该选择哪些工具，还能够帮助你判定该如何使用这些工具。

关于建立方法论的更多信息，请参考以下网站：

  • http://www.isecom.org/projects/osstmm.htm — The Open Source Security Testing Methodology Manual (OSSTMM)，《开源安全测试方法指南》

  • http://www.owasp.org/ — The Open Web Application Security Project，开放万维网应用安全计划

后退 | 起点 | 前进
弱点测定 | 上级 | 评估工具


评估工具

后退 第 8章 . 弱点测定 前进

8.3. 评估工具

典型的测定可以从收集信息开始。在测定整个网络时，首先使用布局图来找出运行着的主机位置。找到后，逐个检查每台主机。这需要你使用另一套工具。懂得使用恰当的工具是寻找弱点的关键所在。

如同我们的日常生活一样，每件事都可以有好几种做法。执行弱点测定也是如此。操作系统、应用程序、甚至网络（根据使用协议而定）都有其特殊的测定工具。某些工具是免费的，而某些却不是。某些工具很形象易用，而某些虽然晦涩难懂又没有充足的文档，但是却有其它工具没有的功能。

找到恰当的工具不是件轻而易举的事。说到底，经验最重要。如果可能，设立一个测试试验室，尽可能地多试一些工具，记录每个工具的强弱点。回顾工具的 README 文件或说明书页。此外，还可以在互联网上寻找更多信息，例如文章、指南、甚至专门讨论某个工具的邮件列表。

以下讨论的工具只是从可使用的大量工具中截取的一小部分。

8.3.1. 使用 Nmap 来扫描主机

Nmap 被包括在红帽企业 Linux 中。它是一个很流行的工具，可以被用来判定网络布局。Nmap 已经存在多年，可能是最常使用的收集信息工具。它的说明书页对其选项和用法都有详尽的描述。管理员可以在网络上使用 Nmap 来寻找其中的主机系统和开放的端口。

Nmap 是比较合适的弱点测定的第一步。你可以制定出网络内的所有主机的布局图，甚至传递选项来试图识别在某个主机上运行的操作系统。Nmap 为建立使用安全服务和停止不使用服务的策略奠定了良好基础。

8.3.1.1. 使用 Nmap

Nmap 可以从 shell 提示下运行。在 shell 提示下，键入 nmap 命令，随后是要扫描的主机名或 IP 地址。

nmap foo.example.com

扫描的结果（可能会花几分钟时间，根据主机所在位置而定）和以下相似：

Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1591 ports scanned but not shown below are in state: closed)
Port       State       Service
22/tcp     open        ssh
25/tcp     open        smtp
111/tcp    open        sunrpc
515/tcp    open        printer
950/tcp    open        oftep-rpc
6000/tcp   open        X11

Nmap run completed -- 1 IP address (1 host up) scanned in 0 seconds

Nmap 测试多数常用网络通信端口上的监听或等待服务。这些信息对于想要关闭不必要服务的管理员来说很有帮助。

关于使用 Nmap 的更多信息，请参阅以下 URL 上的官方网站：

http://www.insecure.org/

8.3.2. Nessus

Nessus 是一个功能完全的安全扫描器。Nessus 的插件体系允许用户为他们的系统和网络自行定制。和其它扫描器一样，Nessus 只能和它所依赖的签名数据库一样有效。幸运的是，Nessus 被频繁更新。它的功能包括：完整报告、主机扫描、真实时间的弱点搜索。记住，假警报可能会出现，即便是像 Nessus 这样的功能强大而又被时时更新的工具也不例外。

注记 | 注记
 | Nessus 没有被包括在红帽企业 Linux 中，也不被支持。它被包括在文档中，只是为了给有兴趣使用这个流行程序的用户提供一个参考。

关于 Nessus 的更多信息，请参阅以下 URL 上的官方网站：

http://www.nessus.org/

8.3.3. Nikto

Nikto 是一个优秀的 CGI 扫描器。Nikto 不仅具备检查 CGI 弱点的能力，它还能够用一种比较难以捉摸的方法来进行，这样就能躲过入侵检查系统。该程序还附带了优异的文档。你在运行程序前应该仔细阅读文档。如果你的万维网服务器提供 CGI 脚本，Nikto 是检查这些服务器安全性的杰出资源。

注记 | 注记
 | Nikto 没有被包括在红帽企业 Linux 中，也不被支持。它被包括在文档中，只是为了给有兴趣使用这个流行程序的用户提供一个参考。

关于 Nikto 的更多信息，可以在以下 URL 上找到：

http://www.cirt.net/code/nikto.shtml

8.3.4. VLAD 扫描器

VLAD 是 Bindview, Inc. 的 RAZOR 组开发出来的扫描器。它可以被用来检查弱点。它会检查 SANS 十大常见安全问题（SNMP 问题、文件共享问题等等）。虽然不像 Nessus 那么功能全面，VLAD 仍值得一试。

注记 | 注记
 | VLAD 没有被包括在红帽企业 Linux 中，也不被支持。它被包括在文档中，只是为了给有兴趣使用这个流行程序的用户提供一个参考。

关于 VLAD 的更多信息可以在以下 URL 上的 RAZOR 组的网站上找到：

http://razor.bindview.com/tools/vlad/index.shtml

8.3.5. 预先考虑未来需要

根据你的目标和资源而定，可以使用的工具不胜枚举。这些工具有用于无线网络、Novell 网络的，也有用于 Windows 系统、Linux 系统的。执行测定的另一个重要部分可能会包括审核物理安全性、人员安全审查、或声音/PBX 网络测定。一些新的概念，如 war walking — 扫描企业物理结构的边缘来寻找无线网络的可乘之机 — 是你可以进行调查的新兴概念，若必要，还可以包括在你的弱点测定中。在计划和执行弱点测试过程中，唯一的限制只是你的想象力和系统的暴露程度。

后退 | 起点 | 前进
测定和测试 | 上级 | 入侵和事件响应


BIOS 和引导装载程序的安全性

后退 第 4章 . 工作站保安 前进

4.2. BIOS 和引导装载程序的安全性

使用口令保护 BIOS（或相当于 BIOS 的系统）和引导装载程序可以防止能够物理进入系统的未经授权的用户使用可移介质来引导或通过单用户模式来获得根权限。但是防御这类攻击的安全措施既依赖于工作站上信息的保密程度，也依赖于机器的地点。

例如，如果机器在展销会上被使用，并且不包含任何保密信息，可能防御这类攻击就不那么重要。然而，如果在同一个展销会上，某个雇员的便携电脑无人看管，但是其中含有到公司网络的未加密的 SSH 密钥，它就可能会导致影响整个公司的重大安全问题。

从另一方面考虑，如果工作站位于只有被授权或被信任的人员才能进入的地方，那么保卫 BIOS 或引导装载程序的安全性可能就根本不必要。

4.2.1. BIOS 口令

以下是使用口令来保护计算机 BIOS[1]的两个主要原因：

  1. 防止对 BIOS 设置的改变 — 如果入侵者可以进入 BIOS，他们就可以把它设置为从软盘或光盘引导。这就使他们能够进入救援模式或单用户模式，从而允许他们在系统上放置恶意程序或复制保密数据。

  2. 防止系统被引导 — 某些 BIOS 允许你使用口令来保护引导进程。当激活时，攻击者在 BIOS 启动引导装载程序前就不得不输入口令。

因为设置 BIOS 口令的方法因计算机厂商而各有不同，请参考你的计算机手册来获得特有说明。

如果你忘记了 BIOS 口令，它可以通过母板上的跳线或断开 CMOS 电池的连接来重设。由于这个原因，在可能的时候最好能锁住电脑。不过，这么做之前，请先参考一下计算机或母板的说明手册。

4.2.1.1. 保护非 x86 平台的安全

其它平台使用不同的程序来执行和 x86 系统上的 BIOS 基本相似的低级任务。例如，Intel® Itanium™ 计算机使用可扩展固件界面（Extensible Firmware Interface，EFI）Shell。

关于使用口令来保护其它体系上的 BIOS 类程序的说明，请参阅厂商的说明。

4.2.2. 引导装载程序口令

以下是使用口令来保护 Linux 引导装载程序的主要原因：

  1. 防止进入单用户模式 — 如果攻击者能够引导入单用户模式，他就可以成为根用户。

  2. 防止进入 GRUB 控制台 — 如果机器使用 GRUB 作为引导装载程序，攻击者可以使用 GRUB 编辑界面来改变它的配置或使用 cat 命令来收集信息。

  3. 防止进入非安全的操作系统 — 如果它是双引导系统，攻击者可以在引导时选择操作系统，例如 DOS，它会忽略存取控制和文件权限。

红帽企业 Linux 为 x86 平台包括了两个引导装载程序：GRUB 和 LILO。要详细查看这两个引导装载程序，请参考《红帽企业 Linux 参考指南》中的“引导装载程序”这一章。

4.2.2.1. 用口令保护 GRUB

GRUB 可以通过在它的配置文件中添加一个口令（password）指令来解决第 4.2.2 节中列举的前两个问题。要这么做，首先决定要使用什么口令，然后打开 shell 提示，登录为根用户，键入：

/sbin/grub-md5-crypt

在提示时，键入 GRUB 口令，然后按[Enter]。这会返回一个口令的 MD5 散列。

下一步，编辑 GRUB 配置文件 /boot/grub/grub.conf。打开文件，在主体的 timeout 行下添加以下行：

password --md5 <password-hash>

把 <password-hash> 替换成 /sbin/grub-md5-crypt [2] 返回的值：

下次系统引导时，如果你不首先按 [p] 和 GRUB 口令，GRUB 菜单就不会允许你进入编辑器或命令界面。

不幸的是，这个办法并不能防止攻击者在双引导环境中引导不安全的操作系统。要解决这个问题，你必须编辑 /boot/grub/grub.conf 文件中的另一个部分。

寻找不安全操作系统的 title 行，然后紧跟在下面添加一行 lock。

对于 DOS 系统，该实例应该和以下的启动方式相似：

title DOS
lock

警告 | 警告
 | /boot/grub/grub.conf 文件的主体中必须有 password 行才能使这种方法正确运行。否则，攻击者就可以进入 GRUB 编辑器界面，然后删除 lock 行。

要为某个特定内核或操作系统创建不同的口令，在那个实例中添加一个 lock 行，再紧跟一行 password。

每个使用独特口令来保护的实例开头都应该和以下相似：

title DOS
lock
password --md5 <password-hash>

4.2.2.2. 用口令保护 LILO

LILO 是一个比 GRUB 简单的引导装载程序，它不提供命令界面，因此攻击者在内核被载入前无法获得到系统的互动存取。不过，攻击者仍能够引导单用户模式或不安全的操作系统。

使用口令保护 LILO 可以通过在配置文件的全局部分添加一个口令指令来达到。要这么做，打开一个 shell 提示，登录为根用户，编辑 /etc/lilo.conf 文件。在第一个 image 实例前，添加一个和以下相似的口令指令：

password=<password>

在上面的指令中，把 <password> 替换成 LILO 的口令。

重要 | 重要
 | 在编辑 /etc/lilo.conf 时，你必须运行 /sbin/lilo -v -v 命令来使改变生效。如果口令被配置了，除了根用户外的所有人都可以读取这个文件，LILO 会正确安装，但是它会通知用户该配置文件的权限没有被正确设置。

如果不想使用一个全局口令，口令指令可以被添加到和内核及操作系统相应的实例中。要这么做，把口令指令添加到紧跟在 image 下的一行。完成后，使用口令保护的实例的开头就和以下相似：

image=/boot/vmlinuz-<version>
        password=<password>

在前面的例子中，使用内核版本替换 <version>，使用该内核的 LILO 口令替换 <password>。

你还有可能在防止用户不使用口令而指定参数的同时不进行口令校验而允许引导内核或操作系统。要做到它，在实例内的 password 行下面添加 restricted 指令。此类实例的开头和以下相仿：

image=/boot/vmlinuz-<version>
        password=<password>
        restricted

把 <version> 替换成内核版本，把 <password> 替换成该内核的 LILO 口令。

若使用 restricted 指令，在实例内还必须有一个 password 行。

警告 警告

/etc/lilo.conf 文件是全局可读的。如果你要使用口令来保护 LILO，只允许根用户读取和编辑该文件是一项基本要求，因为所有的口令都是纯文本的。要做到它，作为根用户键入以下命令：

chmod 600  /etc/lilo.conf

注

[1] | 因为系统 BIOS 因厂商而各异，某些可能不支持任何类型的口令保护，某些可能会只支持一种而不支持另一种。
[2] | GRUB 还接受不加密的口令，但是推荐你使用 md5 散列来增加其安全性。
后退 | 起点 | 前进
工作站保安 | 上级 | 口令安全


个人防火墙

后退 第 4章 . 工作站保安 前进

4.6. 个人防火墙

一旦配置了必要的网络服务，实现一个防火墙就非常重要。

防火墙会防止网络分组进入系统的网络接口。如果某个被防火墙阻塞的端口上接收到了一个请求，这个请求就会被忽略。如果某个服务在这些被阻塞的端口之一监听请求，它就不会收到任何分组，和禁用没什么区别。由于这个原因，你应该加倍小心，在配置防火墙阻塞不使用的端口的同时不要阻塞已配置服务正使用的端口。

对多数用户来说，配置简单防火墙的最佳工具是红帽企业 Linux 携带的直截了当的图形化防火墙配置工具：安全级别配置工具（redhat-config-securitylevel）。这个工具使用控制板界面为常规目的创建比较广义的 iptables 规则。

关于使用这个应用程序以及它所提供的选项详情，请参阅《红帽企业 Linux 系统管理指南》的“基本防火墙配置”这一章。

对于资深用户和服务器管理员来说，使用 iptables 来手工配置防火墙可能是最佳办法。详情请参阅第7章 。要阅读 iptables 命令的完整指南，请参考《红帽企业 Linux 参考指南》的“iptables”这一章。

后退 | 起点 | 前进
可用网络服务 | 上级 | 被安全强化的通信工具


口令安全

后退 第 4章 . 工作站保安 前进

4.3. 口令安全

口令是红帽企业 Linux 用来校验用户身份的首要方法。因此其安全对于用户、工作站以及整个网络来说都是极端重要的。

为了安全目的，安装程序配置系统使用邮件文摘算式（Message-Digest Algorithm，MD5）和屏蔽口令。强烈建议你不要改变这些设置。

如果安装中取消选择了 MD5 口令，较老的数据加密标准（Data Encryption Standard，DES）格式就会被使用。该格式把口令限定为八个字母数字字符（不允许标点和其它特殊字符），并且提供了普通的56位级别的加密。

如果屏蔽口令在安装中被取消选择，所有的口令就会作为单向散列被保存在全局可读的 /etc/passwd 文件中，这使系统非常容易受到离线口令破译攻击。如果入侵者可以作为普通用户进入机器，他就能够把 /etc/passwd 文件复制到他自己的机器上，然后运行多种口令破译程序。如果文件中有不安全的口令，那么口令怪客找到它就只是个时间问题。

屏蔽口令通过把口令散列保存在 /etc/shadow 文件中而使系统免遭此类攻击，因为该文件只能被根用户读取。

这会强制潜在的攻击者通过登录到机器上的服务如 SSH 或 FTP 来试图进行远程口令破译。这类强力破译非常缓慢，并且会留下很明显的踪迹，因为系统文件中会记录上百次失败了的登录企图。当然，如果怪客在夜半三更时试图破译系统上的薄弱口令，他们可能会在凌晨前进入系统，从而编辑日志文件来掩盖其踪迹。

除了格式和贮存方式，口令内容是另一个值得考虑的因素。用户保护其帐号免受口令破译攻击的最重要措施是创建一个强健的口令。

4.3.1. 创建强健的口令

在创建安全口令的时候，最好能遵循以下准则：

不要做以下的事：

  • 不要只使用单词或数字 — 决不要在口令中只使用单词或数字。

    某些不安全口令包括：

    • 8675309

    • juan

    • hackme

  • 不要使用现成词汇 — 像名称、词典中的词汇、甚至电视剧或小说中的用语，即使在两端使用数字，都应该避免使用。

    某些不安全口令包括：

    • john1

    • DS-9

    • mentat123

  • 不要使用外语中的词汇 — 口令破译程序经常使用多种语言的词典来检查其词汇列表。依赖外语来达到保护口令的目的通常不起作用。

    某些不安全口令包括：

    • cheguevara

    • bienvenido1

    • 1dumbKopf

  • 不要使用黑客术语 — 如果你以为在口令中使用黑客术语 — 又称 l337 (LEET) — 就会与众不同，请再三思。许多词汇列表都包含了 LEET 式术语。

    某些不安全口令包括：

    • H4X0R

    • 1337

  • 不要使用个人信息 — 千万不要使用个人信息。如果攻击者知道你的身份，推导出你所用口令的任务就会变得非常容易。以下是你在创建口令时应该避免使用的信息类型。

    某些不安全口令包括：

    • 你的名字

    • 宠物的名字

    • 家庭成员的名字

    • 生日

    • 你的电话号码或邮政编码

  • 不要倒转现存词汇 — 优秀的口令破译者总是倒转常用词汇，因此倒转薄弱口令并不会使它更安全。

    某些不安全口令包括：

    • R0X4H

    • nauj

    • 9-DS

  • 不要笔录你的口令 — 决不要把口令写在纸上。把它牢记在心才更为安全。

  • 不要在所有机器上都使用同样的口令 — 在每个机器上使用不同的口令是及其重要的。这样，如果一个系统泄密了，所有其它系统都不会立即受到威胁。

做以下的事：

  • 口令长度至少为八个字符 — 口令越长越好。若使用 MD5 口令，它应该至少有15个字符。若使用 DES 口令，使用最长长度（8个字符）。

  • 混和大小写字母 — 红帽企业 Linux 区分大小写，因此混和大小写会增加口令的强健程度。

  • 混和字母和数字 — 在口令中添加数字，特别是在中间添加（不只在开头和结尾处）能够加强口令的强健性。

  • 包括字母和数字以外的字符 — &、$、和 > 之类的特殊字符可以极大地增强口令的强健性（若使用 DES 口令则不能使用此类字符）。

  • 挑选一个你可以记住的口令 — 如果你记不住你的口令，那么它再好也没有用；使用简写或其它记忆方法来帮助你记忆口令。

描述了这么多规则后，你可能会想创建一个满足所有条件的好口令的任务实在艰巨。幸运的是，我们随后还描述了一些你可以用来生成可记忆的安全口令的步骤：

4.3.1.1. 安全口令创建方法

人们用来创建安全口令的方法多种多样。其中最流行的一种涉及了字母简写。例如：

  • 想出一个可记忆的短语，如：

    "over the river and through the woods, to grandmother's house we go."

  • 然后只引用第一个字母而把它变成简写（包括标点）。

    otrattw,tghwg.

  • 把简写中的字母替换成数字和符号来增加其复杂性。例如，用 7 来替换 t，用 @ 来替换 a：

    o7r@77w,7ghwg.

  • 至少把一个字母变成大写来增加其复杂性，如 H。

    o7r@77w,7gHwg.

  • 最后，永远不要在任何系统上使用以上的口令范例。

创建安全口令的重要性不言而喻，正确地管理它们也极为重要，特别是对于大机构的系统管理员来说。下节讨论了在机构中创建和管理用户口令的良好实践方法。

4.3.2. 在机构内创建用户口令

若机构内的用户数量很大，系统管理员可以使用两种基本方法来强制使用好口令。他们可以为用户创建口令，或者让用户自行创建口令，但是校验该口令是否可被接受。

为用户创建口令会保证这些口令是强健的，但是随着机构的扩大，这项任务也会变得越来越繁琐。它还会导致用户把口令写下来。

由于这些原因，系统管理员更喜欢让用户自行创建口令，然后再积极地校验这些口令是否可被接受，在某些情况下，通过口令老化来强制用户定期改变口令。

4.3.2.1. 强制使用强健口令

要保护网络免受入侵攻击，系统管理员应该校验机构内使用的口令是否强健。当用户被要求创建或改变口令时，他们可以使用命令行程序 passwd 来进行。该程序能够识别可插入验证管理器（Pluggable Authentication Manager，PAM），因此它会根据 pam_cracklib.so PAM 模块来检查口令是否容易被破译或是否太短。由于 PAM 是可被定制的，你可以进一步添加口令完好性检查器，如 pam_passwdqc（可在http://www.openwall.com/passwdqc/ 获得），或编写一个新模块。要获取可用 PAM 模块的列表，请查看 http://www.kernel.org/pub/linux/libs/pam/modules.html。关于 PAM 的详细信息，请参阅《红帽企业 Linux 参考指南》中的“可插入验证模块（PAM）”这一章。

不过，你应该注意，在创建口令时进行的检查并不能像运行口令破译程序那样有效地发现不良口令。

尽管我们没有在产品中附带，红帽企业 Linux 中可以运行的口令破译程序有很多。以下是一些较流行的口令破译程序的简单列表：

注记 | 注记
 | 这些工具都没有在红帽企业 Linux 中提供，因此它们在任何形式上都不被 Red Hat, Inc. 支持。

  • John The Ripper — 一个快速而灵活的破译程序。它允许使用多个词汇列表，并且具有强力破译的能力。它在 http://www.openwall.com/john/ 中可以获得。

  • Crack — 它也许是最著名的口令破译软件。Crack 虽然没有 John The Ripper 那么容易使用，它也很快。你可以在 http://www.crypticide.org/users/alecm/ 上找到它。

  • Slurpie — Slurpie 和 John The Ripper 以及 Crack 相似，但是它被设计成可在多个计算机上同时进行，创建了一种分布型口令破译攻击。你可以在 http://www.ussrback.com/distributed.htm 上找到它以及其它分布型攻击的安全评估工具。

警告 | 警告
 | 在试图破译机构内部的口令前，总要先获取一份书面授权书。

4.3.2.2. 口令老化

口令老化是系统管理员用来防止机构内不良口令的另一种技术。口令老化意味着过了一段预先设定的时间后（通常是90天），用户会被提示创建一个新口令。它所根据的理论是，如果用户被强制定期改变口令，某个破译的口令对入侵者来说就只有有限的利用机会。不过，口令老化的不利性是，用户很可能会把他们的口令写下来。

红帽企业 Linux 中用来指定口令老化的两个主要程序是：chage 命令或图形化的用户管理器（redhat-config-users）程序。

chage 命令的 -M 选项指定口令的最长有效期。例如，要把用户的口令设置为90天后过期，键入以下命令：

chage -M 90 <username>

在上面的命令中，把 <username> 替换成用户名。要禁用口令过期，传统方法是在 -M 选项后使用 99999（这相当于273年）。

图形化的用户管理器程序也可以被用来创建口令老化策略。要使用该程序，点击面板上的「主菜单」 => 「系统设置」 => 「用户和组群」，或在 shell 提示下（如 XTerm 或 GNOME 终端）键入 redhat-config-users 命令。点击「用户」活页标签，从用户列表中选择用户，然后点击按钮菜单上的「属性」（或从拉下菜单中选择「文件」 => 「属性」。

然后点击「口令信息」活页标签，输入口令过期的天数，如图 4-1所示。

图 4-1. 「口令信息」面板

关于用户和组群配置的详情（包括强制首次口令的说明），请参阅《红帽企业 Linux 系统管理指南》中的“用户和组群配置”这一章。关于用户和资源管理的概述，请参阅《红帽企业 Linux 系统管理介绍》中的“管理用户帐号和资源使用”这一章。

后退 | 起点 | 前进
BIOS 和引导装载程序的安全性 | 上级 | 管理控制


管理控制

后退 第 4章 . 工作站保安 前进

4.4. 管理控制

在管理家庭机器的时候，用户必须以根身份或通过 setuid 程序（如 sudo 或 su）而获得的有效根特权来执行某些任务。setuid 是一种使用程序所有者的用户 ID（UID）而不是运行该程序的用户 ID 的程序。当使用长格式列举时，这类程序的所有者部分有一个小写的 s，如下所示：

-rwsr-xr-x    1 root     root        47324 May  1 08:09 /bin/su

然而，对于系统管理员来说，他们必须决定机构内的用户对机器到底能拥有多少管理权限。通过 pam_console.so 这个 PAM 模块，某些通常保留给根用户的活动，如重新引导和挂载可移介质，第一个登录到实际控制台的用户也会被允许进行（关于 pam_console.so 模块的详情，请参阅《红帽企业 Linux 参考指南》的“可插入验证模块（PAM）”）。然而，其它重要的系统管理任务，如改变网络设置、配置新鼠标、或挂载网络设备，没有管理权限就无法进行。因此，系统管理员必须决定网络上的用户可以拥有多少管理权限。

4.4.1. 允许根权限

如果机构内的用户是一组可信任的计算机能手，那么给他们根权限可能不是件坏事。给用户以根权限意味着一些类似添加设备或配置网络接口的小事情可以被个别用户处理，因此系统管理员就有时间处理网络安全和其它重要的任务。

但是从另一方面来说，给个别用户以根权限会导致以下问题：

  • 机器的错误配置 — 具备根权限的用户可能会错误配置他们的机器，从而需要协助；或者更糟的是打开安全漏洞而不自知。

  • 运行不安全服务 — 具备根权限的用户可能会在他们的机器上运行不安全的服务器，如 FTP 或 Telnet，从而在用户名和口令被明文传输时给它们带来潜在危机。

  • 作为根用户运行电子邮件附件 — 影响 Linux 的病毒虽然很罕见，但是并不是没有。不过，它们只有在以根用户身份运行的时候才会给系统造成威胁。

4.4.2. 禁止根存取权限

如果管理员因为这些原因或其它原因对于允许用户登录为根用户感到不太合适，他们就应该把根口令保密，并且通过使用口令保护引导装载程序（详情请参阅第 4.2.2 节）来禁止进入运行级别1或单用户模式。

表 4-1显示了管理员可以进一步保证根登录被禁止的方法：

方法 描述 影响 不影响
改变根 shell。 编辑 /etc/passwd 文件，然后把 shell 从 /bin/bash 改成 /sbin/nologin。

阻止进入根 shell 并记录所有进入企图。
以下程序会被阻止进入根帐号：
� login
� gdm
� kdm
� xdm
� su
� ssh
� scp
� sftp

不需要 shell 的程序，如 FTP 客户、邮件客户以及许多 setuid 程序。
以下程序不会被阻止进入根帐号：
� sudo
� FTP 客户
� 电子邮件客户

禁止通过任何控制台设备（tty）来获得根权限。 一个空的 /etc/securetty 文件会防止到任何连接在计算机上的设备登录为根用户。

防止通过控制台或网络来进入根帐号。以下程序被禁止用来进入根帐号：
� login
� gdm
� kdm
� xdm
� 其它打开 tty 的网络服务

不以根用户身份登录，却通过 setuid 或其它机制来执行管理性任务。
以下程序不会被禁止进入根帐号：
� su
� sudo
� ssh
� scp
� sftp

禁用根的 SSH 登录。 编辑 /etc/ssh/sshd_config 文件，把 PermitRootLogin 参数设置为 no。

防止通过 OpenSSH 工具套件来获得根权限。以下程序会禁止进入根帐号：:
� ssh
� scp
� sftp

这只会阻止根帐号对 OpenSSH 工具套件的使用。

使用 PAM 来限制根用户对服务的存取权限。 编辑 /etc/pam.d/ 目录中的目标服务的文件。请确定验证需要 pam_listfile.so。详情请参阅第 4.4.2.4 节。

防止到识别 PAM 的网络服务的根使用权限。
以下服务不能进入根帐号：
� FTP 客户
� 电子邮件客户
� login
� gdm
� kdm
� xdm
� ssh
� scp
� sftp
� 任何识别 PAM 的服务

不识别 PAM 的程序和服务。

表 4-1. 禁用根帐号的方法

4.4.2.1. 禁用根 Shell

要防止用户直接登录为根用户，系统管理员可以在 /etc/passwd 文件中把根帐号的 shell 设置为 /sbin/nologin。这会阻止需要 shell 的命令，如 su 和 ssh 等直接进入根帐号。

重要 | 重要
 | 不需要使用 shell 的程序，如电子邮件客户或 sudo 命令，仍旧能够进入根帐号。

4.4.2.2. 禁用根登录

要进一步限制对根帐号的使用权限，管理员可以通过编辑 /etc/securetty 文件来禁用控制台的根登录。该文件列举了所有根用户被允许登录的设备。如果该文件不存在，根用户就能通过系统上的各类通信设备，不管是控制台还是原始网络接口，来登录。这种情况很危险，因为用户可以以根用户身份使用 Telnet 来登录，在网络中明文传送根口令。按照默认设置，红帽企业 Linux 的 /etc/securetty 文件只允许根用户在和机器物理相连的控制台上登录。要阻止根用户登录，键入以下命令来清除该文件的内容：

echo > /etc/securetty

警告 | 警告
 | 一个空白的 /etc/securetty 文件不会防止根用户使用 OpenSSH 工具套件来远程登录，因为控制台在验证之前不会被打开。

4.4.2.3. 禁用根的 SSH 登录

要防止根用户通过 SSH 协议登录，编辑 SSH 守护进程的配置文件（/etc/ssh/sshd_config）。把以下一行：

# PermitRootLogin yes

改成：

PermitRootLogin no

4.4.2.4. 使用 PAM 禁用根权限

PAM 通过 /lib/security/pam_listfile.so 模块在拒绝特定帐号方面提供了极大的灵活性。这使管理员能够在不准许登录的用户列表上应用该模块。以下的例子显示了该模块在 /etc/pam.d/vsftpd PAM 配置文件中的 vsftpd FTP 服务器上是如何被使用的（如果指令在一行内，那么就没必要使用第一行尾的 \ 字符）：

auth   required   /lib/security/pam_listfile.so   item=user \
sense=deny file=/etc/vsftpd.ftpusers onerr=succeed

这告诉 PAM 参考 /etc/vsftpd.ftpusers 文件，并拒绝其中列举的用户使用该服务。管理员可以随意改变这个文件的名称，并为每个服务保存单独的列表，或使用一个单一列表来拒绝到多个服务的使用权限。

如果管理员想要拒绝到多个服务的使用权限，他也可以在 PAM 配置服务（如 /etc/pam.d/pop 和用于邮件服务的 /etc/pam.d/imap、或用于 SSH 客户的 /etc/pam.d/ssh）中添加相似的一行。

关于 PAM 的详情，请参阅《红帽企业 Linux 参考指南》的“可插入验证模块（PAM）”这一章。

4.4.3. 限制根存取权限

与其完全否定对根帐号的使用，管理员可能只想通过 setuid 程序如 su 或 sudo 等来允许对其的使用。

4.4.3.1. su 命令

键入 su 命令后，用户会被提示输入根口令，经验证后，他就会得到一个根 shell 提示。

通过 su 命令登录后，用户就成为根用户，并且对系统有绝对的管理权。此外，一旦用户成为根用户，他还可以使用 su 命令来变成系统上的另一个用户而不必输入口令。

因为该程序非常强大，机构内的管理员可能想限制能够使用这个命令的人员。

最简单的方法是把用户添加到一个叫做 wheel 的特殊管理组群。要这么做，以根用户身份键入以下命令：

usermod -G wheel <username>

在前面的命令中，把 <username> 替换成被添加到 wheel 组群中的用户名。

要为这个目的使用用户管理器，点击面板上的「主菜单」=> 「系统设置」 => 「用户和组群」，或在 shell 提示下键入 redhat-config-users 命令。选择「用户」活页标签，从用户列表中选择该用户，然后点击按钮菜单上的「属性」（或从拉下菜单中选择「文件」=> 「属性」）。

然后选择「组群」活页标签，点击 wheel 组群，如图 4-2所示。

图 4-2. 「组群」面板

下一步，在文本编辑器中打开 su（/etc/pam.d/su）的 PAM 配置文件，删除以下行的注释符号 [#]：

auth  required /lib/security/pam_wheel.so use_uid

这么做会只允许管理性组群 wheel 使用该程序。

注记 | 注记
 | 根用户是默认的 wheel 组群成员。

4.4.3.2. sudo 命令

sudo 命令提供了另一种授予用户管理权限的方法。当可信任的用户在管理命令前加一个 sudo 命令，这个用户就会被提示输入他自己的口令。验证后，假定这个命令被准许执行，它就会以根用户身份执行。

sudo 命令的基本格式如下：

sudo <command>

在上面的例子中，<command> 应该被替换为通常保留给根用户使用的命令，如 mount。

重要 | 重要
 | sudo 命令的用户应该在离开他们的机器前特别留意一下自己是否已经退出，因为这些用户可以在五分钟之内再次使用这个命令而不必输入口令。该设置可以通过修改配置文件 /etc/sudoers 来改变。

sudo 命令提供了高度的灵活性。例如，只有列举在 /etc/sudoers 配置文件中的用户被允许使用 sudo 命令，并且命令是在用户的而不是根的 shell 中被执行。这意味着根 shell 可以被完全禁用，如第 4.4.2.1 节所示。

sudo 命令还提供了完整的审核渠道。每次成功的验证都被记录在 /var/log/messages 文件中，所使用的命令以及使用者的用户名被记录在/var/log/secure 文件中。

sudo 命令的另一个优越性是，管理员可以根据需要给不同的用户以不同的命令使用权限。

想编辑 sudo 配置文件 /etc/sudoers 的管理员应该使用 visudo 命令。

要给某人以完全的管理权限，键入 visudo，然后在用户特权规定部分添加和以下相似的一行：

juan ALL=(ALL) ALL

这个例子表明，用户 juan 可以在任何主机上使用 sudo 来执行任何命令。

以下的例子显示了 sudo 配置方面的可伸缩性：

%users  localhost=/sbin/shutdown -h now

这个例子表明，只要是从控制台使用，任何用户都可以使用 /sbin/shutdown -h now 命令。

sudoers 的说明书页中有一个该文件选项的详细列表。

后退 | 起点 | 前进
口令安全 | 上级 | 可用网络服务


被安全强化的通信工具

后退 第 4章 . 工作站保安 前进

4.7. 被安全强化的通信工具

随着互联网的流行性和普及性的增强，劫获通信的可能性也随之增强。多年来，许多工具都被开发出来加密通过网络传输的通信。

红帽企业 Linux 附带了两种使用基于公钥加密术的高级加密算式来保护正在通过网络传输的信息。

  • OpenSSH — 用于加密网络通信的 SSH 协议的免费实现。

  • Gnu Privacy Guard (GPG) — 用于加密数据的 PGP (Pretty Good Privacy) 加密程序的免费实现。

OpenSSH 是进入远程机器的安全方法，可以用来代替较老的 telnet 和 rsh 之类的不加密的服务。OpenSSH 包含一个叫做 sshd 的服务和三个命令行客户应用程序：

  • ssh — 一个安全远程控制台存取客户。

  • scp — 一个安全远程复制命令。

  • sftp — 一个允许不互动文件传输会话的伪 ftp 客户。

强烈推荐你在所有和 Linux 系统的远程通信中使用 SSH 协议。关于 OpenSSH 的详情，请参阅《红帽企业 Linux 系统管理指南》的“OpenSSH”这一章。关于 SSH 协议的详情，请参阅《红帽企业 Linux 参考指南》的“SSH 协议”这一章。

重要 | 重要
 | 虽然 sshd 服务具备固有的安全性，该服务必须被时时更新才能抵御任何安全威胁。关于这个问题的详情，请参阅第3章 。

GPG 是保持私有数据隐蔽性的好办法。它可以被用来通过公共网络和电子邮件来发送保密数据，也可以被用来保护硬盘上的保密信息。

关于使用 GPG 的详情，请参阅《红帽企业 Linux 系统管理指南》的“Gnu 隐私卫士入门”这一章。

后退 | 起点 | 前进
个人防火墙 | 上级 | 服务器安全


可用网络服务

后退 第 4章 . 工作站保安 前进

4.5. 可用网络服务

对于系统管理员来说，控制用户对管理权限的使用是一个重要的问题；对于安装和操作 Linux 系统的人员而言，决定和控制哪些网络服务应该处于活跃状态就更为重要。

许多红帽企业 Linux 中的服务都像网络服务器一样。如果机器上运行某个网络服务，那么这个叫做守护进程（daemon）的服务器程序就在一个或多个网络端口上监听连接。每一个此类服务器都应该被作为潜在的攻击渠道对待。

4.5.1. 对服务的威胁

网络服务可以给 Linux 系统带来许多威胁。以下列举了一些主要威胁：

  • 缓冲溢出攻击 — 连接到端口0到1023的服务必须以管理用户的身份运行。如果应用程序中有一个可利用的缓冲溢出漏洞，攻击者就能够在用户运行守护进程的时候获得对系统的控制权。由于可被利用的缓冲溢出的存在，怪客可以使用自动化的工具来识别有弱点的系统，一旦他们获得进入权，他们可以使用自动化的 rootkits 来保持对系统的使用权。

  • 拒绝服务攻击（DoS） — 通过使用大批请求充塞，拒绝服务攻击可以使系统由于试图记录和答复每个请求而陷于停顿。

  • 脚本弱点攻击 — 如果服务器使用脚本来执行服务器边的行动（万维网服务器通常会这么做），怪客可以对不正确编写的脚本发起攻击。这些脚本弱点能够导致缓冲溢出条件或允许攻击者改变系统上的文件。

要把受到网络攻击的暴露程度限制在一定范围内，你应该关闭所有不使用的服务。

4.5.2. 识别和配置服务

为增强安全性，多数和红帽企业 Linux 一起安装的网络服务都被默认关闭。不过，其中有几个明显的例外：

  • cupsd — 红帽企业 Linux 的默认打印服务器。

  • lpd — 另一个打印服务器。

  • portmap — NFS、NIS、和其它 RPC 协议的必要部件。

  • xinetd — 控制到 vsftpd、telnet、和 sgi-fam（Nautilus 文件管理器所必需的）之类的从属服务器的超级服务器。

  • sendmail — Sendmail 邮件传输代理被默认启用，但是它只监听 localhost 上的连接。

  • sshd — OpenSSH 服务器，是 Telnet 的安全替代品。

在决定是否让这些服务继续运行时，最好是听凭常识，宁可过于小心也不疏忽大意。例如，如果没有打印机，你就不必运行 cupsd。portmap 端口也同理，如果你不挂载 NFS 文件卷或使用 NIS（ypbind 服务），那么 portmap 就应该被禁用。

红帽企业 Linux 中包括了三个用来开关服务的程序。它们是：服务配置工具（redhat-config-services）、ntsysv 和 chkconfig。关于使用这些工具的信息，请参阅《红帽企业 Linux 系统管理指南》的“控制对服务的使用”这一章。

图 4-3. 服务配置工具

如果你对某服务的目的不清楚，服务配置工具中有一个描述字段可能会对你有所启发，如图 4-3所示。

但是仅仅查看哪些网络服务在引导时被启用是不够的。优秀的系统管理员还应该检查哪些端口被打开或正在监听。关于这个课题的详情，请参阅第 5.8 节。

4.5.3. 不安全服务

任何网络服务都有潜在的不安全因素。这就是关闭不使用服务之所以非常重要的原因。服务漏洞会被例行检查、揭示和修补，从而使更新与网络服务有关的软件包这一点显得格外重要。关于这个问题的详情，请参阅第3章 。

和其它网络协议相比，某些网络协议具有固有的不安全因素。它们包括任何进行以下事务的服务：

  • 在网络中传递不经加密的用户名和口令 — 许多旧有的协议，如 Telnet 和 FTP，都不会加密验证会话，应该尽可能地避免使用。

  • 不经加密地在网络中传递保密信息 — 许多协议在网络中不经加密地传递信息。这些协议包括 Telnet、FTP、HTTP、和 SMTP。许多网络文件系统，如 NFS 和 SMB，也不经加密地在网络中传递信息。在使用这些协议时，限制传输数据是用户的责任。

    还有，像 netdump 之类的远程内存转储服务会把内存内容不经加密地在网络中传递。内存转储中可以包含口令，更糟的是，还可能包含数据库项目和其它保密信息。

    其它服务如 finger 和 rwhod 会揭示关于系统用户的信息。

带有固有不安全因素的服务包括：

  • rlogin

  • rsh

  • telnet

  • vsftpd

所有远程登录和 shell 程序（rlogin、rsh 和 telnet）都应该避免使用，使用 SSH 来替代它们。（关于 sshd 的详情，请参阅第 4.7 节。）

FTP 固有的对系统安全的威胁性没有远程 shell 那么严重，但是 FTP 服务器必须被谨慎配置和监视才能避免问题的发生。关于保护 FTP 服务器的安全的详情，请参阅第 5.6 节。

应该谨慎实现和放置在防火墙之后的服务包括：

  • finger

  • identd

  • netdump

  • netdump-server

  • nfs

  • portmap

  • rwhod

  • sendmail

  • smb (Samba)

  • yppasswdd

  • ypserv

  • ypxfrd

关于保护网络服务安全的详情，请参阅第5章 。

下节讨论了设置简单防火墙可以使用的工具。

后退 | 起点 | 前进
管理控制 | 上级 | 个人防火墙