【原创投稿】防火墙策略优化 – 干扰流量分析 -juniper篇

 

感谢 three_body同学的再次投稿

 

1.    引言

在《防火墙策略优化-Juniper》一文中,已经完整的讲了通过分析防火墙流量日志进行策略优化的方法,其中有些流量会造成干扰,本文单独讲讲。

2.    示例

2.1. 示例一

如有以下两条策略,还是按照上文的表格:

Policy Policy ID Source Destination Service 日志
From Untrust to Trust 114 192.168.30.0/24 172.16.5.0/24 Any
From Trust to Untrust 27 172.16.5.0/24 192.168.30.0/24 Any

我们按照前文的梳理方法,运行脚本:

1|1|463x98像素

两条策略均有日志,看看实际策略里面的IP和端口,大概能知道,其中172.16.5.10是一台数据库服务器,端口为1521:

1|2|1110x301像素

我们再统计下,策略114是允许192.168.30.X访问172.16.5.10的数据库端口:

1|3|868x47像素

那么,策略27里面的流量又是什么呢?这里为什么会有从数据库服务器到客户端的流量呢?

1|4|1104x60像素

从source_dest_2014-03-20.log这个文件内容看不出来太多的信息,我们需要从原始日志里面查:

[root@RHEL2 test]# grep “policy_id=27″ 2014-03-20.log2014-03-20 00:48:40     Local0.Notice   10.0.0.5        P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 00:32:53” duration=691 policy_id=27 service=tcp/port:45736 proto=6 src zone=Trust dst zone=Untrust action=Permit sent=590 rcvd=0 src=172.16.5.10 dst=192.168.30.4 src_port=1521 dst_port=45736 src-xlated ip=172.16.5.10 port=1521 dst-xlated ip=192.168.30.4 port=45736 session_id=524103 reason=Close – AGE OUT<000>2014-03-20 00:48:40     Local0.Notice   10.0.0.5        P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 00:32:53″ duration=691 policy_id=27 service=tcp/port:50183 proto=6 src zone=Trust dst zone=Untrust action=Permit sent=590 rcvd=0 src=172.16.5.10 dst=192.168.30.4 src_port=1521 dst_port=50183 src-xlated ip=172.16.5.10 port=1521 dst-xlated ip=192.168.30.4 port=50183 session_id=520180 reason=Close – AGE OUT<000>

这里面有几个关键信息:

a)        sent=590 rcvd=0

sent代表发送的字节数,rcvd代表接收的字节数,这里接收为0。我们看看策略114里面,访问数据库正常流量日志是什么样,可以看到rcvd是一个很大的数值。

2014-03-20 05:16:38     Local0.Notice   10.0.0.5        P_DF01: NetScreen device_id=P_DF01 [Root]system-notification-00257(traffic): start_time=”2014-03-20 01:12:08″ duration=14414 policy_id=114 service=SQL*Net V2 proto=6 src zone=Untrust dst zone=Trust action=Permit sent=453265 rcvd=460944 src=192.168.30.5 dst=172.16.5.10 src_port=46117 dst_port=1521 src-xlated ip=192.168.30.5 port=46117 dst-xlated ip=172.16.5.10 port=1521 session_id=524203 reason=Close – TCP FIN<000>

 

b)        reason=Close – AGE OUT

我们看看Juniper官方文档里面的解释:连接超时

1|5|775x597像素

也就是说,因为超时,由服务器主动给客户端发了一条请求,正好匹配了这条策略,产生了这条日志。这点可以去看看TCP有限状态机关于连接关闭的部分。这里怀疑是由于Server端主动关闭产生的日志,这一点不确认,有高人的话麻烦请讲一讲。所以,这里策略27如果没有其它流量的话,可以认为该策略是无用的。

 

2.2. 示例二

以上为第一种干扰流量。下面讲另一种:

Policy Policy ID Source Destination Service 日志
From Untrust to Trust 112 192.168.10.0/24 172.16.10.0/24 Any
From Trust to Untrust 10 172.16.10.0/24 192.168.10.0/24 Any

其中172.16.10.12为一台FTP服务器,策略应为开通访问FTP的策略。按理只需要策略112即可,粗心的管理员配置了双向开通策略。我们直接筛选出两个策略的原始日志来看看:

