2018年04月13日 更新,添加了 fail2ban 進階配置教程鏈接,更新了命令。

落格博客全站遷移到了 遺囑,每月最低只要 15塊人民幣,支持我的話考慮用我的邀請碼註冊,還送 $10 (合 60 多塊人民幣) 優惠! 😚


最近路由購買了一台vps用來學習...... 是的! 你沒有看錯! 我真的是用來認真的學習的!

=。=

總之,在購買了一台vps之後,你總是需要做足一些基礎的安全措施來保證你的vps不會淪為某些傻逼的肉雞。

好吧,這次因為我購買的是一台Linux系統的vps,那麼我就以這個為栗子來進行記錄了。


 

由於一台vps就相當於一台擁有獨立IP的,直接暴露于互聯網之上的電腦,這在為你帶來便利的同時也直接讓你的vps與危險畫上了等號,密碼窮舉、DDOS攻擊、各種各樣你想到的想不到的攻擊方法都在等待著你,不要相信你那驚悚的創意能想出多麼強大的密碼,統計學告訴我們——還是相信RSA吧!

使用RSA金鑰組登陸SSH

首先就來說一下SSH密碼窮舉的問題——別告訴我你還在telnet,否則我們沒得聊,請立即關閉這個頁面!

這個世界上,總有不少的傻逼在無聊的做著SSH弱口令掃描這種事情,相信我,你比不過字典。所以,關閉SSH的密碼驗證是一個不錯的選擇。

以前我們老師就講:其實最安全的電腦反而是那些沒有密碼的電腦,沒有密碼也就無從破解——因為系統會拒絕遠端登入。

可是關閉了SSH密碼驗證怎麼登錄呢? vnc? 不,不。我們可以使用RSA金鑰組。

通過生成RSA公私金鑰組,將公開金鑰上傳到伺服器,自己保留私密金鑰,這樣不僅加強了密碼,更帶來了不需要密碼就能登錄的便利①

①:不需要密碼是一種選擇,路由推薦各位還是在此基礎上依舊使用一個密碼,這樣即使有人得到了你的私密金鑰備份,也不太容易免密碼登錄你的vps了。

按照如下示例來使用命令:ssh-keygen

當然了,命令回饋中的一些必要內容我已經給塗鴉過了,你大概看著差不多就對了。

接下來,我們再使用scp命令,將生成好的公開金鑰扔到伺服器上去:

的還是SSH到伺服器上,把這個 id_rsa.pub 檔案複製到ssh的相應目錄裡,然後改名為 authorized_keys

要注意的是,你想要這對金鑰登錄哪個帳戶,就放到哪個帳戶下,比如我要自動登入root,那麼我就會這樣做:

這些簡單的目錄檔操作我就不再過多做解釋了大致就是將 id_rsa.pub 改名並且放到ssh的使用者配置目錄裡,當然,因為我這裡是新系統,所以直接就改名了,你要是目錄中本身就已經有了 authorized_keys 這個文件,那你就需要備份原檔或者直接將 id_rsa.pub 的內容追加到裡邊去。

這樣,我們就已經可以使用RSA金鑰檔來登錄ssh了。

關閉ssh的密碼登錄

在如上目錄找到ssh服務的設定檔,將如下欄位進行修改:

對了, id_rsa 這個檔我建議你也拷出來額外備份,它就是你電腦上要保存的私密金鑰,一旦丟了,你可能就需要vnc上你的vps來重置ssh啦!

另外,為了避免Write failed: Broken pipe錯誤,你也可以順便在這個文檔末尾加上下面一條命令,然後再重啟 ssh 服務。

這樣,你的vps很大程度上就比較安全了,不過,如果你的vps用來做網站了,開啟了HTTPd之類的服務,那可能你還需要

安裝 CSF 防火牆

通過安裝csf防火牆,可以有效的遮罩嘗試入侵你vps的IP,進階的配置我們也不需要知道,但至少你應該安裝它。

