容器化ELK环境下Iptables日志解析与字段可视化指导
从Iptables日志中提取SRC/DST/SPT/DPT字段并实现可视化分析
刚好我之前也处理过类似的iptables日志解析需求,给你一步步梳理怎么做:
1. 修改Logstash配置,添加Grok过滤规则
Iptables的日志格式是固定的,我们可以用Logstash的grok插件直接匹配并提取字段。你需要在Logstash的配置文件(比如/etc/logstash/conf.d/iptables.conf)里添加过滤规则:
input { # 这里是你原来的输入配置,比如读取syslog或者本地文件 syslog { port => 514 type => "iptables" } } filter { if [type] == "iptables" { # 核心:用grok匹配iptables日志格式,提取需要的字段 grok { match => { "message" => "%{SYSLOGTIMESTAMP:log_timestamp} %{HOSTNAME:hostname} kernel: IN=%{WORD:in_interface} OUT=%{WORD:out_interface} MAC=%{DATA:mac_address} SRC=%{IP:src_ip} DST=%{IP:dst_ip} LEN=%{NUMBER:packet_length:int} TOS=%{HEXNUM:tos} PREC=%{HEXNUM:prec} TTL=%{NUMBER:ttl:int} ID=%{HEXNUM:packet_id} DF PROTO=%{WORD:protocol} SPT=%{NUMBER:src_port:int} DPT=%{NUMBER:dst_port:int} WINDOW=%{NUMBER:window_size} RES=%{HEXNUM:res} SYN URGP=%{NUMBER:urgp:int}" } add_tag => ["iptables_parsed"] } # 把日志时间解析成Elasticsearch能识别的时间格式 date { match => ["log_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss"] target => "@timestamp" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "iptables-%{+YYYY.MM.dd}" } }
说明:
- 上面的grok模式是基于标准的iptables日志格式,如果你的日志有自定义规则(比如添加了额外参数),可以调整匹配字符串
- 提取后的字段比如
src_ip、dst_ip、src_port、dst_port都是独立的,方便后续分析
2. 验证Logstash配置并重启服务
先测试配置文件是否合法:
sudo /usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/iptables.conf
如果提示Configuration OK,就重启Logstash服务:
sudo systemctl restart logstash
之后在Kibana的Discover面板里查看新生成的日志,应该能看到src_ip、dst_port这些独立字段了。如果没看到,先检查Logstash的日志(/var/log/logstash/logstash-plain.log)有没有报错,也可以用Kibana的Grok Debugger(在Dev Tools菜单里)测试你的日志字符串和grok模式是否匹配。
3. 在Kibana中创建可视化分析
有了独立字段之后,就可以轻松做可视化了,举几个常用的例子:
示例1:统计Top 10访问来源IP
- 进入Kibana的Visualize页面,选择Data Table
- 选择你的iptables索引模式
- 在Metrics里选择
Count,在Buckets里选择Terms,字段选src_ip,排序方式选Count,数量设为10 - 保存这个可视化,就能看到访问量最高的10个来源IP
示例2:统计目标端口的访问分布
- 选择Bar Chart类型
- Metrics选
Count,Buckets选Terms,字段选dst_port - 可以调整排序和显示数量,直观看到哪些端口被访问得最多
示例3:来源IP地理位置分布(需要GeoIP插件)
- 先在Logstash的filter里添加GeoIP解析:
geoip { source => "src_ip" target => "geoip" }
- 重启Logstash后,新日志会带有
geoip.location字段 - 在Kibana里选择Coordinate Map,用
geoip.location作为坐标,Count作为指标,就能在地图上看到来源IP的分布
4. 额外优化建议
- 如果你的iptables日志有多种格式(比如不同链的日志),可以用
if条件匹配不同的日志内容,编写对应的grok模式 - 可以给提取的字段添加字段类型(比如上面的
:int表示把字段设为整数类型),方便后续做数值统计
内容的提问来源于stack exchange,提问作者J H
相关产品推荐
相关产品推荐