2014-03-20 01:02:39     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 00:58:18″ duration=1 policy_id=112 service=ftp proto=6 src zone=Untrust dst zone=Trust action=Permit sent=1003 rcvd=1104 src=192.168.10.11 dst=172.16.10.12 src_port=52250 dst_port=21 src-xlated ip=192.168.10.11 port=52250 dst-xlated ip=172.16.10.12 port=21 session_id=523610 reason=Close – TCP RST<000>2014-03-20 01:02:39     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 00:58:18″ duration=1 policy_id=112 service=ftp proto=6 src zone=Untrust dst zone=Trust action=Permit sent=931 rcvd=1176 src=192.168.10.11 dst=172.16.10.12 src_port=52251 dst_port=21 src-xlated ip=192.168.10.11 port=52251 dst-xlated ip=172.16.10.12 port=21 session_id=518776 reason=Close – TCP RST<000>2014-03-20 01:02:39     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 00:58:18″ duration=1 policy_id=112 service=tcp/port:57518 proto=6 src zone=Untrust dst zone=Trust action=Permit sent=9735372 rcvd=185056 src=172.16.10.12 dst=192.168.10.11 src_port=20 dst_port=57518 src-xlated ip=172.16.10.12 port=20 dst-xlated ip=192.168.10.11 port=57518 session_id=519848 reason=Close – Parent Closed<000>2014-03-20 01:02:39     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 00:58:18″ duration=1 policy_id=112 service=tcp/port:60289 proto=6 src zone=Untrust dst zone=Trust action=Permit sent=61627 rcvd=1776 src=172.16.10.12 dst=192.168.10.11 src_port=20 dst_port=60289 src-xlated ip=172.16.10.12 port=20 dst-xlated ip=192.168.10.11 port=60289 session_id=518764 reason=Close – Parent Closed<000>2014-03-20 04:02:29     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 03:58:08″ duration=1 policy_id=112 service=ftp proto=6 src zone=Untrust dst zone=Trust action=Permit sent=940 rcvd=1117 src=192.168.10.11 dst=172.16.10.12 src_port=48457 dst_port=21 src-xlated ip=192.168.10.11 port=48457 dst-xlated ip=172.16.10.12 port=21 session_id=518779 reason=Close – TCP RST<000>2014-03-20 04:02:29     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 03:58:08″ duration=1 policy_id=112 service=tcp/port:40455 proto=6 src zone=Untrust dst zone=Trust action=Permit sent=8154 rcvd=372 src=172.16.10.12 dst=192.168.10.11 src_port=20 dst_port=40455 src-xlated ip=172.16.10.12 port=20 dst-xlated ip=192.168.10.11 port=40455 session_id=524176 reason=Close – Parent Closed<000>

2014-03-20 04:02:41     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 03:58:08″ duration=17 policy_id=10 service=tcp/port:48457 proto=6 src zone=Trust dst zone=Untrust action=Permit sent=126 rcvd=40 src=172.16.10.12 dst=192.168.10.11 src_port=21 dst_port=48457 src-xlated ip=172.16.10.12 port=21 dst-xlated ip=192.168.10.11 port=48457 session_id=518979 reason=Close – AGE OUT<000>

看看筛选后的结果:

policy_id=112 service=ftp proto=6 src zone=Untrust dst zone=Trust src=192.168.10.11 dst=172.16.10.12 src_port=52250 dst_port=21policy_id=112 service=ftp proto=6 src zone=Untrust dst zone=Trust src=192.168.10.11 dst=172.16.10.12 src_port=52251 dst_port=21policy_id=112 service=tcp/port:57518 proto=6 src zone=Untrust dst zone=Trust src=172.16.10.12 dst=192.168.10.11 src_port=20 dst_port=57518policy_id=112 service=tcp/port:60289 proto=6 src zone=Untrust dst zone=Trust src=172.16.10.12 dst=192.168.10.11 src_port=20 dst_port=60289policy_id=112 service=ftp proto=6 src zone=Untrust dst zone=Trust src=192.168.10.11 dst=172.16.10.12 src_port=48457 dst_port=21policy_id=112 service=tcp/port:40455 proto=6 src zone=Untrust dst zone=Trust src=172.16.10.12 dst=192.168.10.11 src_port=20 dst_port=40455

