服务器运维之日志审计

标签: 无 分类: 未分类 创建时间:2022-05-20 02:24:46 更新时间:2024-11-15 10:49:45

1.前言

最近接了一个等保的项目,除了应用系统的问题修复之外,还要有服务器的防护,比如入侵检测,日志审计,边界检测等,要想不花钱解决问题怎么办呢?

ELK是Elasticsearch、Logstash、Kibana的简称,简单来说就是一个日志分析管理系统,当然这是最常用的,还有很多高端功能。安装配置的顺序就是Java->Elasticsearch->Logstash->Kibana。

刚开始我是在windows server 2008 R2上安装了jdk17.0.3.1,elesticsearch-8.2.0,logstash-8.2.0,kibana-8,2.0,结果最后的kibana的node版本不支持2008R2,结果只能降级到了ELK 6.8.23,jdk我重新配置指向了 openjdk 13.0.2,所以有些配置可能就不需要做了,比如 elasticsearch的ssl认证。

参考文章:
1.Windows最新版ELK日志分析系统搭建教程(附带便捷启动方案)
2.等保测评2.0:Windows安全审计
3.快速理解ELK 1.elasticsearch是核心负责数据的存储,对数据做索引并提供检索服务.2.logstash是原始数据的传输通道,提供一些高级的功能,比如对原始数据做一些处理将无格式的数据转化为某种格式的数据后提供给elasticsearch。3.beats是数据的采集代理,一般安装在被采集的服务器上,抓取目标服务器的各项数据传输给logstash。4.至于kibana则是前端的展示,用于将elasticsearch的数据直观的呈现出来.

2.安装JAVA

下载jdk-17->解压到本地目录,配置环境变量Path,运行:java -version 测试是否成功。

3.安装Elasticsearch

(1) 下载压缩包,解压到任意目录

(2) 修改conf下elasticsearch.yml配置文件

  • 设置ip地址,任意网络均可访问,取消注释:network.host: 0.0.0.0

下面的内容,是版本 8.2.0 要设置的内容,如果是版本6.8.23 可以不用设置

  • 关闭 ssl 认证,把 xpack.security.http.ssl:enabled 设置成 false
  • 关闭windows 的 elasticsearch 账号密码,把 xpack.security.enabled 属性设置为 false 即可,当然也可以设使用 elasticsearch-setup-passwords interactive 设置密码
  • 设置内存大小,在 config/jvm.options 文件中直接设置就好(追加):-Xms512m -Xmx2048m

(3) 到bin目录,执行elasticsearch.bat文件。

(4) 浏览器打开 locahost:9200 测试

(5) 设置用户名密码
修改 elasticsearch.yml,增加以下内容:

1
2
3
4
5
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
1
2
## windows下使用cmd窗口输入,根据提示生成一系列的密码
elasticsearch-setup-passwords interactive

问题

(1) UnknownHostException:geoip.elastic.co
启动elasticsearch.bat的时候,出现了下面的问题。

【解决】
修改 config\elasticsearch.yml 文件,增加:ingest.geoip.downloader.enabled: false 配置。

参考文章:
1.java.net.UnknownHostException: geoip.elastic.co 这里还有些其他的错误,是整个的安装配置过程。

(2) 9200无法访问
我启动elasticsearch.bat之后,访问9200端口,还是无法访问。即便我修改了 config\elasticsearch.yml 文件,增加了 network.host: 0.0.0.0 也不行。

显示:[DESKTOP-ASEA1FB] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/127.0.0.1:9200, remoteAddress=/127.0.0.1:59014}

【解决】
修改配置文件 config\elasticsearch.yml 文件,将 xpack.security.http.ssl:enabled 设置成 false。

参考文章:
1.无法访问9200端口的ElasticSearch服务
2.elasticSearch本地可以访问网页无法访问的解决方法
3.ElasticSearch 爬坑记录 这里给了解决方法,主要就是因为开启了ssl认证,windows 下直接启动 ElasticSearch ,见到 started 为成功启动,访问 htttp://localhost:9200 需要输入密码,是因为开启了密码验证模式。还有 Permission denied 问题,this version of the Java Runtime only recognizes 的java版本问题。
4.ElasticSearch设置账户密码(Docker,Windows,Linux适用)
5.拒绝裸奔,为 Elasticsearch 设置账号密码(qbit)
6.Elasticsearch、Logstash、Kibana手把手教你添加密码设置 这里还有logstash设置密码部分

4.安装Logstash

