首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于IPv6规则和ip6tables的帮助

关于IPv6规则和ip6tables的帮助
EN

Unix & Linux用户
提问于 2018-01-04 22:43:15
回答 1查看 2.4K关注 0票数 1

现在,我正在努力弄清楚如何在我的服务器上设置一些IPv6规则。我的要求是不允许对回送设备和本地IP地址(在本例中为链接本地)输入回送请求,以及打开端口22、80和443。对于IPv4来说,一切都很好,但是我对ip6tables的问题是遵循输入的链式顺序。我现在拥有的是:

代码语言:javascript
运行
复制
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d ::1/128 -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d fe80::/64 -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -j ACCEPT
COMMIT

目前我的罪魁祸首是-A INPUT -j REJECT。我的期望是,这将做一个含蓄的否认所有上面没有列出的链条。然而,情况似乎并非如此,而且似乎与带有IPv4规则的普通旧iptables不同。有人能在这里启发我解决方案吗?这是一个Ubuntu14.04服务器

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-01-05 08:59:54

让我们先看看您的规则试图做什么,看看它们为什么不起作用:

代码语言:javascript
运行
复制
-A INPUT -i lo -j ACCEPT

到达环回接口的所有通信量都将被处理,包括ICMPv6流量。

代码语言:javascript
运行
复制
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

很正常。

代码语言:javascript
运行
复制
-A INPUT -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j ACCEPT

正如所写的那样,这条规则只允许ping请求(对任何接口):任何其他ICMPv6数据包都将被最后的显式拒绝拒绝。

代码语言:javascript
运行
复制
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable

很正常。

代码语言:javascript
运行
复制
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d ::1/128 -j REJECT --reject-with icmp6-port-unreachable
-A OUTPUT -p icmpv6 --icmpv6-type echo-request -d fe80::/64 -j REJECT --reject-with icmp6-port-unreachable

这些规则只会阻止主机向本地主机和链接本地网络地址(也就是链接本地地址范围是一个/10.)发送pings。

代码语言:javascript
运行
复制
-A OUTPUT -j ACCEPT

很正常。

但是,您说:“我的要求是不允许输入回送设备和本地IP地址(在这种情况下,链接本地) ...”。您编写的规则几乎与您对此要求的要求截然相反。而且,通常在输入端设置输入过滤器更好,因为这是大多数人都会寻找这样的东西的地方,它对所有的流量都是有效的,而不仅仅是你的计算机发送的流量。

我建议您按以下方式编写规则链:

代码语言:javascript
运行
复制
-A INPUT -i lo -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -d fe80::/10 -p icmpv6 -m icmpv6 --icmpv6-type echo-request -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -p icmpv6 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable

关于重写规则的一些意见:

  1. 我更喜欢把拒绝规则放在接受规则前面,在更宽的过滤器前面放置更窄的过滤器,这样我就不会意外地允许某些东西通过,因为它是由更宽的过滤器允许的。这并不是一个严格的规则,但它可以帮助我更容易地想象正在发生的事情。
  2. 输出链不再需要,因为规则是在输入链中处理的。
  3. 尽管您将其作为一项要求,但我不确定为什么您不想让pings访问回送接口,因为只有本地计算机才能发送到该接口。不过,这只是一个观察:如果您有特殊的需要这样做,这是好的。
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/414875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档