運維快速入門必備的 Linux 伺服器安全簡明指南,速收!
-經常升級系統00%
-自動安全更新02%
-新增一個受限使用者賬戶07%
-CentOS / Fedora11%
-Ubuntu13%
-Debian15%
-加固 SSH 訪問21%
-建立驗證金鑰對23%
-SSH 守護程式選項43%
-使用 Fail2Ban 保護 SSH 登入54%
-刪除未使用的面向網路的服務58%
-查明執行的服務59%
-查明該移除哪個服務80%
-解除安裝監聽的服務87%
-配置防火牆90%
-接下來95%
現在讓我們強化你的伺服器以防止未授權訪問。
經常升級系統
將軟體更新到最新版本通常是任何作業系統所必需的安全預防措施。軟體在更新時通常會在大到關鍵漏洞補丁、小到bug修復的範圍內進行,很多漏洞實際上在被公佈時就已經被修復了。
自動安全更新
你可以調節伺服器關於自動更新的的引數。Fedora 的 Wiki頁面上有一篇文章對自動更新進行了深入解讀,文章裡提到我們可以通過調整引數為安全更新會把自動更新的風險降低至最少。
當然,是否選擇自動更新必須由你自己決定,因為這取決於你將要在你的伺服器上進行何種工作。自動更新只能通過倉庫裡的包才能進行,你自己編譯的程式可不能用。你會需要一個與生產環境一致的測試環境,在進行最終部署之前,一定要在測試環境確認無誤才行。
CentOS 使用 yum-cron 進行自動更新。
Debian 和 Ubuntu 使用 無人值守更新。
Fedora 使用 dnf-automatic 。
新增一個受限使用者賬戶
我們假定你已經使用 root 許可權進入了伺服器中,你此時擁有伺服器的至高許可權,一個不小心就會把伺服器搞癱瘓。所以,你應該有一個受限制賬戶而不是一直使用 root 賬戶。這不會給你的操作帶來多大麻煩,因為你可以通過 sudo來進行任何你想要的操作。
有的發行版可能並不把 sudo設為預設選項,不過你還是可以在軟體包倉庫中找到。如果你獲得的提示是 sudo:command not found,請在繼續之前安裝 sudo。
記住,新增新使用者你要通過 SSH 登入伺服器才行。
CentOS / Fedora
1、 建立使用者,用你想要的名字替換 example_user,並分配一個密碼:
2、 將使用者新增到具有 sudo 許可權的 wheel 組:
Ubuntu
1、 建立使用者,用你想要的名字替換 example_user。你將被要求輸入使用者密碼:
2、 新增使用者到 sudo 組,這樣你就有管理員許可權了:
Debian
1、 Debian 預設的包中沒有 sudo, 使用 apt-get 來安裝:
2、 建立使用者,用你想要的名字替換 example_user。你將被要求輸入使用者密碼:
3、 新增使用者到 sudo 組,這樣你就有管理員許可權了:
建立完有限許可權的使用者後,斷開你的伺服器連線:
重新用你的新使用者登入。用你的使用者名稱代替 example_user,用你的伺服器 IP 地址代替例子中的 IP 地址:
現在你可以用你的新使用者帳戶管理你的伺服器,而不是 root。 幾乎所有超級使用者命令都可以用 sudo(例如:sudo iptables -L -nv)來執行,這些命令將被記錄到 /var/log/auth.log中。
加固 SSH 訪問
你可以使用密碼認證登入伺服器。但是更安全的方法是通過加密的金鑰對。你將徹底放棄密碼,用私鑰可以防止暴力破解。我們將告訴你如何建立金鑰對。
建立驗證金鑰對
1、建立金鑰對可以在你自己的電腦上完成,現在我們開始建立一個 4096 位的 RSA 金鑰對。即使有了金鑰,你仍然可以通過密碼方式加密你的私鑰,這樣除非你把密碼存在金鑰管理器裡,不然就必須通過輸入正確的密碼使用你的私鑰。用了密碼能有一個雙重保險,不想用的話你直接把密碼欄位留空就可以了。
Linux / OS X
現在我們開始第一步,請注意:如果你之前已經建立過 RSA 金鑰對,則這個命令將會覆蓋它,帶來的結果很可能是你不能訪問其它的作業系統。如果你已建立過金鑰對,請跳過此步驟。要檢查現有的金鑰,請執行 ls〜/ .ssh / id_rsa *。
在輸入密碼之前,按下 回車使用 /home/your_username/.ssh 中的預設名稱 id_rsa 和 id_rsa.pub。
Windows
這可以使用 PuTTY 完成,在我們指南中已有描述:使用 SSH 公鑰驗證。
2、將公鑰上傳到您的伺服器上。 將 example_user 替換為你用來管理伺服器的使用者名稱稱,將 203.0.113.10 替換為你的伺服器的 IP 地址。
Linux
在本機上:
OS X
在你的伺服器上(用你的許可權受限使用者登入):
在本機上:
如果相對於 scp 你更喜歡 ssh-copy-id 的話,那麼它也可以在 Hemebrew 中找到。使用 brew install ssh-copy-id 安裝。
Windows
選擇 1:使用 WinSCP 來完成。 在登入視窗中,輸入你的伺服器的 IP 地址作為主機名,以及非 root 的使用者名稱和密碼。單擊“登入”連線。
一旦 WinSCP 連線後,你會看到兩個主要部分。 左邊顯示本機上的檔案,右邊顯示服務區上的檔案。 使用左側的檔案瀏覽器,導航到你已儲存公鑰的檔案,選擇公鑰檔案,然後點選上面工具欄中的“上傳”。
系統會提示你輸入要將檔案放在伺服器上的路徑。 將檔案上傳到 /home/example_user/.ssh /authorized_keys,用你的使用者名稱替換 example_user。
選擇 2:將公鑰直接從 PuTTY 鍵生成器複製到連線到你的伺服器中(作為非 root 使用者):
上面命令將在文字編輯器中開啟一個名為 authorized_keys 的空檔案。 將公鑰複製到文字檔案中,確保複製為一行,與 PuTTY 所生成的完全一樣。 按下 CTRL + X,然後按下 Y,然後回車儲存檔案。
最後,你需要為公鑰目錄和金鑰檔案本身設定許可權:
這些命令通過阻止其他使用者訪問公鑰目錄以及檔案本身來提供額外的安全性。有關它如何工作的更多資訊,請參閱我們的指南如何修改檔案許可權。
3、 現在退出並重新登入你的伺服器。如果你為私鑰指定了密碼,則需要輸入密碼。
SSH 守護程式選項
1、 不允許 root 使用者通過 SSH 登入。
這要求所有的 SSH 連線都是通過非 root 使用者進行。當以受限使用者帳戶連線後,可以通過使用 sudo 或使用 su - 切換為 root shell 來使用管理員許可權。
2、 禁用 SSH 密碼認證。
這要求所有通過 SSH 連線的使用者使用金鑰認證。根據 Linux 發行版的不同,它可能需要新增 PasswordAuthentication 這行,或者刪除前面的 # 來取消註釋。
如果你從許多不同的計算機連線到伺服器,你可能想要繼續啟用密碼驗證。這將允許你使用密碼進行身份驗證,而不是為每個裝置生成和上傳金鑰對。
3、 只監聽一個網際網路協議。
在預設情況下,SSH 守護程式同時監聽 IPv4 和 IPv6 上的傳入連線。除非你需要使用這兩種協議進入你的伺服器,否則就禁用你不需要的。 這不會禁用系統範圍的協議,它只用於 SSH 守護程式。
使用選項:
AddressFamily inet 只監聽 IPv4。
AddressFamily inet6 只監聽 IPv6。
預設情況下,AddressFamily 選項通常不在 sshd_config 檔案中。將它新增到檔案的末尾:
4、 重新啟動 SSH 服務以載入新配置。
如果你使用的 Linux 發行版使用 systemd(CentOS 7、Debian 8、Fedora、Ubuntu 15.10+)
如果您的 init 系統是 SystemV 或 Upstart(CentOS 6、Debian 7、Ubuntu 14.04):
使用 Fail2Ban 保護 SSH 登入
Fail2Ban是一個應用程式,會把頻繁出現登陸失敗的IP地址進行自動封禁。一般情況下,人們都不會連續三次以上輸錯密碼(如果使用 SSH 金鑰,那不會超過一個),因此如果伺服器充滿了登入失敗的請求那就表示有惡意訪問。
這個軟體的監聽範圍很廣,包括我們熟知的 SSH、HHTP或者SMTP。不過在預設僅監視 SSH,並且因為 SSH 守護程式通常配置為持續執行並監聽來自任何遠端 IP 地址的連線,所以對於任何伺服器都是一種安全威懾。
刪除未使用的面向網路的服務
大部分 Linux 發行版都可以使用網路服務,你可以選擇把不再需要的那部分刪除掉,這樣可以減少被攻擊的概率。
查明執行的服務
要檢視伺服器中執行的服務:
如果預設情況下 netstat 沒有包含在你的 Linux 發行版中,請安裝軟體包 net-tools 或使用 ss -tulpn命令。
以下是 netstat 的輸出示例。 請注意,因為預設情況下不同發行版會執行不同的服務,你的輸出將有所不同:
netstat 告訴我們服務正在執行 RPC(rpc.statd 和 rpcbind)、SSH(sshd)、NTPdate(ntpd)和Exim(exim4)。
TCP
請參閱 netstat 輸出的 Local Address 那一列。程式 rpcbind 正在偵聽 0.0.0.0:111 和 :::111,外部地址是 0.0.0.0:* 或者 :::* 。這意味著它從任何埠和任何網路介面接受來自任何外部地址(IPv4 和 IPv6)上的其它 RPC 客戶端的傳入 TCP 連線。 我們看到類似的 SSH,Exim 正在偵聽來自迴環介面的流量,如所示的 127.0.0.1 地址。
UDP
UDP 套接字是無狀態的,這意味著它們只有開啟或關閉,並且每個程式的連線是獨立於前後發生的連線。這與 TCP 的連線狀態(例如 LISTEN、ESTABLISHED和 CLOSE_WAIT)形成對比。
我們的 netstat輸出說明 NTPdate :1)接受伺服器的公網 IP 地址的傳入連線;2)通過本地主機進行通訊;3)接受來自外部的連線。這些連線是通過埠 123 進行的,同時支援 IPv4 和 IPv6。我們還看到了 RPC 開啟的更多的套接字。
查明該移除哪個服務
如果你在沒有啟用防火牆的情況下對伺服器進行基本的 TCP 和 UDP 的 nmap 掃描,那麼在開啟埠的結果中將出現 SSH、RPC 和 NTPdate 。通過配置防火牆,你可以過濾掉這些埠,但 SSH 除外,因為它必須允許你的傳入連線。但是,理想情況下,應該禁用未使用的服務。
你可能主要通過 SSH 連線管理你的伺服器,所以讓這個服務需要保留。如上所述,RSA 金鑰和 Fail2Ban 可以幫助你保護 SSH。
NTP 是伺服器計時所必需的,但有個替代 NTPdate 的方法。如果你喜歡不開放網路埠的時間同步方法,並且你不需要納秒精度,那麼你可能有興趣用 OpenNTPD 來代替 NTPdate。
然而,Exim 和 RPC 是不必要的,除非你有特定的用途,否則應該刪除它們。
本節針對 Debian 8。預設情況下,不同的 Linux 發行版具有不同的服務。如果你不確定某項服務的功能,請嘗試搜尋網際網路以瞭解該功能是什麼,然後再嘗試刪除或禁用它。
解除安裝監聽的服務
如何移除包取決於發行版的包管理器:
Arch
CentOS
Debian / Ubuntu
Fedora
再次執行 sudo netstat -tulpn,你看到監聽的服務就只會有 SSH(sshd)和 NTP(ntpdate,網路時間協議)。
配置防火牆
使用防火牆阻止不需要的入站流量能為你的伺服器提供一個高效的安全層。 通過指定入站流量,你可以阻止入侵和網路測繪。 最佳做法是隻允許你需要的流量,並拒絕一切其他流量。請參閱我們的一些關於最常見的防火牆程式的文件:
iptables 是 netfilter 的控制器,它是 Linux 核心的包過濾框架。 預設情況下,iptables 包含在大多數 Linux 發行版中。
firewallD 是可用於 CentOS/Fedora 系列發行版的 iptables 控制器。
UFW 為 Debian 和 Ubuntu 提供了一個 iptables 前端。
接下來
這些是加固 Linux 伺服器的最基本步驟,但是進一步的安全層將取決於其預期用途。 其他技術可以包括應用程式配置,使用入侵檢測或者安裝某個形式的訪問控制。
現在你可以按你的需求開始設定你的伺服器了。
編譯自: https://www.linode.com/docs/security/securing-your-server/
作者: Phil Zona,譯者: geekpi
雲端計算免費課程火熱開講中,5天運維經典課程免費學,會雲端計算的運維人才到底需要掌握哪些技術,未來前景發展怎麼樣?跟隨行業大咖一起剖根究底,點選文末“閱讀原文”或長按下方二維碼即可報名免費課程!抓住免費學習的機會,逆襲2019~~
PS:記得查收小編送你的免費大禮包呦~
福利 | 一萬多套PPT模板等你免費來拿!無條件領取!
免費送 | 1000多套簡歷模板免費拿,附贈簡歷製作教程!
免費領 | 《Shell指令碼 100例》電子書免費拿,運維必備乾貨~
▼▼點選【閱讀原文】,5天運維免費課程,開講在即!
相關文章
- Linux運維工程師必備的82個工具全集(上),速收!Linux運維工程師
- Linux運維工程師必備的82個工具全集(下),速收!Linux運維工程師
- 【Linux入門】Linux運維必學的命令有哪些?Linux運維
- 入門必備的超全Linux備份工具集合,滿足運維的所有需要!Linux運維
- Linux入門必備Linux
- 總結10個Linux安全運維必備的實用工具!Linux運維
- Linux運維新手如何快速入門?Linux學習方法Linux運維
- Linux運維工程師必備工具合集Linux運維工程師
- 【Linux】運維入門 -01Linux運維
- Linux 運維必備的 40 個命令總結Linux運維
- Linux運維命令重要嗎?運維入門Linux運維
- Linux 運維工程師入門和學習必經之路!Linux運維工程師
- 最簡明的 Tcpdump 抓包入門指南TCP
- 運維工程師必備Linux常見安全策略與實踐運維工程師Linux
- Linux 運維必備 150 個命令彙總Linux運維
- Linux運維新手如何快速入門?這三點很重要!Linux運維
- 想要學Linux運維怎麼辦?Linux運維入門Linux運維
- 收藏! Linux 伺服器必備的安全設定Linux伺服器
- 成為 Linux 運維高手必備的七種“武器”!Linux運維
- Linux運維必備技術有哪些?運維要學開發Linux運維
- 《Python自動化運維快速入門(第2版)》簡介Python運維
- 34 個 常用 Linux Shell 指令碼,運維必備!Linux指令碼運維
- 【乾貨】Linux運維人員必備的實用工具!Linux運維
- 運維人必備的伺服器管理皮膚推薦運維伺服器
- 運維必知 | 從底層到應用,入門大資料必備技能彙總!運維大資料
- web專案技術必備-------jQuery快速入門WebjQuery
- 伺服器安全運維規範-安全運維伺服器運維
- PyCharm入門級使用指南,Python開發必備!PyCharmPython
- 運維必備Linux學習day3(面試常問的linux指令)運維Linux面試
- 日常工作必備之DHCP入門與安全
- Markdown快速入門指南
- KNIME快速入門指南
- 安全開發運維必備,如何進行Nginx代理Web伺服器效能優化與安全加固配置,看這篇指南就夠了運維NginxWeb伺服器優化
- Kubernetes 入門必備雲原生髮展簡史
- 運維工程師是做什麼工作的?linux運維入門學習運維工程師Linux
- Linux運維安全經驗-賬戶和登入安全Linux運維
- Linux介面是怎樣的?入門Linux運維學什麼Linux運維
- linux技術的發展方向有哪些?Linux運維入門Linux運維