搭建ELK日志系统分析处理fortigate的syslog日志
现使用的fortigate防火墙软件版本有bug导致fortiview的流量分析经常报错,但因设备托管在机房不考虑到远程升级存在风险,所以还是考虑将防火墙日志通过syslog输出给日志平台进行分析处理。
ELK简介
ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。
Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;
Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。
ELK部署架构
因为现在只有1台fortigate防火墙的日志需要交给ELK处理,为方便测试学习,故将ELK组件安装在一台测试服务器上。
在这种架构中,只有一个 Logstash、Elasticsearch 和 Kibana 实例。Logstash 通过输入插件从多种数据源(比如日志文件、标准输入 Stdin 等)获取数据,再经过滤插件加工数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 展示。
配置安装
ElasticSearch安装
elasticsearch依赖Java开发环境支持,先安装JDK。
yum -y install java-1.8.0-openjdk
查看java安装情况
java -version
openjdk version "1.8.0_272"
OpenJDK Runtime Environment (build 1.8.0_272-b10)
OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode)
开始安装ElasticSearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.0.rpm
rpm -ivh elasticsearch-6.1.0.rpm #安装后自动创建elasticsearch用户及组
mkdir -p /home/es-data #es数据存放目录
mkdir -p /home/es-logs #es日志存放目录
chown -R elasticsearch:elasticsearch /home/es-data
chown -R elasticsearch:elasticsearch /home/es-logs
修改配置文件elasticsearch.yml
vim /etc/elasticsearch/elasticsearch.yml
修改如下内容:
#设置data存放的路径为/home/es-data
path.data: /home/es-data
#设置logs日志的路径为/home/es-logs
path.logs: /home/es-logs
#设置内存不使用交换分区
bootstrap.memory_lock: false
#配置了bootstrap.memory_lock为true时反而会引发9200不会被监听,原因不明
#设置允许所有ip可以连接该elasticsearch
network.host: 0.0.0.0
#开启监听的端口为9200
http.port: 9200
#增加新的参数,为了让elasticsearch-head插件可以访问es (5.x版本,如果没有可以自己手动加)
http.cors.enabled: true
http.cors.allow-origin: "*"
启动
systemctl start elasticsearch
查看状态
systemctl status elasticsearch
设置开机启动
systemctl enable elasticsearch
验证运行情况
[root@localhost ~]# curl -X GET http://localhost:9200
{
"name" : "ozNOtk_",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "KkWwJ4SeTu-e42sKa_nZwg",
"version" : {
"number" : "6.1.0",
"build_hash" : "c0c1ba0",
"build_date" : "2017-12-12T12:32:54.550Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
以上结果表示运行正常。
logstash安装
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.1.0.rpm
rpm -ivh logstash-6.1.0.rpm
mkdir -p /home/ls-data #创建ls数据存放目录
chown -R logstash:logstash /home/ls-data
mkdir -p /home/ls-logs #创建ls日志存放目录
chown -R logstash:logstash /home/ls-logs
创建测试配置文件
vim /etc/logstash/conf.d/syslog.conf #新增配置文件
input {
syslog {
type => "rsyslog"
port => "514"
}
}
output{
stdout{
codec => rubydebug
}
}
验证
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf #此时将设备syslog日志发送至ELK服务器,注意需要关闭系统防火墙或放行514端口
#正常情况下,会如下收到syslog日志
{
"@timestamp" => 2020-11-13T02:29:43.080Z,
"message" => "date=2020-11-13 time=10:29:43 devname=\"FG80D-OFFICE\" devid=\"FG080D3916000230\" logid=\"0000000013\" type=\"traffic\" subtype=\"forward\" level=\"notice\" vd=\"root\" eventtime=1605234583 srcip=192.168.1.5 srcname=\"Honor_Play-506a3bdd2b80af\" srcport=36584 srcintf=\"LAN\" srcintfrole=\"lan\" dstip=203.119.169.31 dstport=443 dstintf=port1 dstintfrole=\"undefined\" poluuid=\"55264c72-f728-51ea-f9c8-657401334c0c\" sessionid=2356948 proto=6 action=\"close\" policyid=1 policytype=\"policy\" service=\"HTTPS\" dstcountry=\"China\" srccountry=\"Reserved\" trandisp=\"snat\" transip=121.224.90.157 transport=36584 appid=47964 app=\"DingTalk\" appcat=\"Collaboration\" apprisk=\"elevated\" applist=\"default\" duration=782 sentbyte=5090 rcvdbyte=10772 sentpkt=48 rcvdpkt=39 utmaction=\"allow\" countapp=1 sentdelta=164 rcvddelta=84 devtype=\"Android Phone\" devcategory=\"Android Device\" osname=\"Android\" osversion=\"9\" mastersrcmac=\"00:be:3b:23:59:b6\" srcmac=\"00:be:3b:23:59:b6\" srcserver=0",
"priority" => 0,
"@version" => "1",
"type" => "rsyslog",
"severity" => 0,
"tags" => [
[0] "_grokparsefailure_sysloginput"
],
"facility" => 0,
"facility_label" => "kernel",
"host" => "121.224.90.157",
"severity_label" => "Emergency"
}
#如果收不到,请检查514端口占用情况
[root@localhost ~]# netstat -anp|grep 514
tcp6 0 0 :::514 :::* LISTEN 8623/java
udp 0 0 0.0.0.0:514 0.0.0.0:* 8623/java
创建配置正式配置文件
vim /etc/logstash/conf.d/syslog.conf #删除之前的所有配置内容
input {
syslog {
type => "syslog"
port => 514
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "syslog-%{+YYYY.MM.dd}" # 数据量不大的情况下索引数量不能配置太多,否则索引和分片过多会影响性能
}
}
#参考:https://jaminzhang.github.io/elk/Logstash-collect-syslog/
修改logstash的启动用户(因为syslog使用514端口,在linux中小于1000的端口需要以root身份运行才能开始侦听)
vim /etc/systemd/system/logstash.service
User=root
Group=root
#将user和group默认的logstash改为root
[root@localhost ~]# netstat -anp|grep 514
tcp6 0 0 :::514 :::* LISTEN 8745/java
udp 0 0 0.0.0.0:514 0.0.0.0:* 8745/java
#踩这个坑的时候,还找到个帖子说要修改/etc/logstash/startup.options,但实际看来只用修改以上logstash.service即可。
#参考1:https://my.oschina.net/u/4275236/blog/3354332
#参考2:https://www.123admin.com/logstash-do-not-bin-port-514/
配置文件测试
[root@localhost ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console
Configuration OK
#关于WARNING: Could not find logstash.yml的解决方法
cd /usr/share/logstash
ln -s /etc/logstash ./config
[root@localhost logstash]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK
修改配置文件logstash.yml
vim /etc/logstash/logstash.yml
# 设置数据的存储路径为/home/ls-data
path.data: /home/ls-data
# 设置管道配置文件路径为/etc/logstash/conf.d
path.config: /etc/logstash/conf.d/*.conf
# 设置日志文件的存储路径为/home/ls-logs
path.logs: /home/ls-logs
启动
systemctl start logstash
查看状态
systemctl status logstash
设置开机启动
systemctl enable logstash
kibana安装
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.1.0-x86_64.rpm
rpm -ivh kibana-6.1.0-x86_64.rpm
rpm -ql kibana #默认安装目录/usr/share/kibana/
修改配置文件kibana.yml
vim /etc/kibana/kibana.yml
#kibana页面映射在5601端口
server.port: 5601
#允许所有ip访问5601端口
server.host: "0.0.0.0"
#elasticsearch所在的ip及监听的地址
elasticsearch.url: "http://localhost:9200"
启动
systemctl start kibana
查看状态
systemctl status kibana
设置开机启动
systemctl enable kibana
nginx安装
yum -y install epel-release
yum -y install nginx httpd-tools
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
vim /etc/nginx/nginx.conf
#将location配置部分,注释掉
#location / {
#}
创建kibana.conf
vim /etc/nginx/conf.d/kibana.conf
server {
listen 8000; #修改端口为8000
server_name kibana;
#auth_basic "Restricted Access";
#auth_basic_user_file /etc/nginx/kibana-user;
location / {
proxy_pass http://127.0.0.1:5601; #代理转发到kibana
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
重启nginx
systemctl restart nginx
ELK安装完成,来个重启
到这一步,ELK基本配置完了,输入如下命令,启动服务
# 启动ELK和nginx
systemctl restart elasticsearch logstash kibana nginx
#查看ELK和nginx启动状态
systemctl status elasticsearch logstash kibana nginx
以上重点感谢参考:http://www.justdojava.com/2019/08/11/elk-install/
ElasticSearch Head现已有chrome插件版,安装比较方便,请参考:https://github.com/mobz/elasticsearch-head
fortigate的syslog日志分析与处理
太尼玛复杂了,我先慢慢研究