Sysctl(系统控制)变量控制某些内核参数,这些参数会影响操作系统不同部分的行为,例如 Linux 网络堆栈。这些参数可以在 proc 文件系统中找到,位于 /proc/sys。许多内核参数可以直接通过将新值写入参数伪文件来更改。但是,这些更改不会持久保存,并且在系统重新启动后会丢失。因此,我们建议在 sysctl 配置文件中配置所有更改,以便在每次系统启动时应用它们。
在本章中,将配置几个与网络相关的变量,以提高 Linux 的安全功能。根据防火墙的存在及其设置,此处列出的一些变量默认情况下已经具有安全值。您可以使用 sysctl 实用程序检查设置的当前值,如下所示
> /sbin/sysctl net.ipv4.conf.all.rp_filter
net.ipv4.conf.all.rp_filter = 2要应用以下设置,请创建一个配置文件 /etc/sysctl.d/。该文件需要以 .conf 后缀结尾,例如 /etc/sysctl.d/network.conf。有关详细信息,请参阅 man 5 sysctl.d。
根据您的环境,设置以下列表中的变量。
# the default setting for this is 2 (loose mode) net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1
此设置以严格模式启用 IPv4 反向路径过滤器。它确保对传入 IP 数据包的响应始终通过接收该数据包的接口发送出去。如果系统会根据路由表将响应数据包定向到不同的传出接口,则这些数据包将被丢弃。该设置可以防止某些类型的 IP 欺骗攻击,这些攻击例如用于分布式拒绝服务 (DDoS) 攻击。
# the default setting for this should already be 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.all.accept_source_route = 0
此设置禁用带有在 IPv4 数据包标头中设置 SSR 选项的数据包的接受。拒绝使用 源路由 的数据包。这可以防止 IP 数据包重定向,即重定向到防火墙后方的主机,否则该主机无法直接访问。
# the default setting for this should already be 1 net.ipv4.tcp_syncookies = 1
这为 IPv4 和 IPv6 启用 TCP SYN Cookie 保护。它解决了 TCP 协议级别上的特定拒绝服务攻击。该保护涉及少量 CPU 权衡,以换取避免攻击者造成的内存耗尽。该保护机制包括一个回退算法,该算法仅在无法以正常方式接受更多 TCP 连接时才生效。该机制不完全符合 TCP 协议,因此在某些 TCP 环境中可能导致协议问题。另一种选择是在过载情况下丢弃更多连接。这还需要区分合法的 TCP 高负载和 TCP 拒绝服务攻击。如果您预计系统上的 TCP 连接负载很高,那么此设置可能会适得其反。
# default is 128 net.ipv4.tcp_max_syn_backlog = 4096
TCP SYN 积压定义了排队以供进一步处理的 SYN 数据包的数量。一旦超过队列限制,所有新的传入 SYN 数据包将被丢弃,并且无法建立新的 TCP 连接(或者 SYN cookie 保护生效)。增加此值可以提高对 TCP SYN 洪泛攻击的保护。
# the default setting for this should already be 1 net.ipv4.icmp_echo_ignore_broadcasts = 1
ICMP 回显请求(ping)可以发送到 IPv4 广播地址,以便扫描网络中现有的主机/IP 地址或在网络段内执行 ICMP 洪泛。此设置导致网络堆栈忽略发送到广播地址的 ICMP 回显数据包。
# the default setting for this should already be 1 net.ipv4.icmp_ignore_bogus_error_responses = 1
此设置可避免用来自无效广播帧的无用错误消息填充日志文件。有关更多信息,请参阅 RFC 1122 互联网主机要求 — 通信层 第 3.2.2 节。
# default should already be 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0
禁用接受 ICMP 重定向消息。这些消息由网关发送,以告知主机有关到达外部网络的更好路由的信息。这些重定向可能被滥用于中间人攻击。
net.ipv4.conf.default.secure_redirects = 0 net.ipv4.conf.all.secure_redirects = 0
接受“安全”ICMP 重定向(来自列为默认网关的那些网关)的合法用途很少。除非绝对需要,否则应禁用它。
net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.send_redirects = 0
节点不应发送 IPv4 ICMP 重定向,除非它充当路由器。
# default should already be 0 net.ipv4.ip_forward = 0 net.ipv6.conf.all.forwarding = 0 net.ipv6.conf.default.forwarding = 0
仅应在充当路由器的系统上启用 IP 转发。