(1) 下载 Logstash

(2) conf目录下创建logstash.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
input {
tcp {
port => 5044
}
}

output {
elasticsearch {
hosts => ["localhost:9200"]
user => "logstash_system"
password => "rf08&ks"
}
stdout { codec => rubydebug }
}

(3) 打开cmd进入bin目录运行:

1
logstash -f C:\Soft\logstash-6.8.23.0\config\logstash.conf

(4) 浏览器打开 locahost:9600 测试,会有版本号输出。

(5) 用户名密码
修改config/logstash.yml配置文件,这个有没有用,其实我有点疑惑,因为我使用了上面的logstash.conf配置启动,可能就不需要这里的配置了。

1
2
3
4
xpack.monitoring.enabled: false
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: rf08&ks
xpack.monitoring.elasticsearch.hosts: ["https://es1:9200"]
参考文章:
1.Windows安装logstash 单独安装了logstash
2.Windows环境安装Logstash和Logstash-input-jdbc
3.windows环境下Logstash 安装配置使用 使用NSSM将Logstash安装为Windows服务,还介绍了Logstash的工作原理

问题

(1) Logstash stopped processing because of an error: (SystemExit) exit
启动logstash之后,直接报错了。查看日志文件,这里有一个显示:No config files found in path {:path=>”C:/Soft/config/logstash.conf”},但是我的目录是 C:\Soft\logstash-8.2.0\config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

