配置Linux伺服器SSH安全訪問的四個小技巧

餘二五發表於2017-11-15

越來越多的站長,開始使用獨立主機(Dedicated Host) VPS。而為了節省成本或提高效能,不少人的獨機和 VPS,都是基於 unmanaged 的裸機,一切都要自己 DIY。這時候,安全策略的實施,就猶為重要。下面這篇文章 (http://www.xiaohui.com/dev/server/centos-security-for-ssh.htm),我以 CentOS 為例,簡單地總結一下如何配置 SSH 安全訪問。

Linux SSH 安全策略一:關閉無關埠

  網路上被攻陷的大多數主機,是黑客用掃描工具大範圍進行掃描而被瞄準上的。所以,為了避免被掃描到,除了必要的埠,例如 WebFTPSSH 等,其他的都應關閉。值得一提的是,我強烈建議關閉 icmp 埠,並設定規則,丟棄 icmp 包。這樣別人 Ping 不到你的伺服器,威脅就自然減小大半了。丟棄 icmp 包可在 iptables 中, 加入下面這樣一條:

-A INPUT -p icmp -j DROP

Linux SSH 安全策略二:更改 SSH 

  預設的 SSH 埠是 22。強烈建議改成 10000 以上。這樣別人掃描到埠的機率也大大下降。修改方法:

編輯 /etc/ssh/ssh_config

vi /etc/ssh/ssh_config

 Host * 下 ,加入新的 Port 值。以 18439 為例(下同):

Port 22

Port 18439

 

編輯 /etc/ssh/sshd_config

vi /etc/ssh/sshd_config

#加入新的 Port 

Port 22

Port 18439

 

儲存後,重啟 SSH 服務:

service sshd restart

  這裡我設定了兩個埠,主要是為了防止修改出錯導致 SSH 再也登不上。更改你的 SSH 客戶端(例如:Putty)的連線埠,測試連線,如果新埠能連線成功,則再編輯上面兩個檔案,刪除 Port 22 的配置。如果連線失敗,而用 Port 22 連線後再重新配置。

  埠設定成功後,注意同時應該從 iptables 中, 刪除22埠,新增新配置的 18439,並重啟 iptables

  如果 SSH 登入密碼是弱密碼,應該設定一個複雜的密碼。Google Blog 上有一篇強調密碼安全的文章:Does your password pass the test?

Linux SSH 安全策略三:限制 IP 登入

  如果你能以固定 IP 方式連線你的伺服器,那麼,你可以設定只允許某個特定的 IP 登入伺服器。例如我是通過自己的 VPN 登入到伺服器。設定如下:

編輯 /etc/hosts.allow

vi /etc/hosts.allow

例如只允許 123.45.67.89 登入

sshd:123.45.67.89

Linux SSH 安全策略四使用證書登入 SSH

  相對於使用密碼登入來說,使用證書更為安全。自來水衝咖啡有寫過一篇詳細的教程,徵得其同意,轉載如下:

CentOS配置SSH證書登入驗證

來源:自來水衝咖啡

下午幫公司網管遠端檢測一下郵件伺服器,一臺CentOS 5.1,使用OpenSSH遠端管理。

檢查安全日誌時,發現這幾天幾乎每天都有一堆IP過來猜密碼。看來得修改一下登入驗證方式,改為證書驗證為好。

為防萬一,臨時啟了個VNC,免得沒配置完,一高興順手重啟了sshd就麻煩了。(後來發現是多餘的,只要事先開個putty別關閉就行了)

以下是簡單的操作步驟:

1)先新增一個維護賬號:

# useradd msa

 

2)然後更改為msa使用者

# su – msa

 

3生成key

$ ssh-keygen -t rsa

指定金鑰路徑和輸入口令之後,即在/home/msa/.ssh/中生成公鑰和私鑰:id_rsa id_rsa.pub

 

4

cat id_rsa.pub >> authorized_keys

$ exit

至於為什麼要生成這個檔案,因為sshd_config裡面寫的就是這個。

然後chmod 400 authorized_keys,稍微保護一下。

重要:

.ssh目錄的‘所有人’和‘所有組’應該為msa使用者,而不是root使用者。.ssh目錄的許可權應該為700authorized_keys檔案的許可權應該為400,否則可能因為許可權不對而不能登入SSH。

 

5)用psftp把把id_rsa拉回本地,然後把伺服器上的id_rsaid_rsa.pub幹掉

 

6)配置/etc/ssh/sshd_config

Protocol 2

ServerKeyBits 1024

PermitRootLogin no  #禁止root登入而已,與本文無關,加上安全些

 

#以下三行沒什麼要改的,把預設的#註釋去掉就行了

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile    .ssh/authorized_keys

 

PasswordAuthentication no

PermitEmptyPasswords no

 

7)重啟sshd

/sbin/service sshd restart

 

8)轉換證書格式,遷就一下putty

執行puttygen,轉換id_rsaputtyppk證書檔案

 

9)配置putty登入

connection–SSH–Auth中,點選Browse,選擇剛剛轉換好的證書。

然後在connection-Data填寫一下auto login username,例如我的是msa

session中填寫伺服器的IP地址,高興的話可以save一下

 

10)解決一點小麻煩

做到這一步的時候,很可能會空歡喜一場,此時就興沖沖的登入,沒準登不進去:

No supported authentication methods available

 

這時可以修改一下sshd_config,把

PasswordAuthentication no臨時改為:

PasswordAuthentication yes 並重啟sshd

 

這樣可以登入成功,退出登入後,再重新把PasswordAuthentication的值改為no,重啟sshd

以後登入就會正常的詢問你金鑰檔案的密碼了,答對了就能高高興興的登進去。

 

至於psftp命令,加上個-i引數,指定證書檔案路徑就行了。

  如果你是遠端操作伺服器修改上述配置,切記每一步都應慎重,不可出錯。如果配置錯誤,導致 SSH 連線不上,那就杯具了。

  基本上,按上述四點配置好後,Linux 下的 SSH 訪問,是比較安全的了。當然,安全與不安全都是相對的,你應該定期檢查伺服器的 log,及時發現隱患並排除。如果你有更好的安全建議,歡迎在評論區留言指正?

 

補充:

1、將 root 賬戶僅限制為控制檯訪問,禁止root登陸ssh:

# vi /etc/ssh/sshd_config
PermitRootLogin no 

2、僅使用 SSH Protocol 2:

# vi /etc/ssh/sshd_config
Protocol 2

3、配置 iptables,以便在 30 秒內僅允許在埠 2022 上有三個連線嘗試:

Redhat iptables example (Update /etc/sysconfig/iptables): 
-I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --set

-I INPUT -p tcp --dport 2022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 3 -j DR

 

4、用putty中的psftp命令拷貝檔案

本文轉自 h2appy  51CTO部落格,原文連結:http://blog.51cto.com/h2appy/1092814,如需轉載請自行聯絡原作者


相關文章