Shorewallredirect规则仅适用于同一networking中的某些主机

我正在尝试使用Shorewall的REDIRECT动作拦截目的地为防火墙的端口514(TCP和UDP)到端口5000(也包括TCP和UDP)的stream量,同时也允许直接stream量到后端端口。 (原因并不重要,但简短的版本是我们将日志聚合器作为非特权用户运行,但守护进程不支持删除root权限,因此它不能监听特权端口;同时我们有很多旧的syslog实现,不允许发送到其他端口。)

除防火墙本身之外,还定义了3个区域:loc(10.0.0.0/8),dmz(172.16.0.0/16)和net(其他)。 后者主要是为了拒绝/放弃“不可信”networking的一切。

相关规则如下所示:

 #ACTION SOURCE DEST PROTO DEST # PORT SECTION NEW REDIRECT:info loc 5000 tcp,udp 514 REDIRECT:info dmz 5000 tcp,udp 514 ACCEPT:info loc $FW tcp,udp 5000 ACCEPT:info dmz $FW tcp,udp 5000 

到现在为止还挺好。 (还有其他规则,例如允许SSH和HTTP连接,但是这些是唯一与端口514或5000相关的规则。)默认策略是针对loc和dmz的REJECT ,针对networking的DROP

问题是,我有许多主机被拒绝的实例,而同一networking中的相邻主机正在被redirect和接受。 例如,172.16.0.194正在尽可能快地将消息填充到聚合器中,但172.16.0.166却使每个数据包都被拒绝。 同样,10.140.88.150被接受,而10.192.253.4被拒绝。 以下是后者对的示例系统日志消息:

 Shorewall:loc_dnat:REDIRECT:IN=eth0 OUT= MAC=/*anon*/:08:00 SRC=10.140.88.150 DST=10.1.25.14 LEN=134 TOS=0x00 PREC=0x00 TTL=253 ID=9092 PROTO=UDP SPT=62162 DPT=514 LEN=114 Shorewall:loc2fw:REJECT:IN=eth0 OUT= MAC=/*anon*/:08:00 SRC=10.192.253.4 DST=10.1.25.14 LEN=164 TOS=0x00 PREC=0x00 TTL=254 ID=58464 PROTO=UDP SPT=514 DPT=514 LEN=144 

我觉得有趣的是,在我的日志中,有很less的成功的REDIRECT实例(例如这个主机只有1个),尽pipe主机成功地发送了数千和数千条消息,但是似乎每条消息都有一个REJECT行消息被拒绝的主机正在发送。 同样有趣的是,现在许多主机被拒绝,他们被redirect和接受,直到防火墙重新启动,当我们试图添加一个新的规则(说规则已被删除,但我们仍然有相同的问题)。 目前的所有消息都是通过UDP传送的,但是这些规则需要适用于这两种协议。

(也有趣的是,使用tcpdump ,我可以看到ICMP“端口不可达”响应被发送给一些被拒绝的主机,但是不会被发送给其他人,我不知道这是什么意思。

我的理论是,来自被拒绝的主机的消息由于某种原因被作为ESTABLISHEDRELATED连接的一部分被iptables查看,因此不能与SECTION NEW任何事物匹配; 不过,这是REDIRECTDNAT规则唯一可以放置的部分,所以如果出现这个问题,我不知道如何解决这个问题。 (我也不知道如何确认或反驳这个理论。)

我试过使用DNAT (在DEST列中使用$FW::5000 )而不是REDIRECT ,但是结果是一样的。 我也尝试添加对端口514的ACCEPT规则,但是这对于REDIRECT规则是由谁取得还是没有取得任何效果。

我如何configurationShorewall以便将所有连接redirect到指定networking(区域)的给定端口,而不仅仅是看似随机的主机?