Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.4.3. 禁用源路由

源路由是一种互联网协议机制,它允许 IP 数据包传输信息、地址列表,向路由器告知数据包必须采用的路径。还有一个在路由被遍历时记录跃点的选项。"路由记录"获取的跃点列表为目的地提供源的返回路径。这允许源(发送主机)以松散或严格方式指定路由,忽略部分或所有路由器的路由表。它允许用户重定向网络流量以满足恶意用途。因此,应禁用基于源的路由。
accept_source_route 选项可使网络接口接受设置了 Strict Source Routing(SSR )或 Loose Source Routing(LSR )选项的数据包。源路由数据包的接受由 sysctl 设置控制。以 root 用户身份运行以下命令,使用 SSR 或 LSR 选项集丢弃数据包:
~]# /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
如果可能,禁用数据包转发也应与上述操作结合使用(禁用转发可能会干扰虚拟化)。以 root 身份发出以下列出的命令:
这些命令禁用在所有接口上转发 IPv4 和 IPv6 数据包:
~]# /sbin/sysctl -w net.ipv4.conf.all.forwarding=0
~]# /sbin/sysctl -w net.ipv6.conf.all.forwarding=0
这些命令禁用在所有接口上转发所有多播数据包:
~]# /sbin/sysctl -w net.ipv4.conf.all.mc_forwarding=0
~]# /sbin/sysctl -w net.ipv6.conf.all.mc_forwarding=0
接受 ICMP 重定向的合法用途很少。禁用接受和发送 ICMP 重定向的数据包,除非特别需要。
这些命令禁止在所有接口上接受所有 ICMP 重定向的数据包:
~]# /sbin/sysctl -w net.ipv4.conf.all.accept_redirects=0
~]# /sbin/sysctl -w net.ipv6.conf.all.accept_redirects=0
这个命令禁止在所有接口上接受安全 ICMP 重定向的数据包:
~]# /sbin/sysctl -w net.ipv4.conf.all.secure_redirects=0
这个命令禁止接受所有接口上的所有 IPv4 ICMP 重定向数据包:
~]# /sbin/sysctl -w net.ipv4.conf.all.send_redirects=0
重要
如果至少有一个 net.ipv4.conf.all.send_redirects 或 net.ipv4.conf.interface.send_redirects 选项设置为已启用,则 ICMP 重定向的发送保持活动。确保将每个接口的 net.ipv4.conf.interface.send_redirects 选项设置为 0要在每次添加新接口时自动禁用 ICMP 请求的发送,请输入以下命令:
~]# /sbin/sysctl -w net.ipv4.conf.default.send_redirects=0
只有 指令可以禁用 IPv4 重定向数据包的发送。有关 IPv6 节点要求 http://www.ietf.org/rfc/rfc4294.txt 的说明,请参阅 RFC4294,这导致 IPv4 和 IPv6 之间的区别。
注意
要使这些设置在重新引导后保留,请修改 /etc/sysctl.conf 文件。例如,要禁止接受所有接口上的所有 IPv4 ICMP 重定向数据包,请使用以 root 用户身份运行的编辑器打开 /etc/sysctl.conf 文件,并添加一行,如下所示:
net.ipv4.conf.all.send_redirects=0
如需更多信息,请参阅 sysctl man page(sysctl(8) )。有关基于源的路由及其变体的 Internet 选项的说明,请参阅 RFC791
警告
以太网网络提供了重定向流量的其他方法,如 ARP 或 MAC 地址欺骗、未授权 DHCP 服务器和 IPv6 路由器或邻居公告。此外,单播流量偶尔会广播,从而导致信息泄漏。这些弱点只能通过网络运营商实施的具体措施来解决。基于主机的策略并不完全有效。

4.4.3.1. 反向路径转发

反向路径转发用于防止通过一个接口到达的数据包通过不同的接口离开。当传出路由和传入路由不同时,它有时被称为非对称路由。路由器通常以这种方式路由数据包,但大多数主机不需要这样做。例外是涉及通过一个链路发送流量以及通过来自其他服务提供商的另一个链接接收流量的应用。例如,将租用的行与 xDSL 或卫星链接与 3G modems 结合使用。如果您的情况适用于您,则需要在传入接口上关闭反向路径转发。简而言之,除非您知道需要,否则最好启用,因为它可防止用户从本地子网欺骗 IP 地址并减少 DDoS 攻击的机会
警告
如果启用了转发,则只有在源地址验证有其他方法(如 iptables 规则)时才应禁用 Reverse Path 转发。
rp_filter
使用rp_filter 指令启用反向路径转发。sysctl 实用程序可用于更改正在运行的系统,并通过向 /etc/sysctl.conf 文件添加行来进行永久性更改。Therp_filter 选项用于指示内核从三种模式之一进行选择。
要进行临时全局更改,以 root 用户身份输入以下命令:
sysctl -w  net.ipv4.conf.default.rp_filter=integer
sysctl -w net.ipv4.conf.all.rp_filter=integer
其中整数是以下之一
  • 0 - 无源验证。
  • 1 - RFC 3704 中定义的严格模式.
  • 2 - RFC 3704 中定义的松散模式.
可以使用 net.ipv4.conf.interface.rp_filter 命令覆盖每个网络接口的设置,如下所示:
sysctl -w net.ipv4.conf.interface.rp_filter=integer
注意
要使这些设置在重新引导后保留,请修改 /etc/sysctl.conf 文件。例如,要更改所有接口的模式,请使用以 root 用户身份运行的编辑器打开 /etc/sysctl.conf 文件,并添加一行,如下所示:
net.ipv4.conf.all.rp_filter=2
IPv6_rpfilter
如果使用 IPv6 协议,firewalld 守护进程默认应用到反向路径转发。可以在 /etc/firewalld/firewalld.conf 文件中检查该设置。您可以通过设置 IPv6_rpfilter 选项来更改 firewalld 的行为。
如果您需要自定义配置的反向路径转发,您可以使用 ip6tables 命令在没有 firewalld 守护进程的情况下执行该配置,如下所示:
ip6tables -t raw -I PREROUTING -m rpfilter --invert -j DROP
This 规则应该插入到 raw/PREROUTING 链开头附近,以便它应用到所有流量,特别是在有状态匹配规则的前面。有关 iptablesip6tables 服务的详情请参考 第 5.13 节 “使用 iptables设置和控制 IP 集”
启用数据包转发
要启用从系统外部的数据包转发到另一个外部主机,必须在内核中启用 IP 转发。以 root 用户身份登录,并将 /etc/sysctl.conf 文件中的 net.ipv4.ip_forward = 0 的行更改为以下内容:
net.ipv4.ip_forward = 1
要加载 /etc/sysctl.conf 文件中的更改,请输入以下命令:
/sbin/sysctl -p
要检查是否启用了 IP 转发,以 root 身份运行以下命令:
/sbin/sysctl net.ipv4.ip_forward
如果上述命令返回 1,则启用 IP 转发。如果返回 0,您可以使用以下命令手动打开它:
/sbin/sysctl -w net.ipv4.ip_forward=1