使用 CSF 防火牆,我專門寫了一篇文章來指導你安裝並配置它,這和 ufw 衝突,如果你決定使用 csf,就忽略本文中的 ufw 相關部分即可。

安裝 fail2ban 軟體

這個軟體將通過使用 iptables 防火牆,將嘗試爆破 ssh 密碼的 IP 封停,預設10分鐘,這樣可以有效防止攻擊。

如果你和我一樣使用 nginx 來提供服務,那麼你也可以考慮進階配置一下 fail2ban 來讓它進一步保護 nginx Fail2Ban 高級配置 保護 Nginx 服務

禁用Linux多餘埠

禁用掉所有埠,只留下需要使用的埠永遠都是正確的選擇:

使用如下命令來檢測是否存在 ufw,不再推薦直接編輯 iptables 了,這東西不是一般人玩得轉的,所以 Ubuntu 官方也推出了一個更簡單易用的 iptables 前端來供一般管理員使用,其實功能也挺強大,但是命令精簡了不少?,具體介紹請移步:Ubuntu 下更簡單的防火牆 Uncomplicated Firewall

如果終端顯示防火牆未啟動(理論上都應該是這樣,因為 ufw 是系統內置的。)

我們使用如下命令來添加規則:

你看,命令多簡單? 用什麼添加什麼。它也會預設打開一些埠比如說 ICMP。

另外,它會預設設置 iptables 的 INPUT 表為拒絕,方便安全。

這樣,將來你要使用什麼服務,就照貓畫虎往裡邊添加什麼埠就好了,額外的埠用不到開了也沒用還容易被掃埠被黑=。=

對了! 記得使用如下命令來匯出配置,然後配置啟動載入,否則一會兒各種規則就消失不見啦!

還有,不要找 iptables 的重啟命令了——這玩意兒在 ubuntu 裡已經是內核級別——也就是說,是即時載入生效噠!

添加中文環境配置(選)

如果你使用的是國內的 vps,那你可能還需要修改 ubuntu 的更新源為國內鏡像源,可以移步阿里雲 Ubuntu 更新鏡像源

在更新之後,你很可能會遇到 locale 為空的報錯,那麼安裝一下語言環境:

 

總結

這樣一來,你關閉了ssh密碼驗證,安裝了反入侵防火牆,還關閉了所有不常用端口,還利用腳本保護了 nginx 服務器……理論上你的vps至少跳出了容易被抓的肉雞行列,後續的安全配置,就可以根據需求大家各自定制啦!

由...出版 R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

加入對話

16 註釋

您的電子郵件地址不會被公開. 必填字段標 *

  1. 關閉密碼登錄後,再次連接提示:沒有權限 (公鑰,GSSAPI-keyex,GSSAPI與 - 麥克風).

    也關閉了SELinux,不知道咋回事,試了好幾次,求大神分析下

  2. R0uter你好,我是surveillance104.
    其實關於傳送ssh public key 可以通过cat命令一步搞定:

    cat .ssh/id_rsa.pub | ssh root@ip address “cat >> ~/.ssh/authorized_keys”
    //id_rsa.pub其實也可以是其他名字 我建議通過數字編號(比如說id_rsa0.pub)因為如果你控制兩個或兩個以上的vps管理的話//
    當然如果沒有.ssh文件夾的話可以這樣:
    mkdir .ssh

    關於其他安全提示我已經學到了 非常感謝R0uter的教學

    1. 你這個命令相當於用ssh把公開金鑰的內容用文本的形式傳給了伺服器然後執行;我的命令是用scp將檔拷貝到遠端伺服器,其實scp也可以順便拷貝成authorized_keys檔案名,這樣的話如果寫清楚路徑,那也是一句話,還避免了管道的使用。其實是殊途同歸的。

      區別還是有的:你的一句話方便複製卻不方便手打,一旦手滑,就容易打錯,而用scp則少了一些符號的使用,從命中率上來講,還是我的方法更合適
      ;)