首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ip6tables阻塞输出流量

ip6tables阻塞输出流量
EN

Server Fault用户
提问于 2011-06-29 16:27:27
回答 4查看 3.6K关注 0票数 2

我的OpenVZ VPS阻塞出站IPv6流量,但正确地过滤入站IPv6流量。

下面是我的ip6表-还原脚本。

代码语言: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 ipv6-icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 51413 -j ACCEPT
-A INPUT -p udp -m udp --dport 51413 -j ACCEPT
-A INPUT -m limit --limit 5/min
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A FORWARD -j ACCEPT
-A OUTPUT -j ACCEPT
COMMIT

ICMPv6流量仍然能够通过入站和出站。

当我使用-F刷新这些规则时,出站流量很好。

我在这里错过了什么?

编辑:看来ip6tables正在将已建立的数据包标记为无效。因此,出站通信实际上并没有被阻塞。应答数据包不允许再次入站,因此出现阻塞的出站通信量。允许无效数据包入站解决了出站问题,但也使入站筛选器失效。

EN

回答 4

Server Fault用户

回答已采纳

发布于 2011-06-29 18:23:08

您使用的是哪个版本的内核,旧版本在IPv6的netfilter中没有连接跟踪有状态防火墙支持,因此允许相关的、已建立的通信量的规则将无法工作,您需要允许!-syn -dport 1024:65535和udp通信量。

当允许流量时,您可能需要指定状态模块,例如,这里是一个来自RHEL6主机的配置,它可以正常工作。

代码语言:javascript
复制
ip6tables -t filter -F INPUT
ip6tables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -t filter -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -t filter -A INPUT -i lo -j ACCEPT
ip6tables -t filter -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
ip6tables -t filter -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
ip6tables -t filter -A INPUT -j LOG --log-prefix=v6_input_deny --log-level=4
ip6tables -t filter -A INPUT -j REJECT --reject-with icmp6-adm-prohibited
票数 5
EN

Server Fault用户

发布于 2014-11-11 22:09:01

看来您正在使用CentOS5或另一个RHEL5变体。

Netfilter在RHEL5 5中的连接跟踪中断,永远不会被修复。因此,典型的iptable规则(如-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT )将无法工作,ip6table/connfilter只会简单地认为它们“无效”。在下面的示例中,请注意Netfilter如何错误地将有效数据包标记为“无效”而不是“已建立”:

代码语言:javascript
复制
# ip6tables-save |grep state
-A INPUT -s ::/0 -d ::/0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -s ::/0 -d ::/0 -m state --state INVALID -j ACCEPT 
# curl -6 www.google.com >/dev/null 2>&1

# ip6tables --list --numeric -v
...
Chain INPUT (2 references)
 pkts bytes target     prot opt in     out     source               destination         
0     0 ACCEPT     all      lo     *       ::/0                 ::/0               
3   208 ACCEPT     icmpv6   *      *       ::/0                 ::/0               
0     0 ACCEPT     ah       *      *       ::/0                 ::/0               
0     0 ACCEPT     all      *      *       ::/0                 ::/0               state RELATED,ESTABLISHED 
61 65747 ACCEPT    all      *      *       ::/0                 ::/0               state INVALID 

如果您为tcpdump流量运行IPv6,您将看到来自远程主机的'SYN‘数据包到远程主机,’SYN‘响应包。此时,对于默认的ip6tables,数据包将不匹配任何现有规则,因此将属于最后一个规则- -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited

为什么这些数据包是无效的?它是那个版本的红帽中的一个bug,而且从来没有被修复过。

作为一种解决方法,您可以尝试忽略入站SYN,它提示连接跟踪问题:

代码语言:javascript
复制
-A INPUT -s ::/0 -d ::/0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp ! --syn -s 2001:1:1:1::/48 -j ACCEPT

另外,有些人还可以接受UDP数据包:

代码语言:javascript
复制
-A RH-Firewall-1-INPUT -p udp -m udp

但在某种程度上,这开始看起来像是一种安全隐患。如果你接受所有这样的流量,为什么还要用防火墙呢?

票数 2
EN

Server Fault用户

发布于 2011-06-29 18:11:19

您必须接受tcp、sctp和udp流量。

代码语言:javascript
复制
-A OUTPUT -p tcp -j ACCEPT 
-A OUTPUT -p udp -j ACCEPT 
-A OUTPUT -p sctp -j ACCEPT
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/285388

复制
相关文章

相似问题

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