創建ssh公私鑰
首先你需要放棄使用的密碼登錄的方式,因為那種方式實在太讓人崩潰了. 下面我們開始使用一種被稱為「公私鑰「認證的方式來進行ssh登錄. 「公私鑰「認證方式簡單的解釋是
你需要創建一對公私鑰
然後把公鑰放到伺服器上, 自己保留好私鑰
當ssh登錄時,ssh程序會發送私鑰去和伺服器上的公鑰做匹配.如果匹配成功就可以登錄了
我們現在來點實際的, 我們有兩台機器: qian.jianingy.com(這是我們的伺服器, 實際上它是我的), nby.jianingy.com(這是我的筆記本). 首先,使用ssh-keygen程序在筆記本上創建公私鑰對
生成公私鑰
jianingy@nby:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jianingy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
15:c6:44:59:bf:6f:7a:11:eb:cb:02:d4:aa:33:e0:ae jianingy@nby
ssh-keygen程序會尋問你把公私鑰文件存放在哪裡.根據傳統我們會把它放在~/.ssh裡面.如果你不想
追隨這個傳統, 你可能給花些時間游說那些ssh程序.至於公私鑰的名字, 用默認的id_rsa吧,道理是一樣的.
接下來輸入一個口令,用來保護這個私鑰. 我強烈建議你輸入這個口令而不是讓它為空(稍後我會解釋的). 現在公私鑰生成好了,
私鑰(identification)被保存成了id_rsa, 公鑰(public key)被保存成id_rsa.pub. 注意:
一定要保護好你的私鑰,他就像你家裡存家底的保險櫃的鑰匙一樣重要.
現在把doggy.pub拷貝到伺服器上去, 並且將其內容追加到一個叫~/.ssh/authorized_keys的文件里去
jianingy@nby:~$ cat /home/jianingy/.ssh/doggy.pub | ssh 192.168.1.9 "cat - >> ~/.ssh/authorized_keys"
好現在試試看ssh登錄吧. 如果你想了解更多可以試試看用ssh -v登錄.
使用密鑰登錄
jianingy@nby:~$ ssh qian.jianingy.com
Enter passphrase for key '/home/jianingy/.ssh/id_rsa':
現在輸入你的passphrase, 然後就能成功登錄了.的確, 到現在我們還不能無密碼登錄,
請再耐心點. 有個特例是, 如果你使用了空的passphrase,
那麼現在已經可以無密碼登錄了.但是我也必須提醒你這是很不安全的做法,一旦有人復制了你的passphrase, 它就真的成了機房「任我行「了.
使用ssh-agent提供私鑰
接
下來是最關鍵的部分. 前面我們把輸入密碼變成了輸入passphrase,
這沒有帶來任何方便.但是,要知道有個傢伙能幫助我們自動輸入這個passphrase(只是看起來像是自動輸入而已).
我們只要輸入一次passphrase, 以後的工作就可以交給那傢伙了. 它就是ssh-agent(據我所知他和agent
smith沒有太多關系). 運行ssh-agent吧
jianingy@nby:~$ eval `ssh-agent`
jianingy@nby:~$ ssh-add
運行ssh-add添加密鑰
jianingy@nby:~$ ssh-add
Enter passphrase for /home/jianingy/.ssh/id_rsa:
Identity added: /home/jianingy/.ssh/id_rsa (/home/jianingy/.ssh/id_rsa)
好了,現在再次登錄伺服器, 我們已經沒有密碼的煩惱了.至於為什麼要用這么奇怪的方式運行ssh-agent, 你可以試著在命令行上輸入一個ssh-agent回車, 看看輸出什麼你就會明白了.
復用已經存在的ssh-agent
如
果你看了上面直接運行ssh-agent的輸出,你應該已經明白了ssh和ssh-agent是如何相互了解的. 沒錯,
通過環境變數ssh知道了與ssh-agent通信的unix
socket在哪裡.然而當我們打開一個新的終端時我們必須要重新設置這個環境變數.做為一個慵懶的系統管理員,這是不可忍受的.所以我用perl寫了這
個腳本, 他可以找到以前的ssh-agent.
view sourceprint?
01.#!/usr/bin/env perl
02.# author: jianingy
03.# 2007/06/24
04.
05.use strict;
06.my $exist;
07.my @dirs = grep {-r $_} glob "/tmp/ssh-*";
08.foreach (@dirs) {
09. my @socks = glob("{$_}/agent.*");
10. next unless (@socks);
11. foreach (@socks) {
12. $exist = $_;
13. # check agent
14. unless (system "SSH_AUTH_SOCK=$_ ssh-add -l >/dev/null 2>&1") {
15. print "export SSH_AUTH_SOCK=$_\n";
16. exit 0;
17. }
18. }
19.}
20.
21.if ($exist) {
22. system "SSH_AUTH_SOCK=$exist ssh-add";
23. print "export SSH_AUTH_SOCK=$exist\n";
24.} else {
25. system "ssh-agent";
26. exec $0;
27.}
現在只需要在.bashrc里加入
eval `ssh-attach`
便可以在每次啟動終端的時候就能復用ssh-agent了.到了這里我們已經實現了免密碼的ssh登錄(當然至少要輸入一次passphrase, 但是相對於無數次的密碼輸入相信你不會在乎這一次的:P).
㈡ 路由器解鎖ssh是什麼意思
通俗點說就是可以安全用網。
1.開啟一條網路路徑,以供在別的地方的網路環境下,可以輕松訪問到小米路由連接的電腦上的資源。但是也有對應的危險性,一般密匙泄露,即任何知道密碼的人都能訪問了。
2.用於遠程會話,給公司內部傳輸文件提供了方便性,還有效率。
3.亦可做小型網站的登錄伺服器等。服務程序的安全驗證方式也是有其弱點的, 就是很容易受到「中間人」(man-in-the-middle)這種方式的攻擊。
SSH 為建立在應用層和傳輸層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,後來又迅速擴展到其他操作平台。SSH在正確使用時可彌補網路中的漏洞。SSH客戶端適用於多種平台。幾乎所有UNIX平台-包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可運行SSH。
㈢ 如何使用 fail2ban 防禦 SSH 伺服器的暴力破解攻擊
為了在CentOS 或 RHEL上安裝fail2ban,首先設置EPEL倉庫,然後運行以下命令。
$ sudo yum install fail2ban
在Fedora上安裝fail2ban,簡單地運行以下命令:
$ sudo yum install fail2ban
在Ubuntu,Debian 或 Linux Mint上安裝fail2ban:
$ sudo apt-get install fail2ban
為SSH伺服器配置Fail2ban
現在你已經准備好了通過配置 fail2ban 來加強你的SSH伺服器。你需要編輯其配置文件
/etc/fail2ban/jail.conf。
在配置文件的「[DEFAULT]」區,你可以在此定義所有受監控的服務的默認參數,另外在特定服務的配置部分,你可以為每個服務(例如SSH,Apache等)設置特定的配置來覆蓋默認的參數配置。
在針對服務的監獄區(在[DEFAULT]區後面的地方),你需要定義一個[ssh-iptables]區,這里用來定義SSH相關的監獄配置。真正的禁止IP地址的操作是通過iptables完成的。
下面是一個包含「ssh-iptables」監獄配置的/etc/fail2ban/jail.conf的文件樣例。當然根據你的需要,你也可以指定其他的應用監獄。
$ sudo vi /etc/fail2ban/jail.local
[DEFAULT]
# 以空格分隔的列表,可以是 IP 地址、CIDR 前綴或者 DNS 主機名
# 用於指定哪些地址可以忽略 fail2ban 防禦
ignoreip =127.0.0.1172.31.0.0/2410.10.0.0/24192.168.0.0/24
# 客戶端主機被禁止的時長(秒)
bantime =86400
# 客戶端主機被禁止前允許失敗的次數
maxretry =5
# 查找失敗次數的時長(秒)
findtime =600
mta = sendmail
[ssh-iptables]
enabled =true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, [email protected], [email protected]]
# Debian 系的發行版
logpath =/var/log/auth.log
# Red Hat 系的發行版
logpath =/var/log/secure
# ssh 服務的最大嘗試次數
maxretry =3
根據上述配置,fail2ban會自動禁止在最近10分鍾內有超過3次訪問嘗試失敗的任意IP地址。一旦被禁,這個IP地址將會在24小時內一直被禁止訪問 SSH 服務。這個事件也會通過sendemail發送郵件通知。
一旦配置文件准備就緒,按照以下方式重啟fail2ban服務。
在 Debian, Ubuntu 或 CentOS/RHEL 6:
$ sudo service fail2ban restart
在 Fedora 或 CentOS/RHEL 7:
$ sudo systemctl restart fail2ban
為了驗證fail2ban成功運行,使用參數'ping'來運行fail2ban-client 命令。 如果fail2ban服務正常運行,你可以看到「pong(嘭)」作為響應。
$ sudo fail2ban-client ping
Server replied: pong
測試 fail2ban 保護SSH免遭暴力破解攻擊
為了測試fail2ban是否能正常工作,嘗試通過使用錯誤的密碼來用SSH連接到伺服器模擬一個暴力破解攻擊。與此同時,監控 /var/log/fail2ban.log,該文件記錄在fail2ban中發生的任何敏感事件。
$ sudo tail -f /var/log/fail2ban.log
根據上述的日誌文件,Fail2ban通過檢測IP地址的多次失敗登錄嘗試,禁止了一個IP地址192.168.1.8。
檢查fail2ban狀態並解禁被鎖住的IP地址
由於fail2ban的「ssh-iptables」監獄使用iptables來阻塞問題IP地址,你可以通過以下方式來檢測當前iptables來驗證禁止規則。
$ sudo iptables --list -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-SSH tcp --0.0.0.0/00.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-SSH (1 references)
target prot opt source destination
DROP all --192.168.1.80.0.0.0/0
RETURN all --0.0.0.0/00.0.0.0/0
如果你想要從fail2ban中解鎖某個IP地址,你可以使用iptables命令:
$ sudo iptables -D fail2ban-SSH -s 192.168.1.8-j DROP
當然你可以使用上述的iptables命令手動地檢驗和管理fail2ban的IP阻塞列表,但實際上有一個適當的方法就是使用fail2ban-client命令行工具。這個命令不僅允許你對"ssh-iptables"監獄進行管理,同時也是一個標準的命令行介面,可以管理其他類型的fail2ban監獄。
為了檢驗fail2ban狀態(會顯示出當前活動的監獄列表):
$ sudo fail2ban-client status
為了檢驗一個特定監獄的狀態(例如ssh-iptables):
$ sudo fail2ban-client status ssh-iptables
上面的命令會顯示出被禁止IP地址列表。
為了解鎖特定的IP地址:
$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8
注意,如果你停止了Fail2ban 服務,那麼所有的IP地址都會被解鎖。當你重啟
Fail2ban,它會從/etc/log/secure(或
/var/log/auth.log)中找到異常的IP地址列表,如果這些異常地址的發生時間仍然在禁止時間內,那麼Fail2ban會重新將這些IP地址禁止。
設置 Fail2ban 自動啟動
一旦你成功地測試了fail2ban之後,最後一個步驟就是在你的伺服器上讓其在開機時自動啟動。在基於Debian的發行版中,fail2ban已經默認讓自動啟動生效。在基於Red-Hat的發行版中,按照下面的方式讓自動啟動生效。
在 CentOS/RHEL 6中:
$ sudo chkconfig fail2ban on
在 Fedora 或 CentOS/RHEL 7:
$ sudo systemctl enable fail2ban
㈣ openssh網路安全分析
SSH協議出現之前,在網路設備管理上廣泛應用的一種方式是Telnet。Telnet協議的優勢在於通過它可以遠程地登錄到網路設備上,對網路設備進行配置,為網路管理員異地管理網路設備提供了極大的方便。但是,Telnet協議存在三個致命的弱點:
A、明文傳輸:數據傳輸採用明文方式,傳輸的數據沒有任何機密性可言。
B、認證機制脆弱。用戶的認證信息在網路上以明文方式傳輸,很容易被竊聽; Telnet 只支持傳統的密碼認證方式,很容易被攻擊。
C、「偽伺服器欺騙」:客戶端無法真正識別伺服器的身份,攻擊者很容易進行「偽伺服器欺騙」。SSH協議正是為了克服Telnet協議存在的問題而誕生的。
D、數據傳輸過程被篡改,無法保證傳輸過程數據完整性
ssh如果解決上述幾個安全問題?我們一個個來分析
通過 在 通信雙方建立「加密通道」,保證傳輸的數據不被竊聽。並且需要有合適的手段保證通信雙方秘鑰的安全
所謂加密通道,是指發送方在發送數據前,使用加密密鑰對數據進行加密,然後將
數據發送給對方;接收方接收到數據後,利用解密密鑰從密文中獲取明文。
加解密演算法分為兩類: 對稱密鑰演算法:數據加密和解密時使用相同的密鑰和相同的演算法。 非對稱密鑰演算法:數據加密和解密時使用不同的密鑰,一個是公開的公鑰,
一個是由用戶秘密保存的私鑰。
由於非對稱密鑰演算法比較耗時,一般多用於數字簽名以及身份認證。SSH加密通道
上的數據加解密使用對稱密鑰演算法,目前主要支持的演算法有DES、3DES、AES
等,這些演算法都可以有效地防止交互數據被竊聽,而且由於採用了初始化向量保
護,可以防止類似於密碼流復用等密碼分析工具的攻擊。
對稱密鑰演算法要求解密密鑰和加密密鑰完全一致,才能順利從密文中解密得到明
文。因此,要建立加密通道,必須先在通信雙方部署一致的加解密密鑰。部署加解
密密鑰的方式有多種:手工配置和第三方機構分配等。手工配置的方式擴展性差,
只適合一些小型的本地網路;使用第三方機構分配密鑰的方式,需要額外的第三方
伺服器,而且密鑰在網路中傳輸容易被竊聽。
SSH協議使用一種安全的方式在通信雙方部署密鑰:密鑰交換演算法。利用密鑰交換
演算法可以在通信雙方動態地產生密鑰,這個密鑰只能被通信的雙方獲得,任何第三
者都無法竊聽,這就在源頭上保證了加解密使用密鑰的安全性,很好地解決了密鑰
分發問題。
支持的數據加密演算法有:
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]
默認使用的演算法:
[email protected],
aes128-ctr,aes192-ctr,aes256-ctr,
[email protected],[email protected]
可以通過關鍵字 「 Ciphers」指定使用的演算法,多個演算法間,需要使用逗號相隔
有三種方式指定演算法
方式一:Ciphers 關鍵字後接演算法名稱,比如:Ciphers aes256-ctr,aes192-ctr表示只使用
aes256-ctr,aes192-ctr兩種演算法
方式二:Ciphers 關鍵字後接演算法名稱,並且演算法名稱前帶上「+」,表示在默認演算法基礎上,新增「+」後的演算法
方式三:Ciphers 關鍵字後接演算法名稱,並且演算法名稱前帶上「-」,表示在默認演算法基礎上,裁剪「-」後的演算法
支持的密鑰交換演算法有:
curve25519-sha256
[email protected]
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
默認使用的密鑰交換演算法有:
curve25519-sha256,[email protected],
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
diffie-hellman-group-exchange-sha256,
diffie-hellman-group14-sha1
可以通過關鍵字 「
KexAlgorithms 」指定使用的演算法,多個演算法間,需要使用 逗號相隔
有三種方式指定演算法
方式一:KexAlgorithms關鍵字後接演算法名稱,比如:KexAlgorithms
diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
表示只使用diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
兩種演算法
方式二:KexAlgorithms關鍵字後接演算法名稱,並且演算法名稱前帶上「+」,表示在默認演算法基礎上,新增「+」後的演算法
方式三:KexAlgorithms關鍵字後接演算法名稱,並且演算法名稱前帶上「-」,表示在默認演算法基礎上,裁剪「-」後的演算法
傳統的方式,採用的是密碼認證模式:用戶在ssh客戶端輸入賬號、密碼,openssh完成對登錄用戶進行密碼認證。用戶的身份信息等關鍵數據都保存在認證伺服器上
由於密碼認證方式的認證強度較弱,SSH協議引入了公鑰認證方式。目前,openssh
可以利用RSA和DSA兩種非對稱密鑰演算法實現公鑰認證。
公鑰認證的過程分為兩個部分::
(1) 公鑰驗證:客戶端首先將自己本地密鑰對的公鑰部分,按照字元串格式發送
到伺服器。伺服器使用本地保存的客戶端公鑰,與報文中攜帶的客戶端公鑰
進行比較,驗證客戶端持有公鑰的正確性。
(2) 數字簽名驗證:如果公鑰驗證成功,客戶端繼續使用自己本地密鑰對的私鑰
部分,對特定報文進行摘要運算,將所得的結果(即數字簽名)發送給服務
器,向伺服器證明自己的身份;伺服器使用預先配置的該用戶的公鑰,對客
戶端發送過來的數字簽名進行驗證。
公鑰驗證和數字簽名驗證中任何一個驗證失敗,都會導致本次公鑰認證失敗。
AuthenticationMethods
PubkeyAuthentication:是否使用公鑰認證,默認為yes
UsePAM:該關鍵字只有在移植版中支持,PAM為「可插拔認證模塊」,用於
PubkeyAcceptedKeyTypes:公鑰認證演算法
[email protected], [email protected], [email protected], [email protected], [email protected], ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, ssh-ed25519,ssh-rsa
公鑰認證配置方法:
1. 首先,在客戶端生成一個對鑰:
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
fa:49:6c:0a:90:0e:0f:57:2e:21:79:f6:65:7f:8d:42
這里我們用的是rsa演算法,我們也可以使用dsa演算法:
ssh-keygen -t dsa
從上面可以看到,提示輸入私鑰的保護密碼,我們也可以不選,直接ENTER就行了!
現在密鑰已經生成:
id_rsa(私鑰) id_rsa.pub(公鑰)
如果是dsa演算法生成的話:
id_dsa id_dsa.pub
2. 我們將公鑰傳到伺服器的.ssh目錄下.
scp id_rsa.pub user@hostname:/home/user/.ssh/authorized_keys
3. 將/etc/ssh/sshd_config
中的rsa認證功能打開.(去掉注釋)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然後重新啟動sshd就行了.
如果是dsa演算法的話同理.
疑問:公鑰認證,是否使用了PAM?還是openssh自己搞的?
可插拔認證模塊的介紹:
http://www.infoq.com/cn/articles/wjl-linux-pluggable-authentication-mole
http://www.infoq.com/cn/articles/linux-pam-one
ChrootDirectory:
Specifies
2.3.1 原理
用戶認證機制只實現了伺服器端對客戶端的認證,而客戶端無法認證伺服器端,因
此存在著「偽伺服器欺騙」的安全隱患。
圖4 偽伺服器欺騙
如圖4所示,當客戶端主機需要與伺服器建立連接時,第三方攻擊者冒充真正的服
務器,與客戶端進行數據交互,竊取客戶端主機的安全信息,並利用這些信息去登
錄真正的伺服器,獲取伺服器資源,或對伺服器進行攻擊。
為了防止類似這樣的偽伺服器欺騙,SSH協議支持客戶端對伺服器端進行認證。服
務器端在密鑰交換階段,使用自己的私鑰對一段固定格式的數據進行數字簽名,並
將該簽名發往客戶端,客戶端使用本地保存的伺服器公鑰,對簽名進行鑒別,從而
達到認證伺服器的目的。
HostKey
HostKeyAlgorithms
[email protected], [email protected], [email protected], [email protected], [email protected], ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521, ssh-ed25519,ssh-rsa
Macs
支持的消息認證碼(Mac)演算法有:
hmac-md5
hmac-md5-96
hmac-sha1hmac-sha1-96
hmac-sha2-256
hmac-sha2-512
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
默認使用的密鑰交換演算法有:
[email protected],[email protected],
[email protected],[email protected],
[email protected],
[email protected],[email protected],
hmac-sha2-256,hmac-sha2-512,hmac-sha1
可以通過關鍵字 「Macs 」指定使用的演算法,多個演算法間,需要使用 逗號相隔
有三種方式指定演算法
方式一:Macs關鍵字後接演算法名稱,比如:KexAlgorithms
hmac-sha2-256,hmac-sha2-512
表示只使用hmac-sha2-256,hmac-sha2-512
兩種演算法
方式二:Macs關鍵字後接演算法名稱,並且演算法名稱前帶上「+」,表示在默認演算法基礎上,新增「+」後的演算法
方式三:Macs關鍵字後接演算法名稱,並且演算法名稱前帶上「-」,表示在默認演算法基礎上,裁剪「-」後的演算法
openssh通過 以下4類演算法,保證傳輸過程網路安全:
A、傳輸數據加密:傳輸加密演算法,密鑰協商演算法,
B、公鑰認證演算法
C、Mac演算法
㈤ ssh暴力破解的後果
對伺服器性能是會有一些影響,但最大的影響是你的伺服器root密碼被破解,被完全控制。ssh攻擊的目的就是暴力破解你的密碼。最直接的影響就是設備癱瘓(伺服器死機)SSH暴力破解是指攻擊者通過密碼字典或隨機組合密碼的方式嘗試登陸伺服器(針對的是全網機器),這種攻擊行為一般不會有明確攻擊目標,多數是通過掃描軟體直接掃描整個廣播域或網段。 怎樣防禦暴力破解攻擊?一:系統及網路安全1、定期檢查並修復系統漏洞2、定期修改SSH密碼,或配置證書登陸3、修改SSH埠4、禁Ping5、若你長期不需要登陸SSH,請在面板中將SSH服務關閉6、安裝懸鏡、雲鎖、安全狗等安全軟體(只安裝一個)
㈥ 如何使用 DenyHosts 來阻止 SSH暴力攻擊
Denyhosts是一個Linux系統下阻止暴力破解SSH密碼的軟體,它的原理與DDoS Deflate類似,可以自動拒絕過多次數嘗試SSH登錄的IP地址,防止互聯網上某些機器常年破解密碼的行為,也可以防止黑客對SSH密碼進行窮舉。
眾所周知,暴露在互聯網上的計算機是非常危險的。並不要因為網站小,關注的人少或不惹眼就掉以輕心:互聯網中的大多數攻擊都是沒有目的性的,黑客們通過大范圍IP埠掃描探測到可能存在漏洞的主機,然後通過自動掃描工具進行窮舉破解。筆者的某台伺服器在修改SSH 22號埠之前,平均每天接受近百個來自不同IP的連接嘗試。而DenyHosts正是這樣一款工具。下文將對該工具的安裝與使用方法進行介紹。
DenyHosts阻止攻擊原理
DenyHosts會自動分析 /var/log/secure 等安全日誌文件,當發現異常的連接請求後,會自動將其IP加入到 /etc/hosts.deny 文件中,從而達到阻止此IP繼續暴力破解的可能。同時,Denyhosts還能自動在一定時間後對已經屏蔽的IP地址進行解封,非常智能。
官方網站
Denyhosts的官方網站為:http://denyhosts.sourceforge.net/ (杜絕Putty後門事件,謹記安全軟體官網)
安裝方法
1、下載DenyHosts源碼並解壓(目前最新版為2.6)
1 [root@www ~]# wget http://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz
2 [root@www ~]# tar zxvf DenyHosts-2.6.tar.gz
3 [root@www ~]# cd DenyHosts-2.6
2、安裝部署
1 [root@www DenyHosts-2.6]# yum install python -y
2 [root@www DenyHosts-2.6]# python setup.py install
3、准備好默認的配置文件
1 [root@www DenyHosts-2.6]# cd /usr/share/denyhosts/
2 [root@www denyhosts]# cp denyhosts.cfg-dist denyhosts.cfg
3 [root@www denyhosts]# cp daemon-control-dist daemon-control
4、編輯配置文件denyhosts.cfg
1 [root@www denyhosts]# vi denyhosts.cfg
該配置文件結構比較簡單,簡要說明主要參數如下:
PURGE_DENY:當一個IP被阻止以後,過多長時間被自動解禁。可選如3m(三分鍾)、5h(5小時)、2d(兩天)、8w(8周)、1y(一年);
PURGE_THRESHOLD:定義了某一IP最多被解封多少次。即某一IP由於暴力破解SSH密碼被阻止/解封達到了PURGE_THRESHOLD次,則會被永久禁止;
BLOCK_SERVICE:需要阻止的服務名;
DENY_THRESHOLD_INVALID:某一無效用戶名(不存在的用戶)嘗試多少次登錄後被阻止;
DENY_THRESHOLD_VALID:某一有效用戶名嘗試多少次登陸後被阻止(比如賬號正確但密碼錯誤),root除外;
DENY_THRESHOLD_ROOT:root用戶嘗試登錄多少次後被阻止;
HOSTNAME_LOOKUP:是否嘗試解析源IP的域名;
大家可以根據上面的解釋,瀏覽一遍此配置文件,然後根據自己的需要稍微修改即可。
5、啟動Denyhosts
1 [root@www denyhosts]# ./daemon-control start
如果需要讓DenyHosts每次重啟後自動啟動,還需要:
6、設置自動啟動
設置自動啟動可以通過兩種方法進行。
第一種是將DenyHosts作為類似apache、mysql一樣的服務,這種方法可以通過 /etc/init.d/denyhosts 命令來控制其狀態。方法如下:
1 [root@www denyhosts]# cd /etc/init.d
2 [root@www init.d]# ln -s /usr/share/denyhosts/daemon-control denyhosts
3 [root@www init.d]# chkconfig --add denyhosts
4 [root@www init.d]# chkconfig -level 2345 denyhosts on
第二種是將Denyhosts直接加入rc.local中自動啟動(類似於Windows中的「啟動文件夾」):
1 [root@www denyhosts]# echo '/usr/share/denyhosts/daemon-control start' >> /etc/rc.local
如果想查看已經被阻止的IP,打開/etc/hosts.deny 文件即可。
㈦ 【Linux】SSH 使用密碼/公鑰遠程登錄總結
本文是筆者查閱網上資料做的總結,關於SSH原理,什麼是對稱加密和非對稱加密,本文不過多介紹。這里介紹一下SHH的工作過程、配製方法,可能出現的問題及解決方法。
說明:本文中涉及的例子,SSH客戶端為:本地主機A,SSH伺服器為:伺服器B
SSH協議採用C-S(客戶端-伺服器端)架構進行雙方的身份驗證以及數據的加密。
伺服器端組件監聽指定的埠,負責安全連接的建立、對連接方的身份認證、以及為通過身份認證的用戶建立正確的環境。
客戶端負責發起最初的TCP握手、安全連接的建立、驗證伺服器的身份與之前記錄中的一致、並將自己的驗證信息提供給伺服器。
一個SSH會話的建立過程分為兩個階段。第一階段,雙方溝通並同意建立一個加密連接通道以供後續信息傳輸用。第二階段,對請求接入的用戶進行身份驗證以確定伺服器端是否要給該用戶開放訪問許可權。
當客戶端發起TCP連接時,伺服器端返回信息說明自己支持的協議版本,如果客戶端上支持的協議與之匹配,則連接繼續。伺服器會提供自己的公共主機密鑰(public host key)以讓客戶端確認自己訪問的是正確的機器。
然後,雙方採用一種Diffie-Hellman演算法共同為該會話建立密鑰。每一方的一部分私有數據,加上來自對方的一部分公共數據,通過這種演算法計算,能夠得出完全相同的密鑰用於本次會話。
整個會話的通訊內容都使用該密鑰進行加密。這個階段使用的公鑰/私鑰對與用戶驗證身份用的SSH密鑰是完全無關的。
經典Diffie-Hellman演算法的計算步驟如下:
這個共享密鑰的加密方式被稱為二進制數據包協議(binary packet protocol)。該過程能夠讓雙方平等的參與密鑰生成的過程,而不是由單方掌握。這種共享密鑰生成的過程是安全的,雙方沒有交換過任何未經加密的信息。
生成的密鑰是對稱式密鑰,一方用於加密信息的密鑰等同於另一方用於解密信息的密鑰,而任何第三方由於不持有該密鑰,是無法解密雙方傳遞的內容的。
會話加密通道建立後,SSH開始進入用戶認證階段。
下一步,伺服器驗證用戶身份以決定是否准許其訪問。驗證有不同的方式,選擇的驗證方式取決於伺服器的支持。
最簡單的驗證是密碼驗證:伺服器要求客戶端輸入密碼,客戶端輸入的密碼經過上述的通道加密傳輸給伺服器。
雖然密碼是加密過的,然而該方法仍然不被推薦,因為用戶經常為了省事而使用過於簡單的密碼,而這類密碼很容易就能夠被自動化腳本破解。
最流行的驗證方式是SSH密鑰對,這也是當前最推薦的方式。SSH密鑰對是非對稱密鑰,私鑰和公鑰分別用於不同的功能。
公鑰用於加密,而私鑰用於解密。公鑰可以隨意上傳、共享,因為公鑰的流通並不會危及到私鑰的保密性。
SSH密鑰對的驗證過程起始於上一部分加密通道建立之後,其具體執行步驟如下:
簡單來說,伺服器端用公鑰加密信息,客戶端用私鑰解密信息以證明自己持有私鑰。該過程同時使用了對稱加密和非對稱加密,兩種方式各有自己的功用。
命令如下:
用戶名:為要登錄的伺服器B中已存在的用戶賬戶名
IP地址:為伺服器B的IP地址
-p 埠號:用來指定埠號,默認為22
第一次登錄時,會提示如下提示:
大概意思是說,你正在訪問的主機不能驗證它的真實性,它的RSA key(當前訪問主機的公鑰)指紋是怎樣的,你確定要繼續連接嗎?
輸入yes繼續,會提示,已永久把當前訪問主機的RSA key添加到了已知主機文件(用戶目錄下,.ssh 文件夾中的knwon_hosts文件)中。之後再次 SSH 登錄就不再有該提示了。
接著,輸入登錄賬戶的密碼即可。
SSH 密碼登錄,需要伺服器開啟密碼驗證許可權,編輯伺服器SSH配置命令如下:
在 sshd_config 文件中,Protocol 2 下面 #PasswordAuthentication yes,將前面的#號去掉,保存退出。
公鑰登錄,即免密碼登錄。避免的每次登錄都要輸入的麻煩,也防止了中間人攻擊。是SSH遠程登錄最常用的登錄方式。
提示輸入密鑰對名稱,直接回車,使用默認名稱即可;
提示輸入密碼(使用私鑰時,要輸入密碼),直接回車,不使用密碼即可。
首先,登錄伺服器B,在進行下面的操作。
找到 #PubkeyAuthentication yes,刪除 #號,保存退出。
重啟 ssh 服務
也可指定驗證私鑰:
本地主機A,生成密鑰對後:
sudo vim /etc/selinux/config
㈧ 如何實現安全的免密碼ssh登錄
Home �0�3Blogs �0�3Jianing Yang's blog Submitted by Jianing Yang on Fri, 2007-05-18 13:33 SSH免密碼運維背景ssh實現了加密的遠程登錄. 但做為一個系統管理員,當需要操作的機器很多時頻繁的輸入密碼往往會讓你崩潰掉. 幸好你看到了這篇文章, 它將告訴你如何實現即安全又方便的免密碼ssh登錄.創建ssh公私鑰首先你需要放棄使用的密碼登錄的方式,因為那種方式實在太讓人崩潰了. 下面我們開始使用一種被稱為「公私鑰「認證的方式來進行ssh登錄. 「公私鑰「認證方式簡單的解釋是你需要創建一對公私鑰然後把公鑰放到伺服器上, 自己保留好私鑰當ssh登錄時,ssh程序會發送私鑰去和伺服器上的公鑰做匹配.如果匹配成功就可以登錄了我們現在來點實際的, 我們有兩台機器: qian.jianingy.com(這是我們的伺服器, 實際上它是我的), nby.jianingy.com(這是我的筆記本). 首先,使用ssh-keygen程序在筆記本上創建公私鑰對生成公私鑰jianingy@nby:~$ ssh-keygen