前言
俗話說久病成良醫,經過了好幾次的資安經驗後,筆者也慢慢地養成了疑神疑鬼的性格(?),為了避免這種病情惡化,只好用比較聰明的方法來讓自己安心。而這就是以下這篇文章要介紹的,如何透過排程機制來動態偵測ssh的使用者登入狀況,並同步寄發登入提醒。
說真的既然電腦是架在公開的網路環境下,那就沒有萬無一失的防禦方式,唯有與時俱進及提高警覺才能避免重傷害…所謂不經一事不長一智,久經沙場的話自然就會有更全面的經驗,而筆者也希望自己能從一而終的在學習上永無止境。
ssmtp
有關ssmtp如何在Linux系統上搭配Gmail寄信的功能已經有許多前輩做了整理,但在FreeBSD方面則沒有太多的討論。筆者參考了這篇文章來進行設定,同時筆者的FreeBSD版本為 - FreeBSD 11.0-RELEASE-p1
首先開啟你的Server,接著以pkg來安裝ssmtp。(當然你可以用su搭配安裝指令使用,筆者為了避免麻煩就先切換成root身分了。)
|
|
安裝完成後即可切換目錄到/usr/local/etc/ssmtp/下查看相關檔案,接著動手更改ssmtp的設定檔案ssmtp.conf,加入以下設定:
|
|
測試寄信
完成之後就可以測試看看ssmtp是否能夠正常執行,記得在測試之前要把對應的587port防火牆打開,不然會出現錯誤。
|
|
一切都沒有問題的話,幾秒鐘過後就有一封熱騰騰的信件出現在你的Gmail信箱中,接著就能來著手設計ssh登入後自動寄提醒信的功能。
偵測ssh登入
透過ssh登入的log記錄一般是存在/var/log/auth.log裡。經由筆者查看後發現每個ssh登入成功後,都會有一行”Accepted keyboard-interactive…”的紀錄,同時也會有登入者的username以及來源IP,因此就能開始著手設計Bash shell透過正規表示來偵測登入,像是這樣:
|
|
詳細的程式碼可以在這裡查看,不過筆者當初沒有考慮到log file會定期壓縮的問題,因此程式還有待改善,如果有更新的話會同步修改這篇文章。(注意,如果要使用筆者的程式,須建立current_login_count_file的檔案,並寫入0)
如果要搭配排程的話就可以用FreeBSD的Crontab來完成~
更多的想法
寄送登入提醒只是最基本應用例子,也可定時寄送伺服器狀況(如硬體溫度或是攻擊警告等..),更甚至是定期把log檔案打包寄至Gmail,避免真的有人入侵了也沒辦法分析log的窘境。