###### tags: `Rocky Linux`
(Rocky) Linux日誌收集建置步驟說明_原版
===
<h2> 目錄 </h2>
- [1. 安裝指引](#1-安裝指引)
- [1.1. 系統設定](#11-系統設定)
- [1.1.1. 系統時間校時 (選擇性)](#111-系統時間校時-選擇性)
- [1.1.2. 設定 hosts 檔案 (選擇性)](#112-設定-hosts-檔案-選擇性)
- [1.2. linux 關鍵指令設定](#12-linux-關鍵指令設定)
- [1.3. 手動 agent 安裝步驟](#13-手動-agent-安裝步驟)
- [1.3.1. agent 下載與安裝](#131-agent-下載與安裝)
- [1.3.2. agent 日誌拋送設定步驟](#132-agent-日誌拋送設定步驟)
- [1.3.3. agent 日誌監控設定](#133-agent-日誌監控設定)
- [1.3.4. agent logging 設定](#134-agent-logging-設定)
- [1.3.5. agent 進階效能調整 (選擇性)](#135-agent-進階效能調整-選擇性)
- [1.3.6. 重啟服務並確認服務狀況](#136-重啟服務並確認服務狀況)
- [1.4. 使用 agent 安裝精靈](#14-使用-agent-安裝精靈)
- [2. 移除安裝步驟](#2-移除安裝步驟)
- [3. Q\&A](#3-qa)
- [Q1. 如何確認 agent 有正常監控 log 目錄?](#Q1-如何確認-agent-有正常監控-log-目錄)
- [Q2. 如何確認 agent 的網路通訊正常連線到日誌伺服器?](#Q2-如何確認-agent-的網路通訊正常連線到日誌伺服器)
- [Q3. 在 web 管理平台上沒看到主機事件進來](#Q3-在-web-管理平台上沒看到主機事件進來)
- [Q4. 在 client 上如何執行 2 個 filebeat instance](#Q4-在-client-上如何執行-2-個-filebeat-instance)
---
## 1. 安裝指引
> **注意**: 安裝 agent 時需使用 "管理者權限的帳號" 進行安裝維護操作。
### 1.1. 系統設定
#### 1.1.1. 系統時間校時 (選擇性)
1. 使用指令時間校時範例 (需確認主機未使用ntp服務)
```bash=
## **時間參數請依目前當下時間自行更換**
date +"%Y%m%d %T%p" -s "20221128 6:10:30AM"
## date +"%Y%m%d %T%p" -s "20221128 12:10:30PM"
```
2. 使用NTP伺服器同步時間,參考[中華電信NTP伺服器](https://www.stdtime.gov.tw/chinese/bulletin/NTP%20promo.txt)。本次NTP伺服器範例為中華電信 NTP 伺服器進行說明。
- **Rocky linux 8.5 版本**,按照下面指令步驟參考進行設定:
1. 編輯ntp client 設定檔
```bash=
#1. 編輯ntp client 設定檔
nano /etc/chrony.conf
#2. 修改以下設定,設定主要的NTP伺服器
## CHT NTP Server
server tock.stdtime.gov.tw
server watch.stdtime.gov.tw
server time.stdtime.gov.tw
server clock.stdtime.gov.tw
server tick.stdtime.gov.tw
```
![ntp設定](https://i.imgur.com/F8h2v8D.png)
2. 設定完後重啟ntp client服務
```bash=
# 重啟服務
sudo systemctl restart chronyd
```
3. 設定系統時區
```bash=
## timedatectl 設定時區
timedatectl set-timezone Asia/Taipei
```
3. 確認時間校時狀況為正確時間
```bash=
# date 確認時間
date
```
![確認時間](https://i.imgur.com/aMllj1Z.png)
#### 1.1.2. 設定 hosts 檔案 (選擇性)
- 如本機 agent 日誌拋送需要啟用加密通訊,`/etc/hosts` 新增 internal.cybereyes.ai
```bash=
## 預設域名 internal.cybereyes.ai
`請輸入預拋送伺服器IP` internal.cybereyes.ai
```
### 1.2. linux 關鍵指令設定
1. 執行以下指令,設定cmd logger到系統環境變數。
```shell=
echo "export HISTCONTROL=ignoredups PROMPT_COMMAND='RETRN_VAL=\$?; logger -p local3.info \"date=\$(date +\"%Y-%m-%d %H:%M:%S\"),000,from=\${SSH_CLIENT%% *},login=\${SUDO_USER},user=\${USER},pwd=\$(pwd),exec=\$(history 1|cut -c 8-),code=[\$RETRN_VAL]\";'" > /etc/profile.d/ce_command.sh
```
2. 根據作業系統版本,修改 `sudoers` 配置
- **Rocky linux 8.5 版本** 按照下面步驟說明進行設定:
於 `/etc/sudoers` 檔案中,搜尋 `env_reset` 關鍵字後,在 `Defaults env_keep` 下行中新增以下內容。
```shell=
## * * * 在Defaults env_keep最後一行加入以下內容 * * *
Defaults env_keep += "HISTCONTROL PROMPT_COMMAND SSH_CLIENT"
```
![sudoers](https://i.imgur.com/uImYQMP.png)
3. 依照目前系統執行的 syslog 服務進行重啟
```bash=
## 請使用以下指令重啟服務
systemctl restart rsyslog && systemctl restart syslog
```
![restart rsyslog](https://i.imgur.com/NaLTCrz.png)
4. 重新登入`SSH`,確認是否存在command.log紀錄
```bash=
tail -f /var/log/messages |grep exec
```
![messages grep exec](https://i.imgur.com/ZDWouak.png)
### 1.3. 手動 agent 安裝步驟
#### 1.3.1. agent 下載與安裝
> 安裝 agent
- **Rocky版本** 按照下面步驟下載檔案:
```shell=
## 1. 下載 agent 安裝包
curl -s -k -L -O https://releases.cybereyes.ai/cyberagent/linux/RHEL/latest/cybundle.tar.gz
## 2. 解壓縮檔案
tar zxvf cybundle.tar.gz
## 3. 安裝套件 filebeat
cd cybundle; rpm -ivh --nosignature *.rpm
## 4. 將憑證放置到 agent 目錄
cp -r certs /etc/filebeat/
cp -r certs /etc/auditbeat/
## 5. 執行 audit_config_wizard ,匯入 audit.rules 設定 (rev.2022.12.27)
chmod +x audit_config_wizard && sh audit_config_wizard
```
![audit_config_wizard](https://i.imgur.com/x35l9FZ.png)
#### 1.3.2. agent 日誌拋送設定步驟
> filebeat 主要收集 system log
> auditbeat 主要收集 linux Audit Framework 稽核事件
<!-- > filebeat.yml 設定檔位置:`/etc/filebeat/filebeat.yml` [(參考範本)](https://drive.google.com/file/d/1kgdhHwIEWKGpmQEGCsrkrp0_suHTeZwo/view?usp=sharing) -->
1. 備份設定檔
```bash=
## filebeat
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.backup.`date --iso`
## auditbeat
cp /etc/auditbeat/auditbeat.yml /etc/auditbeat/auditbeat.yml.backup.`date --iso`
```
2. 註解或移除掉 <font color="red">output.elasticsearch</font>。
```bash=
## filebeat
sed -i 's$^output.elasticsearch:$#output.elasticsearch:$g' /etc/filebeat/filebeat.yml
## auditbeat
sed -i 's$^output.elasticsearch:$#output.elasticsearch:$g' /etc/auditbeat/auditbeat.yml
```
```yaml=
#-------------------------- Elasticsearch output ------------------------------
# output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
# Optional protocol and basic auth credentials.
#protocol: "https"
#username: "elastic"
#password: "changeme"
```
3. <font color="red">output.logstash.hosts</font> 參數改為<font color="red"> 拋送的日誌伺服器IP位址</font>,預設通訊埠設為`5145`,若使用 tls 加密通訊埠改為`5146`。
```yaml=
## ** 一般設定範例 **
## filebeat 設定檔位置: /etc/filebeat/filebeat.yml
## auditbeat 設定檔位置: /etc/auditbeat/auditbeat.yml
#----------------------------- Logstash output --------------------------------
output.logstash:
hosts: ["internal.cybereyes.ai:5145"]
bulk_max_size: 1024
```
4. 若需啟動`加密通訊協定`,<font color="red">output.logstash</font> 需更新成以下內容:
```yaml=
## ** 加密通訊設定範例 **
## filebeat 設定檔位置: /etc/filebeat/filebeat.yml
## auditbeat 設定檔位置: /etc/auditbeat/auditbeat.yml
#----------------------------- Logstash output --------------------------------
output.logstash:
hosts: ["internal.cybereyes.ai:5146"]
bulk_max_size: 1024
ssl.certificate_authorities: ["/etc/filebeat/certs/root-ca/cert.pem"]
ssl.certificate: "/etc/filebeat/certs/client/cert.pem"
ssl.key: "/etc/filebeat/certs/client/key-pkcs8.pem"
ssl.verification_mode: none
```
![logstash secure ouput](https://i.imgur.com/ZfCcBGT.png)
5. 測試 agent output 狀況
```bash=
filebeat test output
auditbeat test output
```
![test output](https://i.imgur.com/87QOXUK.png)
![test output](https://i.imgur.com/l5VV2Bv.png)
#### 1.3.3. agent 日誌監控設定
> **基本要求監控 system 以及 audit 服務日誌,參考 1.3.3-1 進行設定**
> 若需收集 web 等其他應用服務日誌,參考 1.3.3-2 範例進行操作與配置
##### 1.3.3.1. 啟用 system module
1. 執行以下指令操作, filebeat 啟用 system module。
```bash=
## 初始 system, audit 設定
sed -i -e 's/enabled: false/enabled: true/g' /etc/filebeat/modules.d/system.yml*
sed -i -e 's/enabled: false/enabled: true/g' /etc/filebeat/modules.d/auditd.yml*
## 啟用必要 module
cd /etc/filebeat/ && filebeat modules enable system
## 檢視 module 啟用狀況
filebeat modules list
```
##### 1.3.3.2. web 日誌收集
- 於 `filebeat.yml` 的`filebeat.inputs` 加入要監控的應用服務日誌,將 `enabled` 設定為 <font color="red">**true**</font>,範例如下:
```yaml=
## apache 範例
- type: log
enabled: false
tags: ["apache"]
paths:
- "/var/log/apache/*.log"
ignore_older: 24h
close_removed: true
close_inactive: 6h
close_timeout: 6h
clean_removed: true
clean_inactive: 36h
filebeat.inputs:
## nginx 範例
- type: log
enabled: true
tags: ["nginx"]
paths:
- "/var/log/nginx/*.log"
ignore_older: 24h
close_removed: true
close_inactive: 6h
close_timeout: 6h
clean_removed: true
clean_inactive: 36h
```
#### 1.3.4. agent logging 設定
1. 於設定檔最後一行設定 logging 設定
- `filebeat.yml`
```yaml=
logging.level: warning
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0640
```
- `auditbeat.yml`
```yaml=
logging.level: warning
logging.to_files: true
logging.files:
path: /var/log/auditbeat
name: auditbeat
keepfiles: 7
permissions: 0640
```
![logging](https://i.imgur.com/26waeCw.png)
#### 1.3.5. agent 進階效能調整 (選擇性)
> 此章節是選擇性設定,當效能或資源有貧頸時,可根據主機適度調整 agent 資源使用率,有以下幾種方式
##### - 方法1) 透過 beat 本身調整 memory 與 cpu 使用率
- 在 `/etc/auditbeat/auditbeat.yml` 與 `/etc/filebeat/filebeat.yml` 加入以下參數:
```bash=
## 調整儲存於記憶體的佇列大小
max_message_bytes: 500000
queue.mem:
events: 1024
flush.min_events: 512
flush.timeout: 3s
## 限制 process 使用 core 數
# max_procs: 2
```
##### - 方法2) 透過 linux kernel 限制 beat 服務 memory 與 cpu 使用率
- **Rocky linux 8.5** 參考下面步驟說明進行設定:
> Rocky linux 8.5(linux 4.18) 使用 systemd service 啟動 beats,可在 systemd service 直接加入 cgroups 設定參數。
> 該 service 的 cgroups 的相關設定將會在 service 啟動後自動建立。
1. `/usr/lib/systemd/system/auditbeat.service` 範例如下:
```bash=
[Unit]
Description=Audit the activities of users and processes on your system.
Documentation=https://www.elastic.co/beats/auditbeat
Wants=network-online.target
After=network-online.target
[Service]
UMask=0027
Environment="GODEBUG='madvdontneed=1'"
Environment="BEAT_LOG_OPTS="
Environment="BEAT_CONFIG_OPTS=-c /etc/auditbeat/auditbeat.yml"
Environment="BEAT_PATH_OPTS=--path.home /usr/share/auditbeat --path.config /etc/auditbeat --path.data /var/lib/auditbeat --path.logs /var/log/auditbeat"
## 設定成19 (最低優先權)
ExecStart=nice -n 19 /usr/share/auditbeat/bin/auditbeat --environment systemd $BEAT_LOG_OPTS $BEAT_CONFIG_OPTS $BEAT_PATH_OPTS
Restart=always
## 限制 memory 使用量不能超過 2G
MemoryMax=2G
## cpu 使用將不會超過 30% (注意系統上限並非 100%)
CPUQuota=30%
[Install]
WantedBy=multi-user.target
```
![auditbeat.service](https://i.imgur.com/CmXTQIB.png)
2. 重啟 auditbeat service
```bash=
sudo systemctl daemon-reload && systemctl restart auditbeat && systemctl status auditbeat
```
3. 檢查 service 有被加入限制
```bash=
systemctl status auditbeat
```
![](https://i.imgur.com/lUY14kx.png)
##### - 方法3) 將 process 限制在指定的 cpu
1. `/usr/lib/systemd/system/auditbeat.service` 範例如下:
```bash=
[Service]
## 指定在 CPU core 0
CPUAffinity=0
```
![CPUAffinity](https://i.imgur.com/sP5b7Dm.png)
2. 重啟 auditbeat service
```bash=
sudo systemctl daemon-reload && systemctl restart auditbeat && systemctl status auditbeat
```
3. 檢查 service 有正確指定 cpu core
```bash=
## 1. 取得 process id
ps -e -o pid,cpuid,command | grep auditbeat
## 2. 檢查 CPUAffinity 是否設定成功
taskset -c -p <pid>
```
![](https://i.imgur.com/6rqAhrC.png)
##### - 方法4) audit.rules 過濾特定稽核事件
> 減少 audit.rules 稽核項目,以降低 beat 系統資源使用率
1. 觀察系統主要佔用程序,本次範例關注的執行程序為`JAVA`
![](https://i.imgur.com/9fO06Bx.png)
2. 追查`JAVA`執行程序檔案路徑為`/usr/bin/java`
![](https://i.imgur.com/MzkHRMU.png)
3. 將關注的執行檔案加入到 `/etc/auditbeat/audit.rules.d/dont_audit.conf`
```bash=
## * - - 範例描述 - -
## 備註:過濾檔案描述
## 參數: -a never,exit -F path=<執行檔案位置> -k(選擇性)<標籤名>
## * - - - - - - - -
# filebeat
-a never,exit -F path=/usr/bin/filebeat -k filebeat
# java
-a never,exit -F path=/usr/bin/java -k java
```
<!-- #### - 方法3) 停用網路sockets稽核紀錄
```bash=
## 註解 module: system 的 socket 內容
sed -i 's$^ - socket$ #- socket$g' /etc/auditbeat/auditbeat.yml
``` -->
#### 1.3.6. 重啟服務並確認服務狀況
> 確認 filebeat 與 Cybereyes 連線狀況
1. 設定服務為開機自動啟動
- **Rocky linux 8.5 版本**,按照下面步驟說明進行設定:
```shell=
sudo systemctl daemon-reload
sudo systemctl enable filebeat auditbeat
```
2. 檢查服務狀態是否顯示為已啟動。
```shell=
sudo systemctl start filebeat auditbeat
sudo systemctl status filebeat auditbeat
```
![beat_status](https://i.imgur.com/8lyrHmT.png)
或以下指令重啟 beat 服務
```shell=
sudo /etc/init.d/filebeat start
sudo /etc/init.d/filebeat status
```
![beat_restart](https://i.imgur.com/ViiUiRY.png)
### 1.4. 使用 agent 安裝精靈
1. 執行 setup_wizard,安裝完成後參考 [1.2.2. linux 關鍵指令設定](#12-linux-關鍵指令設定)章節,完成sudoers設定以及日誌拋送設定
```bash=
curl -s https://releases.cybereyes.ai/cyberagent/scripts/setup_wizard | sh
```
![setup_wizard](https://i.imgur.com/tFoT7Ww.png)
2. 執行 `beat_output_wizard.sh` 腳本,完成日誌拋送設定
```bash=
sh /tmp/beat_output_wizard.sh
```
3. 輸入日誌拋送主機資訊(**建議新增到 hosts 檔案**),可參考 [1.1.2 設定 hosts 檔案](#112-設定-hosts-檔案-選擇性)
![](https://i.imgur.com/bMmE92J.png)
4. 輸入拋送埠,預設拋送埠為 `5146`
![](https://i.imgur.com/Tn7tv2E.png)
5. 啟用`安全加密連線功能`,選擇 **Y**
6. 是否複寫設定檔案,選擇 **Y**
![](https://i.imgur.com/zG1ZGCr.png)
7. 是否自動開啟`紀錄關鍵指令功能`,選擇 **Y**
![](https://i.imgur.com/muVLh1A.png)
## 2. 移除安裝步驟
1. 停止服務
```bash=
sudo systemctl stop filebeat auditbeat
```
2. 移除 filebeat 與 auditbeat
```shell=
sudo rpm -e $(rpm -qa | grep filebeat)
sudo rpm -e $(rpm -qa | grep auditbeat)
## 若要移除設定檔案,執行以下指令
# rm -rf /etc/filebeat
# rm -rf /etc/auditbeat
# rm -rf /var/log/auditbeat
# rm -rf /var/log/filebeat
# rm -rf /usr/local/filebeat
# rm -rf /etc/systemd/system/filebeat.service
```
## 3. Q&A
### Q1. 如何確認 agent 有正常監控 log 目錄?
- ANS: 檔案 `/var/lib/filebeat/registry` 紀錄監控日誌的檔案位置以及 offset,可檢查agent 日誌監控狀況,若無資料需重新參考步驟 [1.3.3 agent 日誌監控設定](#133-agent-日誌監控設定)進行確認。
```bash=
cat /var/lib/filebeat/registry |grep '/var/log'
## 若指令無效
## 出現 cat: /var/lib/filebeat/registry: Is a directory
## 嘗試以下指令:
cat /var/lib/filebeat/registry/filebeat/log.json |grep '/var/log'
```
![](https://i.imgur.com/kburF9M.jpg)
### Q2. 如何確認 agent 的網路通訊正常連線到日誌伺服器?
- ANS: 檢查 agent 日誌狀況,若顯示 <font color="red">Connection to backoff estableished </font> 代表連線成功。
```bash=
cat /var/log/filebeat/filebeat-*.ndjson | grep "Connecting to backoff"
```
![](https://i.imgur.com/6SAo2Vi.jpg)
- ANS: 確認近期有無其他錯誤事件
```bash=
## tail -n100 /var/log/filebeat/filebeat-*.ndjson | grep "error"
journalctl -u filebeat.service -n 10 --no-page
journalctl -u auditbeat.service -n 10 --no-page
```
![](https://i.imgur.com/KsSpB2R.png)
![](https://i.imgur.com/Py3Ahv9.png)
### Q3. 在 web 管理平台上沒看到主機事件進來
- ANS: 可能的問題因素有很多,包含系統時間準確性或是網路層面,需理解更多的資訊可參考以下步驟進行除錯:
1. 確認系統時間與平台時間與時區是否一致,可參考[系統時間校時](#111-系統時間校時-選擇性)進行確認。
2. 確認AGENT運作狀況,可參考Q1、Q2進行問題排除,或提供AGENT相關檢查日誌,以協助處理。
- /var/log/filebeat 日誌檔案
- /var/lib/filebeat/registry 檔案
### Q4. 在 client 上如何執行 2 個 filebeat instance
> 透過 filebeat docker 版本,可在同一個 client 環境執行 2 個 filebeat instance,安裝步驟如下說明
1. 安裝 docker
```bash=
## 1. install docker
sudo dnf check-update
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
## '--allowerasing' will replace conflicting packages (podman)
sudo dnf install -y docker-ce docker-ce-cli containerd.io --allowerasing
## 2. create group and add user to it
# sudo usermod -aG docker username
sudo usermod -aG docker $(whoami)
newgrp docker
## 3. make an alias for the docker-compose command
sudo echo $'#!/bin/bash\ndocker compose --compatibility "$@"' > /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose
```
2. docker 版本 filebeat 的下載與安裝
```bash=
## 1. 下載 docker 版本 agent 安裝包
curl -s -k -L -O https://releases.cybereyes.ai/cyberagent/filebeat-docker.tar.gz
## 2. 解壓縮檔案
tar zxvf filebeat-docker.tar.gz; cd ./filebeat-docker
## 3. 給予容器存取 filebeat 設定檔案權限
chown 0 filebeat.docker.yml
```
3. 於 `docker-compose.yaml` 的 `extra_hosts` 設定加入 cybereyes hostname
![extra_hosts](https://i.imgur.com/5lTcVGq.png)
4. 於 `filebeat.docker.yml` 設定日誌拋送位置 (參考 [1.3.2.3. agent 日誌拋送設定步驟](#132-agent-日誌拋送設定步驟))
![logstash secure ouput](https://i.imgur.com/ZfCcBGT.png)
5. 啟用 filebeat 容器
```bash=
docker-compose up -d
## 測試 output
docker exec -it filebeat filebeat test output
```
![test output](https://i.imgur.com/87QOXUK.png)