修改防火墙以后,新规则会即时生效吗?

知识问答作者:U大使日期:2021-01-24点击:160

RT 我修改防火墙的规则以后,新规则是会立即生效吗?

1、用户在使用防火墙的时候,有时会遇到修改后规则不生效的问题。这个原因是因为tcp长连接导致的。

通常情况下,防火墙规则是立即生效的。但某些场景下,防火墙场景并不会立即生效。

以Nginx为例,Nginx会在触发keepalive_timeout(默认为65秒)之后,发送FIN包,让nf_conntrack_tcp_timeout_established不再起作用,转而触发nf_conntrack_tcp_timeout_time_wait的规则,而它的默认规则为120秒。

在这种场景,防火墙生效最多需要两分钟。

而对于类似于MySQL的长连接场景,由于nf_conntrack_tcp_timeout_established这个系统内核及参数设置其默认的失效时间为5天,这种场景一旦连接建立,通过修改防火墙的方式很难立即阻断连接。

2、防火墙未立即生效的补救措施:
如上面所提到的MySQL场景,其端口为3306。假设为了能够阻断来自于1.2.3.4的连接,可以在云主机中使用iptables的"RAW"表进行处理。

iptables -t raw -I PREROUTING -s 1.2.3.4 -p tcp -m tcp --dport 3306 -j DROP
CopyErrorSuccess
该方法之所以能够生效,是因为Linux系统的Netfilter中,在PREROUTING以及OUTPUT这两个HOOK的conntrack之前,安插了一个优先级更高的RAW表。通过RAW表,就可以分离出不需要被conntrack的流量了。

下一篇       上一篇