本文首發於“合天智匯”公衆號
實驗推薦-本文涉及實操知識點練習
狙劍軟件使用實驗
通過本實驗的學習,你能夠了解主機安全軟件監控原理,學會如何利用主機安全軟件狙劍監控可疑進程,學會如何利用狙劍軟件對本機進行註冊表和文件的管理。
0x0、概述!
ELK Stack即以前的Elastic Stack,Elk Stack是Elastic公司專門爲集中化日誌管理設計的免費開源軟件組合。它允許搜索、分析和可視化來自不同來源的日誌。
如在ubuntu上安裝配置ELK Stack,需要如下先決條件:
0x1 內容目錄
0x2 ELK Stack 組成
1、Elasticsearch:Elasticsearch是一個基於Apache Lucene(TM)的開源搜索引擎,使用RESTful API,可以存儲、檢索數據。
2、Logstash:Logstash是一個開源的數據收集引擎,可以採集不同數據源的數據發送給Elasticsearch
3、Kibana:用於分析和可視化日誌的 Web可視化平臺
4、Filebeat:輕量級的日誌收集和轉發器,可以把數據收集後轉發到Logstash或Elasticsearch
0x3 安裝 Java 和所有依賴項
Elasticsearch是Java編寫的程序,所以需要安裝JDK,可以使用如下命令安裝OpenJDK和其他一些所需的軟件包。
sudo apt install -y openjdk-14-jdk wget apt-transport-https curl
然後導入Elasticsearch的公鑰,添加apt軟件源
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
添加軟件源
0x4 安裝和配置Elasticsearch
更新軟件源
sudo apt update
然後安裝(國內安裝比較慢,請耐心等待)
sudo apt-get install elasticsearch
安裝完後,開始配置Elasticsearch
Elasticsearh默認監聽9200端口。爲了安全,需要設置一下限制外網訪問。使外部網絡無法通過REST API訪問數據和elastic集羣。Elasticsearch的配置文件是elasticsearch.yml。修改它就行。
打開配置文件
sudo gedit /etc/elasticsearch/elasticsearch.yml
找到監聽接口和端口進行修改
刪掉前面的註釋符號#改成如下的樣子:
保存,然後啓動Elasticsearch服務
sudo systemctl start elasticsearch
查看服務狀態和驗證是否已經啓動
sudo systemctl status elasticsearch
curl -X GET localhost:9200
看到這個,就說明Elasticsearch啓動成功了。
你也可以在瀏覽器裏面訪問https://localhost:9200查看
0x5 安裝和配置Logstash
首先確保系統裏面有openssl,然後安裝Logstash
openssl version -a
sudo apt install logstash -y
創建一個SSL證書用於保證Rsyslog 和Filebeat傳輸數據給Logstash時的安全性。
在Logstash的配置文件目錄下創建一個ssl的目錄,然後生成證書
sudo mkdir -p /etc/logstash/ssl cd /etc/logstash sudo openssl req -subj '/CN=elkmaster/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt
爲了方便後續配置,我們可以修改一下/etc/hosts文件。把主機的ip配置一個主機名
然後我們需要配置三個文件,分別是用於從filebeat接收數據的filebeat-input.conf,用於過濾系統日誌的過濾器配置文件syslog-filter.conf,以及用於輸出數據到elasticsearch的output-elasticsearch.conf。
在logstash配置目錄創建filebeat-input.conf文件
cd /etc/logstash/
sudo gedit conf.d/filebeat-input.conf
添加如下內容:
input { beats { port => 5443 type => syslog ssl => true ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt" ssl_key => "/etc/logstash/ssl/logstash-forwarder.key" } }
然後創建過濾器配置文件syslog-filter.conf並採用grok過濾器,這個的作用就是讓Logstash根據給出的規則提取數據。
sudo gedit conf.d/syslog-filter.conf
輸入如下內容:
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
然後創建一個output-elasticsearch.conf配置文件用於將數據傳輸給elasticsearch。
sudo gedit conf.d/output-elasticsearch.conf
內容如下:
output { elasticsearch { hosts => ["localhost:9200"] hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
配置文件弄好之後,啓動logstash服務看是否正常。
sudo systemctl start logstash
sudo systemctl status logstash
沒有報錯,說明服務正常啓動了。
0x6 安裝和配置Kibana
安裝Kibana也是通過apt即可完成
sudo apt install kibana
安裝完成之後,我們設置一下kibana的配置文件
sudo gedit /etc/kibana/kibana.yml
主要是修改監聽端口和地址,以及elasticsearch的地址
保存,然後啓動kibana服務
然後你可以直接在瀏覽器中訪問它
0x7 安裝和配置Nginx
安裝這個主要是給Kibana做反向代理的。
首先安裝Nginx和Apache2-utlis
sudo apt install nginx apache2-utils -y
安裝完成之後,創建kibana虛擬主機配置文件
sudo gedit /etc/nginx/sites-available/kibana
內容如下:
server { listen 80; server_name localhost; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.kibana-user; location / { proxy_pass https://localhost:5601; 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; } }
給配置文件創建一個連接
sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
然後給訪問Kibana Dashboard配置一個基礎身份認證
sudo htpasswd -c /etc/nginx/.kibana-user elastic
然後測試Nginx配置文件並啓動服務
sudo nginx -t
sudo systemctl restart nginx
0x8 安裝和配置Filebeat
下載filebeat然後安裝
下載地址:https://www.elastic.co/cn/downloads/beats/filebeat
可以按照自己的需求進行下載
我們這裏是安裝在Ubuntu上,所以選擇DEB版本下載。當然也可以直接用apt安裝,前提是你在之前添加了Elastic的軟件源。可以看官方指南進行添加軟件源:https://www.elastic.co/guide/en/beats/filebeat/7.10/setup-repositories.html#_apt
sudo apt install filebeat -y
然後編輯filebeat的配置,配置文件的路徑:
/etc/filebeat/filebeat.yml
首先把input部分改爲true
然後修改Elasticsearch output部分
修改成如下配置:(根據你的實際情況進行設置)
修改Kibana配置部分:
修改完後保存。
然後初始化filebeat
sudo filebeat setup
複製之前生成的logstash-forwarder.crt證書到/etc/filebeat目錄中
sudo cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/
然後啓動filebeat服務
sudo systemctl start filebeat
0x9 配置 Linux 日誌到 Elasticsearch
配置rsyslog到Logstash,然後這些日誌會自動傳輸到Elasticsearch
在配置日誌到Logstash之前,我們首先需要配置Logstash到Elasticsearch之間的日誌轉發。
在/etc/logstash/conf.d目錄下創建一個配置文件來設置到Elasticsearch之間的日誌轉發。
cd /etc/logstash/conf.d/
sudo gedit logstash.conf
配置文件的內容如下:
input { udp { host => "127.0.0.1" port => 10514 codec => "json" type => "rsyslog" } } # The Filter pipeline stays empty here, no formatting is done. filter { } # Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here. output { if [type] == "rsyslog" { elasticsearch { hosts => [ "localhost:9200" ] } } }
配置文件主要由三部分組成,input部分:定義日誌從哪兒來,filter部分:日誌過濾器,output部分:日誌傳輸到什麼地址。
然後我們重啓一下logstash服務
sudo systemctl restart logstash
然後配置從rsyslog到Logstash日誌轉發,rsyslog可以使用模板轉換日誌然後進行轉發。
爲了讓 rsyslog 轉發日誌,需要在/etc/rsylog.d目錄中創建一個70-output.conf的配置文件。
cd /etc/rsyslog.d/ sudo gedit 70-output.conf
添加如下內容:
*.* @127.0.0.1:10514;json-template
意思是所有日誌發送到127.0.0.1:10514並使用json格式的模板進行轉換
我們需要創建一個json格式的模板文件
sudo gedit 01-json-template.conf
內容如下:
template(name="json-template" type="list") { constant(value="{") constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339") constant(value="\",\"@version\":\"1") constant(value="\",\"message\":\"") property(name="msg" format="json") constant(value="\",\"sysloghost\":\"") property(name="hostname") constant(value="\",\"severity\":\"") property(name="syslogseverity-text") constant(value="\",\"facility\":\"") property(name="syslogfacility-text") constant(value="\",\"programname\":\"") property(name="programname") constant(value="\",\"procid\":\"") property(name="procid") constant(value="\"}\n") }
然後啓動rsyslog服務
sudo systemctl start rsyslog
檢查logstash監聽端口是否正常:
ss -na | grep 10514
如果監聽沒成功,並且在日誌中看到以下報錯信息:
是因爲配置文件裏面存在語法錯誤,ELK軟件對配置文件的語法要求比較嚴格,請仔細檢查。
0x10 在Kibana中創建日誌儀表板
在瀏覽器中打開Kibana界面
首先需要創建一個索引模式
然後找到Stack Management---Kibana中的Index Patterns
然後點擊Create index pattern
輸入logstash-*,然後點擊Next step
然後時間過濾器我們選擇@timestamp
然後點擊Create index pattern
添加成功後是這樣的:
點擊回到Kibana的Discover中,在這裏可以查詢搜索你的數據
0x11 監控 SSH 事件
在過濾條件中,我們設置過濾條件爲programename:sshd*
這樣就可以看到sshd程序相關事件了。
0x12 更多參考資料
配置 SSL、TLS 以及 HTTPS 來確保 Elasticsearch、Kibana、Beats 和 Logstash 的安全 | Elastic Blog
https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash
如何使用 Elastic Stack 監測 Nginx Web 服務器 | Elastic Bloghttps://www.elastic.co/cn/blog/how-to-monitor-nginx-web-servers-with-the-elastic-stack
- Ubuntu 20.04
- 最好使用Root 權限進行配置
- ELK Stack 組成部分
- 安裝 Java 和所有依賴項
- 安裝和配置 Elasticsearch
- 安裝和配置 Logstash
- 安裝和配置 Kibana
- 安裝和配置 Nginx
- 安裝和配置 Filebeat
- 配置 Linux 日誌到 Elasticsearch
- 在Kibana中創建日誌儀表板
- 監控 SSH 事件