1. 程式人生 > >如何防止SSH暴力破解

如何防止SSH暴力破解

當你檢視你的 SSH 服務日誌,可能你會發現充斥著一些不懷好意的嘗試性登入。這裡有 9 條常規建議(和一些個別特殊策略)可以讓你的 SSH 會話更加安全。


其中有很多辦法來阻擋這些密碼嘗試:

0 1、修改埠


vi /etc/ssh/sshd_config

 #Port 22

預設埠為22,為了避免被掃描,去掉#,改成一個其他的埠,比如45632
儲存後重啟sshd服務.service sshd restart

0 2、
健壯的密碼


密碼的複雜性可以增加破解的難度,大小寫混合加上數字並且有足夠的密碼長度就比較安全了,密碼的長度要大於8位最好大於20位。密碼的複雜度是密碼要儘可能有數字、大小寫字母和特殊符號混合組成,唯一的問題就是要牢記密碼.

0 3、不允許root賬號直接登陸


新增普通賬號,授予root的許可權
修改sshd 設定,編輯/etc/ssh/sshd_config:

'PermitRootLogin no'

0 4、RSA公鑰認證


認證登入是內部的機子可以無密碼直接登入,非常方便省事
他的原理是採用RSA加密演算法 如果對RSA不是很瞭解可以點選下面傳送帶:
http://www.cnblogs.com/demonxian3/p/6261816.html
預設的登入方式是password,如果需要用RSA公鑰登入,需要先建立RSA Key

#ssh-keygen -t rsa -b 1024

會生成私鑰/home/username/.ssh/id_rsa
同時生成公鑰/home/username/.ssh/id_rsa.pub
輸入一個加密短語(也可省略)
修改sshd 設定,編輯/etc/ssh/sshd_config:

'PasswordAuthentication no'RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile/    .ssh/id_rsa.pub

將公鑰下載到本地計算機,然後在ssh客戶端軟體Secure CRT中設定好,就可以登入了

0 5、使用iptables指令碼


此指令碼允許每分鐘3個連線.有白名單,並有日誌紀錄

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set  --name SSHiptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_WHITELISTiptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update  --seconds 60 -- hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_brute_forceiptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update  --seconds 60 -- hitcount 4 --rttl --name SSH -j DROP

iptables的版本需要>1.2.11 (1.2不支援 —rttl引數)

0 6、使用sshd日誌過濾


有幾個軟體(指令碼)可以做到.
sshfilter http://www.csc.liv.ac.uk/~greg/sshdfilter/
Fail2Ban http://fail2ban.sourceforge.net/
DenyHosts http://denyhosts.sourceforge.net/
需要sshd支援tcp_wrappers此功能.
ldd /usr/sbin/sshd | grep libwrap

libwrap.so.0 => /usr/lib64/libwrap.so.0 (0x0000002a9566c000)

如果有libwrap.so.0這個庫說明支援此功能
另一種測試方法:在/etc/hosts.deny加入一行127.0.0.1
然後ssh localhost,如果無法連線,說明支援.

$ tar zxvf DenyHosts-2.6.tar.gz$ cd DenyHosts-2.6

as root:

# python setup.py install#cd /usr/share/denyhost# cp denyhosts.cfg-dist denyhosts.cfg

配置檔案

# cp daemon-control-dist daemon-control

啟動指令碼

# chown root daemon-control# chmod 700 daemon-control# cd /etc/init.d# ln -s /usr/share/denyhosts/daemon-control denyhosts# chkconfig --add denyhosts

新增到開機啟動服務中

0 7、使用tcp_wrappers過濾


1 下載指令碼http://www.la-samhna.de/misc/sshblock.sh
2 設定可執行許可權 chmod 755 /usr/local/bin/sshblock.sh
3 在/etc/hosts.allow中新增以下內容

#__START_SSHBLOCK__#__END_SSHBLOCK__

sshd : ALL : spawn (/usr/local/bin/sshblock.sh %a)&
設定

  
  1. DONTBLOCK 白名單

  2. BURST_MAX=5

  3. BURST_TIM=60    60秒內登入5次就封鎖

  4. PURGE_TIM=3600    3600秒後解凍


0 8、使用KNOCKD


knockd 監視一個預定義模式在iptables的日誌,例如一次擊中埠6356,一次擊中埠63356,兩次擊中埠9356,這相當於敲一個關閉的門用一種特殊的暗碼來被konckd識別,konckd將使用iptables來開啟一個預定義埠例如ssh的22埠在一個預定定義時間.(比如一分鐘),如果一個ssh session 在這個時間範圍內開啟,這個埠會一直保留.直到預定義時間過期後ssh埠被knockd關掉.


缺點:比較複雜的方案,不適合普通人
需要客戶端(knockd-client)來實現port knocking”,同時需要knockd-server來響應

實際上,很容易檢測到這種通訊模式,一旦***者可以監控你的通訊,這種解決方案無法提供安全防護針對本地***者

0 9、藉助第三方工具fail2ban防禦


這個工具原理很簡單 ,他可以檢測我們認證日誌,如果發現了有暴力破解的跡象
他就會對相應IP採取動作 比如ban掉IP
工具下載地址:http://www.fail2ban.org
tar zxf fail2ban-0.8.14.tar.gz
cd fail2ban-0.8.14;python setup.py install
記得要把/files/reha-initdt檔案 移動到 /etc/init.d/下
編輯配置檔案 /etc/fail2ban/jail.conf

[xinetd-fail]enabled = falsefilter = xinetd-failaction = iptables-allports[name=xinetd,protocol=all]logpath = /var/log/daemon*log[ssh-iptables]enabled = truefilter = sshdaction = iptables[name=SSH,port=ssh,protocol=tcp]logpath = /var/log/securemaxretry = 5findtime = 300bantime = 300

啟動後檢視是否生成規則鏈
/etc/init.d/fail2ban start
iptables -L -n

  
  1. Chain fail2ban-SSH (1 references)

  2. target    prot opt source    destination

  3. RETURN    all -- 0.0.0.0/0    0.0.0.0/0