policy_id=10 service=tcp/port:48457 proto=6 src zone=Trust dst zone=Untrust src=172.16.10.12 dst=192.168.10.11 src_port=21 dst_port=48457

从日志可以看出以下信息:

a)        FTP服务器172.16.10.12运行模式应该为主动模式(如果是被动模式,应该有FTP服务器高端端口的日志);

b)        策略112中的日志既有从客户端192.168.10.11到FTP服务器172.16.10.12的(标红部分),也有从FTP服务器172.16.10.12到客户端192.168.10.11的(标绿部分)。

再看看我们开放的策略,虽然我们有策略10,但是从FTP服务器172.16.10.12到客户端192.168.10.11的流量日志仍然在策略112中,这点与防火墙设计有关系。

Policy Policy ID Source Destination Service 日志
From Untrust to Trust 112 192.168.10.0/24 172.16.10.0/24 Any
From Trust to Untrust 10 172.16.10.0/24 192.168.10.0/24 Any

c)        但是策略10仍然有日志(标蓝部分),我们看看原始日志:

2014-03-20 04:02:41     Local0.Notice   10.0.0.5    P_DF01: NetScreen device_id=P_DF01  [Root]system-notification-00257(traffic): start_time=”2014-03-20 03:58:08″ duration=17 policy_id=10 service=tcp/port:48457 proto=6 src zone=Trust dst zone=Untrust action=Permit sent=126 rcvd=40 src=172.16.10.12 dst=192.168.10.11 src_port=21 dst_port=48457 src-xlated ip=172.16.10.12 port=21 dst-xlated ip=192.168.10.11 port=48457 session_id=518979 reason=Close – AGE OUT<000>

该流量是不是无用流量呢,删除策略10是否会影响正常的FTP服务?请大家自行分析。

3.    后续

以上讲了一些分析了一些干扰流量,需要我们去仔细判断,这里面需要个人有丰富的经验和知识储备。以上的策略按正常来讲,本应该不需开通双向策略,给后续的分析带来了干扰。但有一些应用又需要开通双向的策略,这与具体的协议实现有关系,大家可以想想有哪些。这里再单独提另外一种需要关注的,对于F5这种发布服务IP的应用来说,开放策略又有不同。

 

另外,有些朋友说,可以通过抓取流量分析,不用日志。我在《防火墙策略优化-Juniper》一文中说过“认识上,要尽可能利用现有策略,而不是妄想抛弃现有策略重新搭建,除非是一个新墙或者允许你去做这种尝试的情况下”。为什么不推荐使用抓取流量进行分析呢,主要是以下几点考虑:

a)        抓取流量需要配置流量镜像、需要流量分析工具保存分析流量,需要考虑如何配置镜像、采用什么工具分析、如何保存、磁盘空间大小等,相对于采集日志来讲复杂的多。

b)        抓取流量会带来网络中更多的干扰流量,分析起来会更困难。

c)        最重要的一点,流量里面不包含策略本身固有的一些有用信息,如区域、流量方向、策略ID等,这些本身就是需要的。即使通过流量分析完毕,后续也要再重组策略,那么对于原有的策略是全部放弃添加新策略呢还是修改原策略?

综上所述,通过抓取流量分析的方法,事倍功半。

总之,要干好这件事,总结起来就是八个字:经验丰富,胆大心细。

放手去干吧!

感谢srxh1314发表我的文章。

关于 “【原创投稿】防火墙策略优化 – 干扰流量分析 -juniper篇” 的 5 个意见

  1. SSG550: NetScreen device_id=0158052007000034 [Root]system-notification-00257(traffic): start_time=\”2018-03-28 12:29:31\” duration=0 policy_id=137 service=tcp/port:445 proto=6 src zone=Trust dst zone=Untrust action=Deny sent=0 rcvd=32 src=172.18.14.114 dst=148.164.222.56 src_port=59990 dst_port=445 session_id=0 reason=Traffic Denied\u0000
    请问以上的防火墙日志可以考虑,从哪些方面分析呢?

发表评论

电子邮件地址不会被公开。 必填项已用*标注