You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

容器化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:01:59