AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1084154
Accepted
Timido
Timido
Asked: 2021-11-22 02:12:36 +0800 CST2021-11-22 02:12:36 +0800 CST 2021-11-22 02:12:36 +0800 CST

可以在 Web 服务器上安全地阻止这些 ICMPv6 消息类型吗?

  • 772

我在云提供商上有一个 Debian 11 VPS,启用了 IPv4 和 IPv6,并且 eth0 接口具有全局范围的 ipv6 地址(公共)和链接范围的 ipv6 地址(fe80::/10)。

服务器的唯一目的是托管一个公共网站。

我正在使用 iptables/ip6tables 在服务器上实现防火墙。我阅读了 RFC4890,但仍然不确定如何处理某些 ICMPv6 消息类型,以及我的用例是否真的需要它们。虽然我允许链接范围内的任何流量,但我不确定是否可以安全地阻止全局范围内的以下 ICMPv6 消息类型:

  • 路由器请求(类型 133)

  • 路由器广告(类型 134)

  • 邻居招揽(135型)

  • 邻居广告(136 型)

  • 反向邻居发现请求(类型 141)

  • 反向邻居发现广告(类型 142)

  • 侦听器查询(类型 130)

  • 听众报告(类型 131)

  • 监听器完成(132 型)

  • 侦听器报告 v2(类型 143)

  • 证书路径请求(类型 148)

  • 证书路径广告(类型 149)

  • 多播路由器广告(类型 151)

  • 组播路由器请求(类型 152)

  • 组播路由器终端(153 型)

非常感谢您的帮助。

iptables ipv6 icmpv6
  • 2 2 个回答
  • 447 Views

