linux ssh登錄安全設置

ssh服務是最常用的遠程登錄服務,雖然其比telnet安全多,但是也存在一定的安全漏洞。一些不友好的小夥伴們會使用一些不和諧程序對ssh服務進行暴力破解。對ssh服務進行適當的配置可以完全杜絕暴力破解。同時對sshd服務進行優化配置可以加快連接速度,減少耗費帶寬。 
編輯/etc/ssh/sshd_config

Port 2222

ListenAddress 0.0.0.0
#若禁止外網用戶訪問,填寫內網IP地址(IPV4和IPV6)

Protocol 2
#僅使用SSH協議版本2會更安全,SSH協議版本1有安全問題

PermitRootLogin no
#禁止root用戶登陸,降低遠程登陸的用戶權限。

AllowUsers rd
#僅允許指定用戶和組登錄

PubkeyAuthentication yes
#使用公鑰認證,推薦使用安全高效!

PasswordAuthentication no
#禁止使用用戶名和密碼登陸,使用公鑰登陸,防止針對用戶名和密碼的暴力破解。

PermitEmptyPasswords no
#不允許空密碼登錄,這個太危險啦。

UsePAM no
# 利用 PAM 管理使用者認證有很多好處,可以記錄與管理。
# 所以這裏我們建議你使用 UsePAM 且 ChallengeResponseAuthentication 設定爲 no
# 如果不用LDAP之類的登陸,建議關閉,優化性能。

ChallengeResponseAuthentication no
# 允許任何的密碼認證!所以,任何 login.conf 規定的認證方式,均可適用!
# 但目前我們比較喜歡使用 PAM 模塊幫忙管理認證,因此這個選項可以設定爲 no 喔!

UseDNS no
# 一般來說,爲了要判斷客戶端來源是正常合法的,因此會使用 DNS 去反查客戶端的主機名
# 不過如果是在內網互連,這項目設定爲 no 會讓聯機達成速度比較快。

GSSAPIAuthentication no
#不基於 GSSAPI 的用戶認證,關閉,優化性能。

SyslogFacility AUTH
#設置在記錄來自sshd的消息的時候,是否給出“facility code”。

X11Forwarding no
#如果沒有使用x11轉發最好關閉掉,優化性能。

PrintLastLog no 
#不打印最後登陸信息,減少惡意登陸者獲取的信息量,防止被惡意利用。

TCPKeepAlive yes
#保持長連接,加快連接速度,優化性能。

Banner none
#不顯示系統banner信息,如果開啓會在每次登陸時顯示系統信息,減少惡意登陸者獲取的信息量,防止被惡意利用。


LoginGraceTime 30
#限制用戶必須在指定的時限內認證成功,建議設置低,增加暴力破解難度,單位爲秒。

MaxAuthTries 3
#最多登錄嘗試次數,建議設置低一些,加大暴力破解難度。

ClientAliveInterval 300
#服務器端向客戶端每5分鐘發送一次請求消息, 然後客戶端響應, 這樣就保持長連接了.默認是0, 不發送

ClientAliveCountMax 3
#服務器發出請求後客戶端沒有響應的次數達到一定值, 就自動斷開. 默認是3


AuthorizedKeysFile	.ssh/authorized_keys
# 是否允許用戶自行使用成對的密鑰系統進行登入行爲,僅針對 version 2。
# 至於自制的公鑰數據就放置於用戶家目錄下的 .ssh/authorized_keys 內


使用TCP wrappers僅允許指定的主機連接

如果你想在你的網絡上只允許特定的主機才能連接到你的SSH服務,但又不想使用或弄亂你的iptables配置,那這個方法非常有用,你可以使用TCP wrappers。

在/etc/hosts.deny中創建一個規則,如下:
sshd: ALL

這意味着默認情況下所有主機被拒絕訪問SSH服務,這是應該的,否則所有主機都能訪問SSH服務,因爲TCP wrappers首先在hosts.deny中查找,如果這裏沒有關於阻止SSH服務的規則,任何主機都可以連接。

接下來,在/etc/hosts.allow中創建一個規則允許指定的主機使用SSH服務:
sshd: 192.168.1 193.180.177.13

現在,只有來自192.168.1.0/24和193.180.177.13的主機能夠訪問SSH服務了,其他主機在連接時還沒有到登陸提示符時就被斷開了,並收到錯誤提示,如下:
ssh_exchange_identification: Connection closed by remote host


使用iptables允許特定的主機連接

可以使用iptables來限制SSH訪問(但可以同時使用這個兩個的),允許一個特定的主機連接到你的SSH服務:

~# iptables -A INPUT -p tcp -m state --state NEW --source 193.180.177.13 --dport 22 -j ACCEPT

並確保沒有其他的主機可以訪問SSH服務:

~# iptables -A INPUT -p tcp --dport 22 -j DROP

保存你的新規則,你的任務就完成了,規則是立即生效的


SSH時間鎖定技巧

你可以使用不同的iptables參數來限制到SSH服務的連接,讓其在一個特定的時間範圍內可以連接,其他時間不能連接。你可以在下面的任何例子中使用/second、/minute、/hour或/day開關。


第一個例子,如果一個用戶輸入了錯誤的密碼,鎖定一分鐘內不允許在訪問SSH服務,這樣每個用戶在一分鐘內只能嘗試一次登陸:

~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -m state --syn --state NEW --dport 22 -j DROP


第二個例子,設置iptables只允許主機193.180.177.13連接到SSH服務,在嘗試三次失敗登陸後,iptables允許該主機每分鐘嘗試一次登陸:

~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -m limit --limit 1/minute --limit-burst 1 -j ACCEPT
~# iptables -A INPUT -p tcp -s 193.180.177.13 -m state --syn --state NEW --dport 22 -j DROP




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章