本文描述了与安全相关的内核配置选项,并解释了它们的作用以及如何使用它们。
由于内核控制着您计算机的网络,因此内核的安全至关重要,并且不应受到破坏。 为了防止一些最新的网络攻击,您应该尽量保持您的内核版本为最新。 您可以在 � 或从您的发行商处找到新的内核。
还有一个国际组织为主流 Linux 内核提供一个统一的加密补丁。 此补丁为许多加密子系统和由于出口限制而无法包含在主流内核中的内容提供支持。 有关更多信息,请访问他们的网页:http://www.kerneli.org
对于 2.0.x 内核,以下选项适用。 在内核配置过程中,您应该会看到这些选项。 此处的许多注释来自./linux/Documentation/Configure.help,这与在make config内核编译阶段使用帮助工具时引用的文档相同。
网络防火墙 (CONFIG_FIREWALL)
如果您打算在您的 Linux 机器上运行任何防火墙或地址伪装,则应启用此选项。 如果它只是一台普通的客户端机器,那么可以安全地选择“否”。
IP: 转发/网关 (CONFIG_IP_FORWARD)
如果您启用 IP 转发,您的 Linux 机器本质上就变成了一台路由器。 如果您的机器位于网络上,您可能会将数据从一个网络转发到另一个网络,并可能破坏为防止这种情况发生而设置的防火墙。 普通拨号用户将希望禁用此功能,而其他用户应专注于这样做的安全隐患。 防火墙机器将需要启用此功能,并与防火墙软件结合使用。
您可以使用以下命令动态启用 IP 转发
root# echo 1 > /proc/sys/net/ipv4/ip_forward |
root# echo 0 > /proc/sys/net/ipv4/ip_forward |
IP: SYN cookies (CONFIG_SYN_COOKIES)
“SYN 攻击”是一种拒绝服务 (DoS) 攻击,它会消耗您机器上的所有资源,迫使您重新启动。 我们想不出您通常不启用此功能的理由。 在 2.2.x 内核系列中,此配置选项仅允许 SYN cookies,但不启用它们。 要启用它们,您必须执行以下操作
root# echo 1 > /proc/sys/net/ipv4/tcp_syncookies <P> |
IP: 防火墙 (CONFIG_IP_FIREWALL)
如果您要将您的机器配置为防火墙、进行地址伪装,或者希望保护您的拨号工作站免受通过 PPP 拨号接口进入的人员的攻击,则此选项是必要的。
IP: 防火墙数据包日志记录 (CONFIG_IP_FIREWALL_VERBOSE)
此选项为您提供有关您的防火墙接收到的数据包的信息,例如发送者、接收者、端口等。
IP: 丢弃源路由帧 (CONFIG_IP_NOSR)
应启用此选项。 源路由帧在数据包内包含到其目的地的完整路径。 这意味着数据包经过的路由器不需要检查它,只需转发即可。 这可能会导致可能存在潜在漏洞的数据进入您的系统。
IP: 地址伪装 (CONFIG_IP_MASQUERADE) 如果您的 Linux 机器充当防火墙的本地网络上的计算机之一想要向外部发送某些内容,您的机器可以“伪装”成该主机,即,它将流量转发到预期的目的地,但使其看起来像是来自防火墙机器本身。 有关更多信息,请参阅 http://www.indyramp.com/masq。
IP: ICMP 地址伪装 (CONFIG_IP_MASQUERADE_ICMP) 此选项将 ICMP 地址伪装添加到仅伪装 TCP 或 UDP 流量的先前选项中。
IP: 透明代理支持 (CONFIG_IP_TRANSPARENT_PROXY) 这使您的 Linux 防火墙能够透明地将来自本地网络并 направленных 到远程主机的任何网络流量重定向到本地服务器,称为“透明代理服务器”。 这使得本地计算机认为它们正在与远程端对话,而实际上它们连接到本地代理。 有关更多信息,请参阅 IP-Masquerading HOWTO 和 http://www.indyramp.com/masq。
IP: 始终进行碎片整理 (CONFIG_IP_ALWAYS_DEFRAG)
通常,此选项被禁用,但如果您正在构建防火墙或地址伪装主机,您将需要启用它。 当数据从一台主机发送到另一台主机时,它并不总是作为单个数据包发送,而是被分成多个片段。 这样做的问题是端口号仅存储在第一个片段中。 这意味着有人可以将不应该存在的信息插入到剩余的数据包中。 它还可以防止针对尚未修补以抵抗它的内部主机的 teardrop 攻击。
数据包签名 (CONFIG_NCPFS_PACKET_SIGNING)
这是 2.2.x 内核系列中可用的一个选项,它将对 NCP 数据包进行签名以获得更强的安全性。 通常您可以将其关闭,但如果您确实需要它,它就在那里。
IP: 防火墙数据包 netlink 设备 (CONFIG_IP_FIREWALL_NETLINK)
这是一个非常简洁的选项,它允许您在用户空间程序中分析数据包的前 128 个字节,以根据其有效性确定是否要接受或拒绝该数据包。
对于 2.2.x 内核,许多选项是相同的,但已经开发了一些新选项。 此处的许多注释来自./linux/Documentation/Configure.help,这与在make config内核编译阶段。 下面仅列出了新添加的选项。 有关其他必要选项的列表,请查阅 2.0 描述。 2.2 内核系列中最显着的变化是 IP 防火墙代码。ipchains程序现在用于安装 IP 防火墙,而不是ipfwadm2.0 内核中使用的程序。
套接字过滤 (CONFIG_FILTER)
对于大多数人来说,可以安全地对此选项选择“否”。 此选项允许您将用户空间过滤器连接到任何套接字,并确定是否应允许或拒绝数据包。 除非您有非常具体的需求并且能够编写这样的过滤器,否则您应该选择“否”。 另请注意,截至撰写本文时,所有协议都受支持,TCP 除外。
端口转发
端口转发是 IP 地址伪装的补充,它允许在给定端口上将数据包从防火墙外部转发到内部。 例如,如果您想在防火墙或地址伪装主机后面运行 Web 服务器,并且该 Web 服务器应该可以从外部世界访问,这将非常有用。 外部客户端向防火墙的端口 80 发送请求,防火墙将此请求转发到 Web 服务器,Web 服务器处理该请求,结果通过防火墙发送到原始客户端。 客户端认为防火墙机器本身正在运行 Web 服务器。 如果您在防火墙后面有一组相同的 Web 服务器,这也可以用于负载均衡。
有关此功能的信息,请访问 http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html(要浏览 WWW,您需要访问一台可以访问 Internet 的机器,该机器上装有 lynx 或 Netscape 之类的程序)。 有关一般信息,请参阅 ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/
套接字过滤 (CONFIG_FILTER)
使用此选项,用户空间程序可以将过滤器附加到任何套接字,从而告知内核它应该允许或禁止某些类型的数据通过套接字。 Linux 套接字过滤适用于除 TCP 以外的所有套接字类型。 请参阅文本文件./linux/Documentation/networking/filter.txt以获取更多信息。
IP: 地址伪装
2.2 内核地址伪装已得到改进。 它为伪装特殊协议等提供了额外的支持。 请务必阅读 IP Chains HOWTO 以获取更多信息。
Linux 上有一些块设备和字符设备也可帮助您提高安全性。
以下两个设备/dev/random和/dev/urandom由内核提供,用于随时提供随机数据。
两者/dev/random和/dev/urandom都应该足够安全,可用于生成 PGP 密钥、ssh挑战以及其他需要安全随机数的应用程序。 攻击者应该无法根据这些来源的任何初始数字序列来预测下一个数字。 为了确保您从这些来源获得的数字在任何意义上都是随机的,我们投入了大量精力。
这两个设备之间唯一的区别是/dev/random用完随机字节后,它会使您等待积累更多字节。 请注意,在某些系统上,它可能会阻塞很长时间,等待新的用户生成的熵输入到系统中。 因此,在使用/dev/random之前,您必须谨慎。(也许最好的方法是在您生成敏感密钥信息时使用它,并告诉用户反复敲击键盘,直到您打印出“OK, enough”。)
/dev/random是高质量的熵,通过测量中断间隔时间等生成。 它会阻塞,直到有足够的随机数据可用。
/dev/urandom类似,但当熵存储不足时,它将返回现有熵的加密强度高的哈希值。 这不如安全,但对于大多数应用程序来说已经足够了。
您可以使用如下命令从设备读取数据
root# head -c 6 /dev/urandom | mimencode |
请参阅/usr/src/linux/drivers/char/random.c以获取算法的描述。
感谢 Theodore Y. Ts'o、Jon Lewis 以及来自 Linux-kernel 的其他人帮助我 (Dave) 完成此工作。