首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >of表与数据包ip6tables处理的区别

of表与数据包ip6tables处理的区别
EN

Server Fault用户
提问于 2015-02-14 05:15:29
回答 2查看 5.1K关注 0票数 0

我查看了各种netfilter、iptables和ip6tables资源。我已经搜索过谷歌,包括StackExchange网站的信息,并且,我找不到关于iptables和ip6tables处理数据包的区别的信息的简单或清晰的链接。

以下是我的标准iptable规则:

代码语言:javascript
复制
* filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -m state --state ESTABLISHED -j ACCEPT

对于传入和传出HTTP、DNS解析以及基本ICMP (v4 0、3、8、11、12)也有类似的规则。

当我使用ip6tables设置相同的规则时,我的服务器对HTTP、SSH和ICMP连接的响应都是“主机关闭”。

我可以将初步规则设置为:

代码语言:javascript
复制
-P INPUT ACCEPT
-P OUTPUT ACCEPT

这会再次打开服务器。但是它不过滤数据包(所有数据包的任意规则,少向前)。

我试过附加:

代码语言:javascript
复制
-A INPUT -i eth0 -j DROP

但是,再次,这开始引起问题。

在其他数据包验证中,使用telnet进行双重和三次检查(如果使用drop,服务器日志就会丢弃连接,对于拒绝也是一样)。

另外,我还看到了一些简单的规则集,除了所需的规则外,dport和运动范围都是简单的接受(全部)。

简单地说,我已经习惯了典型的iptables (ipv4)规则,除了下面的规则之外,这些规则删除了所有内容。

理想情况下,我正在寻找链接或信息,这些链接或信息提供了深入、详细的技术信息,说明iptables和ip6tables进程(以及丢弃或接受)数据包的不同之处。

如果这些是基本的原始规则,那么ip6tables似乎会任意放弃所有内容,但是,在第一组规则中不被接受的情况下,我尝试删除所有接口输入的后一条规则仍然会引起问题(考虑到最初的规则集是要接受的,但是没有地方可去)。

FWIW:我是dist上的Debian (v8) --从Debian (v7)升级到DigitalOcean液滴。除了ip6tables规则之外,其他一切都在运行,除了ipv6规则(服务器变得ipv6资源不可用)。

原件张贴在StackOverflow上,删除,复制/粘贴在这里的ServerFault (建议更相关)。

EN

回答 2

Server Fault用户

发布于 2015-02-15 22:16:23

你的规定要放弃ICMP了。这对IPv4和IPv6都是错误的,它将显著破坏PMTU的发现;然而,大多数IPv4堆栈实现了这种(非常常见)错误配置的解决方案。然而,对于IPv6来说,许多事情都将被打破,尤其是来自Teredo主机的访问。

一个简单的解决方案是添加允许ICMP的规则:

代码语言:javascript
复制
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT

ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 -j ACCEPT
ip6tables -A FORWARD -p icmpv6 -j ACCEPT

一个可能更安全的解决方案是,通过遵循RFC 4890的建议,只允许适当功能所必需的ICMP消息类型。

票数 2
EN

Server Fault用户

发布于 2015-02-14 07:44:21

答案是迈克尔·汉普顿在评论中说..。几乎完全相同的问题是:

Debian ip6表规则的IPv6 6设置

我的最后ip6tables规则如下:

代码语言:javascript
复制
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-port-unreachable
-A FORWARD -j REJECT --reject-with icmp6-port-unreachable
COMMIT

这一切都说明了:

  • 接受一切。
  • 接受已建立和相关的连接(遵循接下来的3条端口规则)。
  • 接受目标端口22 (ssh)、80 (http)、443 (https)上的连接
  • 接受任何ipv6 ICMP类型(与v4不同)
  • 拒绝任何其他输入
  • 拒绝任何转发

我可以在over ipv6和wget -6 http...

总之,形成ip6tables规则与iptables规则略有不同。下一步:测试是否同样适用于iptables (v4),并尽可能保持类似的状态。(谢谢迈克尔)

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/667593

复制
相关文章

相似问题

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