這次多機聯防的程式筆記

還是筆記一下,免得日後忘了。

首先,會先呼叫get_journalctl_bad_ipv4.py,這支程式會把Linux journalctl相關的ssh login錯誤等ipv4提取出來,放到定的檔案,如下例:
./get_journalctl_bad_ipv4.py ./bad_ipv4_ww1.txt

然後,get_journalctl_bad_ipv4.py內部會先呼叫compare_ipv4_list.py這支程式,將bad_ipv4_ww1.txt與已經執行過的security_ipblocked_ipv4.txt比對,把沒有執行過封鎖的ipv4再寫回bad_ipv4_ww1.txt這個檔案中,這樣避免重複執行已經封鎖過ipv4,提升效率。
接著,./report_bad_ipv4.py ./bad_ipv4_ww1.txt ./bad_ipv4_new.txt ./last_report_timestamp.txt
呼叫report_bad_ipv4.py把bad_ipv4_ww1.txt回報到指定的伺服器,並告知上次的執行時間戳last_report_timestamp.txt,並把從伺服器回應的新的bad ipv4存到bad_ipv4_new.txt。
得到伺服器新的清單檔案後,./compare_ipv4_list.py ./security_ipblocked_ipv4.txt ./security_ipblock_ipv4.txt ./bad_ipv4_ww1.txt ./bad_ipv4_new.txt ./bad_ipv4_io.txt
呼叫compare_ipv4_list.py,把過去執行過的檔案都加入是否已經執行的檢查,再把沒執行過的放到bad_ipv4_io.txt
有了bad_ipv4_io.txt,即可再次使用./get_journalctl_bad_ipv4.py ./bad_ipv4_io.txt
執行封鎖ipv4的動作。最後,把所有的檔案,透過unique_ipv4.py
./unique_ipv4.py ./security_ipblocked_ipv4.txt ./security_ipblock_ipv4.txt ./bad_ipv4_ww1.txt ./bad_ipv4_new.txt ./bad_ipv4_io.txt
將所有的ipv4都整理到security_ipblocked_ipv4.txt。 以下是ban_report_bad_ipv4.sh的內容:
#!/usr/bin/bash
cd /root
./get_journalctl_bad_ipv4.py ./bad_ipv4_ww1.txt
./report_bad_ipv4.py ./bad_ipv4_ww1.txt ./bad_ipv4_new.txt ./last_report_timestamp.txt
./compare_ipv4_list.py ./security_ipblocked_ipv4.txt ./security_ipblock_ipv4.txt ./bad_ipv4_ww1.txt ./bad_ipv4_new.txt ./bad_ipv4_io.txt
./get_journalctl_bad_ipv4.py ./bad_ipv4_io.txt
./unique_ipv4.py ./security_ipblocked_ipv4.txt ./security_ipblock_ipv4.txt ./bad_ipv4_ww1.txt ./bad_ipv4_new.txt ./bad_ipv4_io.txt

程式其實還有很大進步的空間,尤其是把檔名寫死在程式碼中,像是get_journalctl_bad_ipv4.py!這支程式本來單純提取journalctl的相關錯誤訊息,把ipv4整理到指定的檔案,卻被一直增加功能,甚至把封鎖的動作都加進去,這最後能由另一支程式來擔任會比較好!

report_bad_ipv4.py的第一個檔名為回報到伺服器的檔名,第二個檔名則為從伺服器接收bad ipv4清單後,保存的檔名,第三個參數是上次執行的時間戳,檔案內存放上次執行的ISO格式時間,YYYY-mm-dd HH:ii:ss。在程式執行後,report_bad_ipv4.py也會自動更新檔案內的時間戳。

compare_ipv4_list.py的倒數第二個檔名為伺服器的清單檔案,最後一個為前面所有檔案內ipv4與伺服器清單檔案筆比較後,還沒有執行過封鎖的ipv4

unique_ipv4.py則是把所有檔案都整理到第一個指定的檔名,讓這個檔變成本機已經執行過封鎖的ipv4資料表,可使用這個檔案來快速比較是否已經執行過封鎖的動作,而無須額外呼叫作業系統的檢查指令。

其實上面的shell script可以再簡化,只是因為偷懶的結果,把程式寫成這樣!雖說如此,report_bad_ipv4.py、compare_ipv4_list.py與unique_ipv4.py,可以在很多場合下發揮應用的。

留言

這個網誌中的熱門文章

[raspberry pi]強化樹莓派2B、3B的wifi連接,斷線時自動重新連接或重新開機

架站資源整理清單