###### 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)