天天看點

禁止sshd暴力嘗試方案

 最近檢視了一下日志伺服器,這台日志伺服器監控來自伺服器群裡面的一些機器日常運作日志,可以通過網頁形式檢視,結果有點出乎意料:

總是有那麼一些人會不停地掃機器,不停的嘗試暴力破解ssh登陸,還好本人用的密碼估計可以讓這些無聊的人猜個幾萬年,但是老是這樣子也不行啊,想了幾個防範的方法:

 1.關閉ssh的root登陸選項,這樣可以一定程度上面防範,但是今後想用root直接登陸就不行了,安全了但是也麻煩了,随便吐槽一下,公司研發那邊人連vpn都不想用,說太麻煩了,結果還是直接給他們開放出來了,這樣的“人才”我隻能說我跪了。放棄這個想法。

 2.vpn登陸,上面就說了,人家嫌麻煩!又放棄之。

 3.收集登陸資訊,發現登陸次數過多的ip,直接扔到hosts.deny裡面,這樣就可以防止了。

沒錯,這裡說的是第三種方案了,但是要寫腳本!

 首先要知道,登陸資訊是放在那個檔案裡面的,我用的centos,一般都是放在/var/log/secure檔案裡面,直接vi就可以看到裡面的各種登陸資訊。

 那就幹活吧,寫shell去:

 #touch blockip.sh

 #vi blockip.sh

#!/bin/bash

datenode=`date -d -15min|awk ‘{print substr($0,10,5)}‘`

blockip=`cat /var/log/secure | grep "$datenode" | awk ‘$6 ~ "failed" {print $0}‘ | grep -o ‘[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}‘ | sort | uniq -c | awk ‘$1>6 {print "sshd:"$2}‘`

echo $blockip >> /etc/hosts.deny

這裡解析一下:

datenode=`date -d -15min|awk ‘{print substr($0,10,5)}‘` 的意思是設定一個監控時間點,我這裡設定了15分鐘内的

cat /var/log/secure | grep "$datenode" | awk ‘$6 ~ "failed" {print $0}‘ 查找15分鐘内在第六個字段出現有"failed"的内容,因為在secure檔案裡面,出現"failed"基本上就可以判斷是有問題的,這裡是根據我伺服器情況而定的,具體可以根據伺服器實際的内容決定

| grep -o ‘[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}‘ | sort | uniq -c 在b中找了内容後再比對如果是出現ip形式的内容,并且sort排序,uniq去除重複,-c是計算次數

| awk ‘$1>6 {print "sshd:"$2}‘` 最後篩選出來的内容第一列數字如果大于6次(也就是證明這個ip不斷嘗試了6次ssh登陸(實際如果是我們去登陸的話,寫錯6次密碼的幾率很低了),然後列印出來sshd $2,$2第二列是ip,形式就是sshd:x.x.x.x

好了,這下終于篩選出來了最終的格式了sshd:x.x.x.x,然後寫到/etc/hosts.deny裡面,這樣下次再出現這個ip嘗試登陸的話,系統會直接禁止通路了,再配合crontab,每15分鐘掃一下:

   */15 * * * * sh /opt/blockip.sh > /dev/null 2>&1

再每個晚上23時重置一下hosts.deny檔案,/opt/hosts.deny是一個沒有新增内容的一個原始檔案,為了是以防那天這些ip被好人使用了,又想通路我們的業務的話,那這樣就相當于清空了限制了。

   * 23 * * * cat /opt/hosts.deny > /etc/hosts.deny

over!

本文出自 “” 部落格,請務必保留此出處

繼續閱讀