# 排程週期模組 ## 10 minutes - Suricata Rule更新 ### Suricata Rule更新 以python撰寫更新腳本 1. 獲取API KEY 透過open開啟.env設定檔抓取API_KEY_Value那行並以"="為斷點並取第二筆(API 值),如沒獲取產出訊息未找到API_key ``` API_KEY_Value = API 值 -> [API_KEY_Value][Value] ``` 2. 版本確認 透過RMQ_API與雲端RMQ索要當前最新規則版本號,開啟local_rules_version檔案讀取其中版本號,並與API索要的版本號進行比對若不相同,則將進行下載 3. 比對檔案md5值並下載 利用RMQ_API取得檔案的md5,並與下載檔案進行md5比對比對相同則回傳True,反之false 4. 同步新版Rules並重啟服務 當md5回傳值為True時,透過subprocess,call()創建資料夾存取檔案(tgz)解壓縮後的規則檔,將之同步於Suricata規則檔而後刪除下載的暫存檔並透過curl重啟suricata docker服務 5. 存取版本號 將新版本號取代local_rules_version檔案中的內容 - 錯誤及正確的信息皆輸出至/var/log/cron.log做為記錄 ## Hour - Suricata Rule更新 - Call Winlog and ETA AI module ### Call AI module ## Daily - Elasticsearch 清除index底下的data - 清除suricata告警資料 - 檢查硬碟容量 - 備份Logs資料 ### Elasticsearch 清除index底下的data 撰寫bash script透過Elasticsearch_API刪除資料庫中其下資料表 - winlog(3個月前) - suricata(3個月前) - cic(7天前) - winlogbeat(7天前) - packetbeat(7天前) - lm(184天前) 示範指令概念: ``` [index]_remove_date = "$(date +/-d '時間' +%Y-%m)" curl -X DELETE "elasticsearch:[ES API port]/[index name]-$[index]_remove_date ``` ### 清除suricata告警資料 撰寫bash script刪除天之前的eve.json日誌 ``` rm [path]/eve-'date -d"-7days" "+%Y-%m-%d'.json 2>/dev/null ``` ### 檢查硬碟容量 查詢es_volume使用比率當大於85%取得winlogbeat與cic所有欄位名稱必逐一刪除 ### 備份Logs資料 撰寫bash script找出Logs中的資料 打包成 date+Y-m-d.tgz將之移動到LogsCompress目錄下儲存並刪除Logs目錄中的資料資料 ## Week - 清除suricata狀態統計日誌 ### 清除suricata狀態統計日誌 透過crontab排程撰寫每周清除suricata stat.log ## Month - 清除suricata cron.log ## Reboot - ES pipline 前處裡 - 清除suricata狀態統計日誌 ### ES pipline 前處裡 ## 特定時間 - Suricata 確認功能正常及存活 ### Suricata 確認功能正常及存活 每日的凌晨12點36分及中午12點36分執行bash script 撰寫的腳本 利用tcpreplay重跑先行錄製好封包理應會產生告警日誌並拋送至雲端上,利用RESTful API向雲端索要是否有此筆資料,如無則產生錯誤信息至cron.log及重啟Suricata服務