越來越多的站長,開始使用獨立主機(Dedicated Host)和VPS。而為了節省成本或提高效能,不少人的獨機和VPS,都是基於unmanaged 的裸機,一切都要自己DIY。這時候,安全策略的實施,就猶為重要。下面這篇文章,我以CentOS 為例,簡單地總結一下如何設定SSH 安全存取。
Linux SSH 安全策略一:關閉無關端口
網路上被攻陷的大多數主機,是駭客用掃描工具大範圍進行掃描而被瞄準上的。所以,為了避免被掃描到,除了必要的端口,例如Web、FTP、SSH 等,其他的都應關閉。值得一提的是,我強烈建議關閉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)先新增一個維護帳號:msa
2)然後su - msa
3)ssh-keygen -t rsa
指定金鑰路徑和輸入口令之後,即在/home/msa/.ssh/中產生公鑰和私鑰:id_rsa id_rsa.pub
4)cat id_rsa.pub >> authorized_keys
至於為什麼要產生這個文件,因為sshd_config裡面寫的就是這個。
然後chmod 400 authorized_keys,稍微保護一下。
5)用psftp把id_rsa拉回本地,然後把伺服器上的id_rsa和id_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_rsa為putty的ppk憑證文件
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,及時發現隱憂並排除。
文章來源: http://www.xiaohui.com/dev/server/linux-centos-ssh-security.htm