1. 程式人生 > >Centos下防止ssh暴力破解密碼的方法,有兩個,我用了第一種,效果很好。

Centos下防止ssh暴力破解密碼的方法,有兩個,我用了第一種,效果很好。

公司伺服器檢視/var/log/secure 檔案可以看到很多認證失敗的Failure的ip登入資訊。所以想到根據secure檔案檢視失敗的ip如果超過五次,那麼就把此ip寫入/etc/hosts.deny檔案,禁止此ip登入。我用了第一種方法,設定了定時任務,每分鐘執行一次。執行之後,檢視secure檔案就沒有那麼多失敗的資訊日誌輸出了。

方法一,

收集 /var/log/secure 裡面的資訊,若是某個IP 連結次數超過一定次數 ,則把此ip記錄到/etc/hosts.deny裡面。

通過crontab來執行,每分鐘執行一次。

*/1 * * * /bin/bash /root/Denyhosts/Denyhosts.sh

#!/bin/bash
#Denyhosts SHELL SCRIPT


cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"=" $1;}' >/root/Denyhosts/Denyhosts.txt
DEFINE="5"
for i in `cat /root/Denyhosts/Denyhosts.txt`
do
        IP=`echo $i|awk -F= '{print $1}'`
        NUM=`echo $i|awk -F= '{print $2}'`
        if [ $NUM -gt $DEFINE ]
        then
                ipExists=`grep $IP /etc/hosts.deny |grep -v grep |wc -l`
                if [ $ipExists -lt 1 ]
                then
                echo "sshd:$IP" >> /etc/hosts.deny
                fi
        fi
done

方法二,

DenyHosts官方網站為:http://denyhosts.sourceforge.net

1. 安裝

# tar -zxvf DenyHosts-2.6.tar.gz 
# cd DenyHosts-2.6 
# python setup.py install 
預設是安裝到/usr/share/denyhosts目錄的。

2. 配置

# cd /usr/share/denyhosts/ 
# cp denyhosts.cfg-dist denyhosts.cfg 
# vi denyhosts.cfg 
PURGE_DENY = 50m #過多久後清除已阻止IP 
HOSTS_DENY = /etc/hosts.deny #將阻止IP寫入到hosts.deny 
BLOCK_SERVICE = sshd #阻止服務名 
DENY_THRESHOLD_INVALID = 1 #允許無效使用者登入失敗的次數 
DENY_THRESHOLD_VALID = 10 #允許普通使用者登入失敗的次數 
DENY_THRESHOLD_ROOT = 5 #允許root登入失敗的次數 
WORK_DIR = /usr/local/share/denyhosts/data #將deny的host或ip紀錄到Work_dir中 
DENY_THRESHOLD_RESTRICTED = 1 #設定 deny host 寫入到該資料夾 
LOCK_FILE = /var/lock/subsys/denyhosts #將DenyHOts啟動的pid紀錄到LOCK_FILE中,已確保服務正確啟動,防止同時啟動多個服務。 
HOSTNAME_LOOKUP=NO #是否做域名反解 
ADMIN_EMAIL = #設定管理員郵件地址 
DAEMON_LOG = /var/log/denyhosts #自己的日誌檔案 
DAEMON_PURGE = 10m #該項與PURGE_DENY 設定成一樣,也是清除hosts.deniedssh 使用者的時間。

3. 設定啟動指令碼

# cp daemon-control-dist daemon-control 
# chown root daemon-control 
# chmod 700 daemon-control

完了之後執行daemon-contron start就可以了。

# ./daemon-control start

如果要使DenyHosts每次重起後自動啟動還需做如下設定:

# ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts 
# chkconfig --add denyhosts 
# chkconfig denyhosts on

然後就可以啟動了:

# service denyhosts start 
可以看看/etc/hosts.deny內是否有禁止的IP,有的話說明已經成功了。

提高ssh安全性的方法


1. 修改sshd伺服器的配置檔案/etc/ssh/sshd_config,將部分引數參照如下修改,增強安全性。

系統預設使用22號埠,將監聽埠更改為其他數值(最好是1024以上的高階口,以免和其他常規服務埠衝突),這樣可以增加入侵者探測系統是否運行了 sshd守護程序的難度。
Port 5555
對於在伺服器上安裝了多個網絡卡或配置多個IP地址的情況,設定sshd只在其中一個指定的介面地址監聽,這樣可以減少sshd的入口,降低入侵的可能性。
ListenAddress 192.168.0.1
如果允許使用者使用root使用者登入,那麼黑客們可以針對root使用者嘗試暴力破解密碼,給系統安全帶來風險。
PermitRootLogin no
允許使用空密碼系統就像不設防的堡壘,任何安全措施都是一句空話。
PermitEmptyPasswords no
只允許指定的某些使用者通過ssh訪問伺服器,將ssh使用許可權限定在最小的範圍內。
AllowUsers sshuser1 sshuser2
同上面的AllowUsers類似,限定指定的使用者組通過ssh訪問伺服器,二者對於限定訪問伺服器有相同的效果。
AllowGroups sshgroup
禁止使用版本1協議,因為其存在設計缺陷,很容易使密碼被黑掉。
Protocol 2
關閉X11Forwarding,防止會話被劫持。
X11Forwarding no
sshd服務執行時每一個連線都要使用一大塊可觀的記憶體,這也是ssh存在拒絕服務攻擊的原因。一臺伺服器除非存在許多管理員同時管理伺服器,否則上面這 個連線數設定是夠用了。
MaxStartups 5
注意:以上引數設定僅僅是一個示例,使用者具體使用時應根據各自的環境做相應的更改。

2. 修改sshd伺服器的配置檔案/etc/ssh/sshd_config的讀寫許可權,對所有非root使用者設定只讀許可權,防止非授權使用者修改sshd 服務的安全設定。


chmod 644 /etc/ssh/sshd_config

3. 設定TCP Wrappers。伺服器預設接受所有的請求連線,這是非常危險的。使用TCP Wrappers可以阻止或允許應用服務僅對某些主機開放,給系統在增加一道安全屏障。這部分設定共涉計到兩個檔案:hosts.allow和 hosts.deny。
將那些明確允許的請求新增到/etc/hosts.allow中。如系統僅允許IP地址為192.168.0.15和10.0.0.11的主機使用 sshd服務,則新增如下內容:


sshd:192.168.0.15 10.0.0.11


將需要禁止使用的資訊新增到/etc/hosts.deny中。如對除了在hosts.allow列表中明確允許使用sshd的使用者外,所有其他使用者都禁止使用sshd服務,則新增如下內容到hosts.deny檔案中:
sshd:All
注意:系統對上述兩個檔案的判斷順序是先檢查hosts.allow檔案再檢視hosts.deny檔案,因此一個使用者在hosts.allow允許使用網路資源,而同時在hosts.deny中禁止使用該網路資源,在這種情況下系統優先選擇使用hosts.allow配置,允許使用者使用該網路資源。