C:\Soft\logstash-8.2.0\bin>logstash -f logstash.conf
"Using bundled JDK: C:\Soft\logstash-8.2.0\jdk\bin\java.exe"
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in ve
rsion 9.0 and will likely be removed in a future release.
Sending Logstash logs to C:/Soft/logstash-8.2.0/logs which is now configured via
log4j2.properties
[2022-05-22T09:50:09,155][INFO ][logstash.runner ] Log4j configuration
path used is: C:\Soft\logstash-8.2.0\config\log4j2.properties
[2022-05-22T09:50:09,171][WARN ][logstash.runner ] The use of JAVA_HOME
has been deprecated. Logstash 8.0 and later ignores JAVA_HOME and uses the bund
led JDK. Running Logstash with the bundled JDK is recommended. The bundled JDK h
as been verified to work with each specific version of Logstash, and generally p
rovides best performance and reliability. If you have compelling reasons for usi
ng your own JDK (organizational-specific compliance requirements, for example),
you can configure LS_JAVA_HOME to use that version instead.
[2022-05-22T09:50:09,171][INFO ][logstash.runner ] Starting Logstash {"
logstash.version"=>"8.2.0", "jruby.version"=>"jruby 9.2.20.1 (2.5.8) 2021-11-30
2a2962fbd1 OpenJDK 64-Bit Server VM 11.0.14.1+1 on 11.0.14.1+1 +indy +jit [mswin
32-x86_64]"}
[2022-05-22T09:50:09,186][INFO ][logstash.runner ] JVM bootstrap flags:
[-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75
, -XX:+UseCMSInitiatingOccupancyOnly, -Djava.awt.headless=true, -Dfile.encoding=
UTF-8, -Djruby.compile.invokedynamic=true, -Djruby.jit.threshold=0, -XX:+HeapDum
pOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadCon
textMapInheritable=true, -Djruby.regexp.interruptible=true, --add-opens=java.bas
e/java.security=ALL-UNNAMED, --add-opens=java.base/java.io=ALL-UNNAMED, --add-op
ens=java.base/java.nio.channels=ALL-UNNAMED, --add-opens=java.base/sun.nio.ch=AL
L-UNNAMED, --add-opens=java.management/sun.management=ALL-UNNAMED]
[2022-05-22T09:50:09,233][INFO ][logstash.settings ] Creating directory {
:setting=>"path.queue", :path=>"C:/Soft/logstash-8.2.0/data/queue"}
[2022-05-22T09:50:09,249][INFO ][logstash.settings ] Creating directory {
:setting=>"path.dead_letter_queue", :path=>"C:/Soft/logstash-8.2.0/data/dead_let
ter_queue"}
[2022-05-22T09:50:09,342][WARN ][logstash.config.source.multilocal] Ignoring the
'pipelines.yml' file because modules or command line options are specified
[2022-05-22T09:50:09,405][INFO ][logstash.agent ] No persistent UUID f
ile found. Generating new UUID {:uuid=>"ea8fe73b-25e1-410a-a4f4-39d9f4a03f6e", :
path=>"C:/Soft/logstash-8.2.0/data/uuid"}
TimerTask timeouts are now ignored as these were not able to be implemented corr
ectly
TimerTask timeouts are now ignored as these were not able to be implemented corr
ectly
TimerTask timeouts are now ignored as these were not able to be implemented corr
ectly
TimerTask timeouts are now ignored as these were not able to be implemented corr
ectly
[2022-05-22T09:50:14,743][INFO ][logstash.config.source.local.configpathloader]
No config files found in path {:path=>"C:/Soft/logstash-8.2.0/logstash.conf"}
[2022-05-22T09:50:14,776][ERROR][logstash.config.sourceloader] No configuration
found in the configured sources.
[2022-05-22T09:50:14,885][INFO ][logstash.agent ] Successfully started
Logstash API endpoint {:port=>9600, :ssl_enabled=>false}
[2022-05-22T09:50:20,339][INFO ][logstash.runner ] Logstash shut down.
[2022-05-22T09:50:20,354][FATAL][org.logstash.Logstash ] Logstash stopped pro
cessing because of an error: (SystemExit) exit
org.jruby.exceptions.SystemExit: (SystemExit) exit
at org.jruby.RubyKernel.exit(org/jruby/RubyKernel.java:747) ~[jruby.jar:
?]
at org.jruby.RubyKernel.exit(org/jruby/RubyKernel.java:710) ~[jruby.jar:
?]
at C_3a_.Soft.logstash_minus_8_dot_2_dot_0.lib.bootstrap.environment.<ma
in>(C:\Soft\logstash-8.2.0\lib\bootstrap\environment.rb:91) ~[?:?]

C:\Soft\logstash-8.2.0\bin>

【解决】
这个问题主要就是配置文件的问题,使用logstash -f 加载配置文件的时候,要代入绝对路径,比如:

1
logstash -f C:\Soft\logstash-8.2.0\config\logstash.conf
参考文章:
1.Logstash stopped processing because of an error: (SystemExit) exit
2.Running Logstash on Windows Write-Host $env:LS_JAVA_HOME;Running Logstash manually;Running Logstash as a service with NSSM
3.Elasticsearch、Logstash、Kibana添加密码步骤 这里有相关的密码配置

5.安装Kibana

(1) 下载Kibana,解压到任意目录

(2) 修改 config目录修改kibana.yml配置文件

1
2
3
4
5
6
7
8
server.port: 5601
server.host: "127.0.0.1"
elasticsearche.hosts: ["http://127.0.0.1:9200"]
## 如果配置了用户名密码,需要填写
elasticsearch.username: "kibana"
elasticsearch.password: "刚才生成的密码"

i18n.locale: "zh-CN"

(3) 启动bin/kibana.bat

(4) 测试:localhost:5601,会进入管理控制台

参考文章:
1.ELK Stack Install on Windows Server 2008 R2 视频介绍如何在windows 2008上安装ELK,node-v4.2.2-x64,ELK的版本也是比较老的
2.ELK Stack Install on Windows Server 2008 R2 这个是上面的文字介绍。

问题

(1) Node.js is only supported on Windows 8.1, Windows Server 2012 R2
我是在windows server 2008R2上安装的,结果报了这个错误。

1
2
3
4
5
6
C:\Soft\kibana-8.2.0\bin>kibana.bat
Node.js is only supported on Windows 8.1, Windows Server 2012 R2, or higher.
Setting the NODE_SKIP_PLATFORM_CHECK environment variable to 1 skips this
check, but Node.js might not execute correctly. Any issues encountered on
unsupported platforms will not be fixed.
C:\Soft\kibana-8.2.0\bin>

【解决】
配置了环境变量:NODE_SKIP_PLATFORM_CHECK =1,不再报上面的错误了,但是出现了下面的问题。

(2) A system error occurred: uv_os_gethostname returned ENOSYS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

C:\Soft\kibana-8.2.0\bin>kibana.bat
node:os:68
throw new ERR_SYSTEM_ERROR(ctx);
^

SystemError [ERR_SYSTEM_ERROR]: A system error occurred: uv_os_gethostname retur
ned ENOSYS (function not implemented)
at Object.<anonymous> (C:\Soft\kibana-8.2.0\node_modules\elastic-apm-http-cl
ient\index.js:39:21)
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (C:\Soft\kibana-8.2.0\node_modules\elastic-apm-node\li
b\config.js:6:28)
at Module._compile (node:internal/modules/cjs/loader:1103:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
{
code: 'ERR_SYSTEM_ERROR',
info: {
errno: -4054,
code: 'ENOSYS',
message: 'function not implemented',
syscall: 'uv_os_gethostname'
},
errno: [Getter/Setter],
syscall: [Getter/Setter]
}

C:\Soft\kibana-8.2.0\bin>

【解决】
因为我的是windows 2008 R2系统,经过多次尝试,最后改为了 kibana 6.8.23 版本尝试安装。

参考文章:
1.win 下启动 kibana 启动失败 解决 试着以 管理员身份启动 Kibana.bat;第一次启动 Kibana 可能耗时有点久,特别是 电脑配置不高的情况下,所以当 窗口 没内容的时候,不防等待 5分钟看看

6.Winlogbeat

使用Winlogbeat收集Windows日志,并用ES + Kibana检索的配置方法。
(1) 下载 winlogbeat,解压到任意目录。

(2) 修改 winlogbeat.yml 配置文件,主要包括下面的内容

  • 1.在event_logs章节,指定你要监控的event log类型,Winlogbeat默认监控application, security, and system这三种。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
winlogbeat.event_logs:
- name: Application
- name: Security
- name: System

output.elasticsearch:
hosts:
- localhost:9200
username: ""
password: ""

logging.to_files: true
logging.files:
## 这里的斜杠我搞不清楚,有的是斜杠,有的是反斜杠,两种都有文章写,我测试了正斜杠和反斜杠,好像两者都可以
path: C:/ProgramData/winlogbeat/Logs
logging.level: info
  • 2.如果需要把日志发送到Elasticsearch,output.elasticsearch 这里把IP端口写进去
  • 3.如果要把日志写到Logstash,需要其他的配置。要将日志通过Logstash写到ES,需要先配置Logstash的转发规则。配置好以后确保Logstash已经启动且运行正常。接下来要配置Winlogbeat将日志发送到Logstash的5044端口

(3) 测试
以管理员身份运行PowerShell,进入到winlogbeat目录,执行下面的命令

1
.\winlogbeat.exe -c .\winlogbeat.yml -configtest -e

(4) 安装为系统服务
使用PowerShell脚本,就可以将winlogbeat安装为系统服务,在系统的服务里面,可以进行服务启动停止

1
2
## 运行安装命令
.\install-service-winlogbeat.ps1

(5) 查看数据
如何查看数据,这个也是让我废了一番脑筋,毕竟是一个小白,什么都不懂。

(1) 我打开了kibana的控制台 localhost:5601

(2) 在菜单栏的管理设置里面,创建了一个索引模式,我用的是winlogbeat*,其他的都是随便选的

(3) 然后再打开Discover,就可以看到数据了。而且我把 winlogbeat.event_logs 这里面的 ignore_older 参数全部的删除了,这样所有已有的数据应该就是都能接收到了。

参考文章:
1.基于ELK实现Windows服务器系统日志监控 这里只是说了如何配置安装Winlogbeat,默认是已经安装了 Elasticsearch、Logstash等组件,可以将日志输出到Elasticsearch,输出到Lgstash等组件。这里还有加载索引模板、加载Kibana仪表盘样例,这里应该是高版本提供的功能,低版本没有 scripts 文件夹,6.8.23 只有一个kibana文件夹,不知道用来干什么的。
2.轻量型 Windows 事件日志采集器
3.winlogbeat采集windows系统日志 这个单独的写winlogbeat,很多地方比较详细的,包括下载安装,修改配置文件,启动停止和服务等
4.winlogbeat收集windows系统日志 这个其实挺简单的
5.winlogbeat-收集windows事件日志并启用默认模板、dashboard相关配置 收集并写入kafka相关配置:
6.Winlogbeat之配置 4 1. 在事件日志部分,指定要监视的事件日志,默认情况下,Winlogbeat设置为监视应用程序、安全性和系统日志;2.配置输出。Winlogbeat支持多种输出,但通常您可以将事件直接发送到Elasticsearch,或发送到Logstash以进行其他处理;3. 如果计划使用Winlogbeat提供的示例Kibana仪表板,请配置Kibana端点。如果Kibana与Elasticsearch在同一主机上运行,则可以跳过此步骤;4. 如果Elasticsearch和Kibana是安全的,请在winlogbeat.yml在运行设置和启动Winlogbeat的命令之前配置文件。5. 保存配置文件后,使用 .\winlogbeat.exe test config -c .\winlogbeat.yml -e 进行测试。
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。