如何在Linux中禁用ICMP和ICMPv6重定向
在本教程中,我们将学习如何在Linux服务器上禁用ICMP和ICMPv6重定向。
ICMP重定向在路由器上使用,因此,如果Linux服务器未充当路由器,则建议按照常规安全惯例禁用重定向。
即使Linux服务器充当打开了转发功能的路由器,我们也可以使用内核参数(sysctl)在选择性接口上禁用ICMP重定向。
1.什么是ICMP重定向
路由器生成ICMP重定向数据包,以通知主机到达某些特定目标的更好路由。
ICMP重定向的接收者使用重定向数据包中给出的信息覆盖其路由表。
仅当某些特定对等地址首选非默认路由器且在系统上并非硬配置此知识时,才需要重定向。
然后,将首先尝试使用默认路由器将其发送给这些对等方,如果它支持重定向,它将以一个命名备用路由器的方式进行响应。
它也可以转发原始数据包,也可以不转发。
如果该系统接受重定向,它将使用给定的信息为备用路由器创建一个临时路由条目。
这种配置的优点是,仅需要在相对较少的系统上维护网络体系结构知识和所需的路由器-每个子网都是默认路由器的路由器,而不是所有子网中的所有客户端系统。
缺点是恶意系统可能发送重定向来操纵其他系统。
2.如何为IPv4禁用ICMP重定向
有两种忽略ICMP请求的方法。
以下部分仅涵盖IPv4网络。
2.1使用防火墙规则
我们可以添加一个带有firewalld
的规则来阻止所有的TCMP重定向。
首先获取活动区域列表
# firewall-cmd --get-active-zones public interfaces: eth0 eth1
因此,在我的情况下,我仅使用默认的" public"区域,该区域具有两个接口,因此我将" firewalld"规则应用于该区域。
# firewall-cmd --permanent --add-icmp-block=redirect --zone=public
接下来重新加载规则
# firewall-cmd --reload
列出并验证规则
使用firewalld禁用ICMP重定向
2.2使用内核参数(sysctl)
如果Linux服务器充当启用了转发的路由器,则可以选择在所有接口或者选定接口上禁用ICMP重定向。
要在"所有接口"上禁用ICMP重定向
net.ipv4.conf.all.accept_redirects=0
仅在eth0
上禁用ICMP重定向
net.ipv4.conf.all.accept_redirects=1 net.ipv4.conf.eth0.accept_redirects=0 net.ipv4.conf.eth1.accept_redirects=1
如果Linux服务器未充当路由器,则可以在所有接口上禁用ICMP重定向
net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.eth0.accept_redirects=0 net.ipv4.conf.eth1.accept_redirects=0
我们可以在/etc/sysctl.d下的新文件96-disable-icmpv4.conf中添加这些配置值。
# cat /etc/sysctl.d/96-disable-icmpv4.conf net.ipv4.conf.all.accept_redirects=0 net.ipv4.conf.eth0.accept_redirects=0 net.ipv4.conf.eth1.accept_redirects=0
要应用这些更改运行时:
# sysctl --system
并验证输出:
使用sysctl禁用ICMP重定向
提示:
仅接受默认网关列表中列出的网关的ICMP重定向(默认情况下启用)
# net/ipv4/conf/all/secure_redirects = 1
3.如何为IPv6禁用ICMP重定向
我们可以使用类似的方法来忽略Linux服务器上的ICMPv6请求
3.1使用防火墙规则
要阻止跨所有接口的ICMPv6重定向,请使用:
# firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -p icmpv6 --icmpv6-type 137 -j DROP
要禁用"单个eth0接口"的ICMPv6请求,请使用:
# firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -i eth0 -p icmpv6 --icmpv6-type 137 -j DROP
要在运行时应用以上任何规则,需要重新加载防火墙
。
# firewall-cmd --reload # firewall-cmd --direct --get-all-rules
3.2使用内核参数(sysctl)
忽略ICMPv6重定向的逻辑与IPv4所用的逻辑不同。
要使主机忽略ICMPv6重定向,我们必须:
将主机作为IPv6网关运行(启用IPv6转发)
# Enable forwarding for an <interface> and ignore ICMPv6 redirects net.ipv6.conf.<interface>.forwarding=1 # Enable forwaridng for all interfaces and ignore ICMPv6 redirects net.ipv6.conf.all.forwarding=1
或者
禁用每个接口的ICMPv6重定向
# Disable ICMPv6 redirects explicitly for <interface> net.ipv6.conf.<inteface>.accept_redirects=0
我们可以在/etc/sysctl.d下的新文件95-disable-icmpv6.conf中添加这些配置参数。
# cat /etc/sysctl.d/95-disable-icmpv6.conf net.ipv6.conf.eth0.accept_redirects=0 net.ipv6.conf.eth1.accept_redirects=0
要使更改生效运行时:
# sysctl --system
接下来验证输出:
使用sysctl内核参数禁用ICMPv6