2 个回答

  • Voted
  1. John Mahowald
    2021-11-22T09:14:51+08:002021-11-22T09:14:51+08:00

    允许所有 ICMPv6 类型。尽可能限制每秒 ICMPv6 数据包的速率,以限制 IP 设备上的资源使用。这是一种简单的方法,并不像听起来那么不安全。


    或者,您的研究方法是阅读RFC 4890 Recommendations for Filtering ICMPv6 Messages in Firewalls。注意缺少必须放弃的建议作为开始。

    “链接全局”不是标准术语。我认为您的意思是(全球)单播。与链接本地或多播相反,它们在定义的范围内。此外,您将需要具有区域概念的防火墙。因为您可能希望在前缀与互联网上采用不同的策略,但两者都是全球单播范围。

    RFC 解释说,许多这些本地范围的消息不需要特殊过滤。兼容的路由器不会转发本地来源的链接。接收邻居发现消息的兼容主机将确认它们没有通过路由器。许多防火墙都是路由器,因此您需要邻居发现(包括 RA)才能工作。


    作为一个实际示例,让我们快速看一下自由路由器 OpenWrt 的默认 ICMPv6 处理。这个问题或多或少包含了默认的 ICMPv6 防火墙规则。

    区域“lan”默认为全部接受。区域“wan”默认为仅传出。典型的简单防火墙。允许规则来自 wan:

    config rule
            option name 'Allow-ICMPv6-Input'
            option src 'wan'
            option proto 'icmp'
            list icmp_type 'echo-request'
            list icmp_type 'echo-reply'
            list icmp_type 'destination-unreachable'
            list icmp_type 'packet-too-big'
            list icmp_type 'time-exceeded'
            list icmp_type 'bad-header'
            list icmp_type 'unknown-header-type'
            list icmp_type 'router-solicitation'
            list icmp_type 'neighbour-solicitation'
            list icmp_type 'router-advertisement'
            list icmp_type 'neighbour-advertisement'
            option limit '1000/sec'
            option family 'ipv6'
            option target 'ACCEPT'
    
    config rule
            option name 'Allow-ICMPv6-Forward'
            option src 'wan'
            option dest '*'
            option proto 'icmp'
            list icmp_type 'echo-request'
            list icmp_type 'echo-reply'
            list icmp_type 'destination-unreachable'
            list icmp_type 'packet-too-big'
            list icmp_type 'time-exceeded'
            list icmp_type 'bad-header'
            list icmp_type 'unknown-header-type'
            option limit '1000/sec'
            option family 'ipv6'
            option target 'ACCEPT'
    

    大多数情况下不得丢弃类型,请参阅第 4.4.1 节。请注意,在“Allow-ICMPv6-Forward”中,错误类型和回显始终是允许的,无论是入站还是出站。

    config rule
            option name 'Allow-MLD'
            option src 'wan'
            option proto 'icmp'
            option src_ip 'fe80::/10'
            list icmp_type '130/0'
            list icmp_type '131/0'
            list icmp_type '132/0'
            list icmp_type '143/0'
            option family 'ipv6'
            option target 'ACCEPT'
    

    链路本地多播接收者通知消息。

    总体而言,允许内部区域中的所有内容,并允许错误、回显、邻居发现和多播相关的 ICMP 来自 Internet。不允许 SEND 等其他内容穿越互联网。不是过滤这些东西的唯一方法,但至少不会破坏 IPv6。

    • 3
  2. Best Answer
    Timido
    2021-12-13T08:31:27+08:002021-12-13T08:31:27+08:00

    根据我的研究,我最终得出了以下规则。在注释规则(即:禁用类型)中,对于 ICMPv6 类型的 LOG REJECT 规则,我的数据包计数为 0。

    #
    # INBOUND ICMPv6
    # Commented types are not needed;
    # those types that would be allowed for link-local only are commented as well 
    # because link-local is allowed all traffic.
    #
    
    ip6tables -N ICMP6
    
    ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 1 -j ACCEPT                      # Destination Unreachable
    ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 2 -j ACCEPT                      # Packet Too Big
    ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 3 -j ACCEPT                      # Time Exceeded
    ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 4 -j ACCEPT                      # Parameter Problem
    ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 128 -j ACCEPT                    # Echo Request
    #ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 133 -j ACCEPT                    # Router Solicitation
    #ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 134 -j ACCEPT                    # Router Advertisement
    ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 135 -j ACCEPT                    # Neighbor Solicitation
    ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 136 -j ACCEPT                    # Neighbor Advertisement
    #ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 141 -j ACCEPT                    # Inverse Neighbor Discovery Solicitation
    #ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 142 -j ACCEPT                    # Inverse Neighbor Discovery Advertisement
    #ip6tables -A ICMP6 -s fe80::/10 -p icmpv6 --icmpv6-type 130 -j ACCEPT      # Listener Query
    #ip6tables -A ICMP6 -s fe80::/10 -p icmpv6 --icmpv6-type 131 -j ACCEPT      # Listener Report
    #ip6tables -A ICMP6 -s fe80::/10 -p icmpv6 --icmpv6-type 132 -j ACCEPT      # Listener Done
    #ip6tables -A ICMP6 -s fe80::/10 -p icmpv6 --icmpv6-type 143 -j ACCEPT      # Listener Report v2
    #ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 148 -j ACCEPT                    # Certificate Path Solicitation
    #ip6tables -A ICMP6 -p icmpv6 --icmpv6-type 149 -j ACCEPT                    # Certificate Path Advertisement
    #ip6tables -A ICMP6 -s fe80::/10 -p icmpv6 --icmpv6-type 151 -j ACCEPT      # Multicast Router Advertisement
    #ip6tables -A ICMP6 -s fe80::/10 -p icmpv6 --icmpv6-type 152 -j ACCEPT      # Multicast Router Solicitation
    #ip6tables -A ICMP6 -s fe80::/10 -p icmpv6 --icmpv6-type 153 -j ACCEPT      # Multicast Router Termination
    
    # DROP everything else on chain ICMP6
    ip6tables -A ICMP6 -p icmpv6 -j LOG --log-level 7 --log-prefix "[FW.IN drop ICMP6] "
    ip6tables -A ICMP6 -p icmpv6 -j DROP
    
    ip6tables -A INPUT -p icmpv6 -j ICMP6
    

    所以我的结论是网络服务器只需要类型 1,2,3,4,128,135,136

    • 1

相关问题

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • iptables 单个规则中的多个源 IP

  • 存储 iptables 规则的规范方法是什么

  • 使用 iptables 和 dhcpd 进行端口转发

  • 根据 Apache 日志数据自动修改 iptables 以阻止行为不良的客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve