使用Graylog分析Cisco ASA防火墙日志
我们将使用Graylog的Grok模式从Cisco ASA日志中提取信息。
Graylog侦听器和Iptables
登录到Graylog,创建系统日志UDP侦听器。
配置Cisco ASA设备以将日志发送到Graylog。
在这种特殊情况下,我们将Graylog绑定到非特权端口UDP 1514,然后设置iptables规则以将到达UDP 514的流量重定向到UDP 1514 –这允许我们使用官方的syslog端口。
# ss -nplux|grep 514 udp UNCONN 0 0 :::1514 :::* users:(("java",11107,126))
iptables配置:
# iptables -t nat -A PREROUTING -p udp -m udp --dport 514 -j REDIRECT --to-ports 1514
# iptables -t nat -nL Chain PREROUTING (policy ACCEPT) target prot opt source destination REDIRECT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:514 redir ports 1514 Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
格罗模式
创建以下四个Grok模式(系统> Grok模式):
CISCO_TAGGED_SYSLOG%{CISCOTIMESTAMP:cisco_timestamp} ?: %% {CISCOTAG:cisco_tag}:
CISCOTIMESTAMP%{MONTH:month} +%{MONTHDAY:monthday}(?:%{YEAR:year})? %{CISCO_TIME:UNWANTED}
CISCO_TIME(?!<[0-9])%{HOUR:hour}:%{MINUTE:minute}(?::%{SECOND:UNWANTED})(?![0-9])
CISCOTAG [A-Z0-9] +-%{INT:UNWANTED}-(?:[A-Z0-9 _] +)`
导航到Graylog的syslog UDP输入配置,以创建新的提取器:
系统>输入> Syslog UDP>管理提取器(按钮)
以下是从Cisco ASA收到的匿名syslog消息,我们将在本文中使用该消息:
Nov 25 2016 06:28:07: %ASA-7-50000: IKE Receiver: Packet received on 10.78.0.1:500 from 192.168.10.1:500
消息因系统而异,但一般而言;
- 系统日志前缀以<strong>时间戳</strong>开头,
- 时间戳记是当地时间,
- 时间戳后面似乎有某种<strong> Cisco标签</strong>,
- 然后,我们获得了我们实际上感兴趣的消息部分。
我们需要提出一个适用于上面syslog消息的Grok模式。
这样的事情应该做:
%{CISCO_TAGGED_SYSLOG:UNWANTED}%{GREEDYDATA:cisco_message}
这将为我们提供以下输出,其中cisco_message部分是最有价值的部分,因为我们可以稍后对其进行解析:
cisco_message IKE Receiver: Packet received on 10.78.0.1:500 from 192.168.10.1:500 cisco_tag ASA-7-50000 cisco_timestamp Nov 25 2016 06:28:07 hour 06 minute 28 month Nov monthday 25 year 2016
保存提取器。
由于我们存在cisco_message字段,因此我们可以进一步应用Grok模式提取IP地址和端口。
我们必须创建一个新的提取器,但是在这种情况下,应将Grok模式应用于cisco_message字段。
我们需要构造一个Grok模式以从cisco_message字段中提取信息:
`%{GREEDYDATA:category}接收者:从%{IPV4:src_ip}:%{INT:src_port}在%{IPV4:dst_ip}:%{INT:dst_port}上接收到的数据包
实际上,根据我们的示例,cisco_message可以包含各种信息,而不仅仅是IKE,因此,我们希望将条件应用于"仅在字段包含字符串的情况下才尝试提取":
IKE Receiver: Packet received
grok模式将为我们提供以下内容:
category IKE dst_ip 10.78.0.1 dst_port 500 src_ip 192.168.10.1 src_port 500
不要忘记保存提取器。
现在,假设cisco_message的内容有所不同,例如:
"User authentication succeeded: IP address: 10.78.0.24, Uname: sandy"
我们可以应用不同的Grok模式来提取IP和用户名:
%{GREEDYDATA:category}身份验证%{GREEDYDATA:login}:IP地址:%{IPV4:ip},Uname:%{GREEDYDATA:user}
这将为我们提供以下内容:
category User ip 10.78.0.24 login succeeded user sandy
我们可能希望将条件应用于"仅在字段包含字符串的情况下才尝试提取":
User authentication succeeded:
值得一提的是,ASA syslog输出会根据固件版本或者配置设置而有所不同,因此应调整Grok模式以反映这一点。