FreeBSD有個很好的功能就是天天會自動給root用戶發兩封郵件,一封是平常報告,一封是安全報告。我通常都會把這個郵件轉發到本身的郵箱,這樣天天就能夠在手機上關注一下系統狀態了。安全
前幾天在手機上看每日安全報告時發現家裏的服務器有大量失敗的SSH登陸,回電腦上登上去一看:bash
grep error auth.log | tail
複製代碼
基本上每隔幾分鐘就出現一次,統計了一下IP,只有少數幾個,而且都是來自於本市。服務器
...
Mar 26 03:00:41 myserver sshd[33056]: error: PAM: authentication error for raptor from 117.25.180.xx
Mar 26 03:00:41 myserver sshd[33056]: error: maximum authentication attempts exceeded for raptor from 117.25.180.xx port 2423 ssh2 [preauth]
...
複製代碼
首先想到的就是:不會是黑客來攻擊了吧?app
可是分析下來又以爲不可能:ssh
除非個人電腦被黑,可是以我這麼當心的人,可能性不太大啊,難道是某個國產軟件在耍流氓?電腦裏裝的國產軟件屈指可數,都是正經軟件啊。spa
查了幾天沒有頭緒,換了端口,加了一些屏蔽IP的配置也沒什麼用。3d
直到上週末突然發現其中一個攻擊IP竟然就是本身家裏的外網IP,才知道原來攻擊來自本身的電腦。日誌
(假設SSH端口號爲2222)code
lsof -i :2222
複製代碼
然而並無結果。看了一下日誌,顯示是每隔五分鐘左右嘗試登陸,因此這個進程應該不是長期運行,而是定時運行,可是cron裏並無這樣的東西,因此只能循環監控了:server
while (( $? == 1 )) ; do lsof -i :2222 ; done;
複製代碼
等了五分鐘,終於抓住一個:
ssh 25390 raptor 3u IPv4 0x59231eed85a432f3 0t0 TCP 10.0.xxx.xxx:64077->217.180.xxx.xxx.broad.xm.fj.dynamic.163data.com.cn:2222 (SYN_SENT)
複製代碼
竟然是SSH?看來還得抓一下它的父進程:
(while (( $? == 1 )) ; do lsof -i :2222 ; done; ) && ps -ef $(lsof -i :2222 | tail -n 1 | cut -b 8-14)
複製代碼
竟然是HG?
501 25390 25374 0 11:05上午 ?? 0:00.04 ssh raptor@xxxxx hg -R hg/proj serve --stdio
複製代碼
得,繼續排查。固然,到這一步基本上已經可猜到是誰了,要麼是zsh,要麼是pycharm。
不過單行命令已經不太好寫了,寫成一個腳原本跑吧:
#!/bin/bash
RES=1
while [[ $RES == 1 ]]
do
lsof -i :2222
RES=$?
done
PID=`lsof -i :2222 | tail -n 1 | cut -b 8-14`
PID1=`ps -ef $PID | tail -n 1 | cut -b 12-18`
PID2=`ps -ef $PID1 | tail -n 1 | cut -b 12-18`
ps aux | grep $PID2 | grep -v grep
複製代碼
果真是pycharm:
raptor 4806 0.0 9.7 7425152 812648 ?? S 五10下午 12:55.38 /Applications/PyCharm CE.app/Contents/MacOS/pycharm
複製代碼
打開pycharm的Preferences-Version Control-Mercurial
,將Check incomming and outgoing changesets
的選中去掉。
觀察了半小時,終於沒有再出現那些「攻擊」了。
緣由是:
pycharm每隔五分鐘會調用hg serve --studio
連個人hg服務端檢查更新,我又在這個項目的hgrc裏配置了默認的ssh鏈接,可是這臺電腦又沒有配置ssh證書,須要登陸密碼,因而pycharm的這個操做就會當即失敗,在服務端就留下了一次失敗的ssh登陸記錄。