Linux運維人員應該知道的Linux服務器安全指南
今天小編要跟大家分享的文章是關于Linux運維人員應該知道的Linux服務器安全指南。熟悉Linux運維工作的小伙伴都知道Linux服務器安全在運維工作中非常重要。今天小編在文章中來跟大家說一說如何強化你的服務器以防止未授權訪問。下面我們一起來看一看吧~
一、經常升級系統
將軟件更新到最新版本通常是任何操作系統所必需的安全預防措施。軟件在更新時通常會在大到關鍵漏洞補丁、小到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服務器的最基本步驟,但是進一步的安全層將取決于其預期用途。 其他技術可以包括應用程序配置,使用入侵檢測或者安裝某個形式的訪問控制。
現在你可以按你的需求開始設置你的服務器了。
以上就是小編今天為大家分享的關于Linux運維人員應該知道的Linux服務器安全指南的文章。希望本篇文章能夠對正在從事Linux運維相關工作的小伙伴們有所幫助。想要了解更多Linux相關知識記得關注馬哥Linux培訓官網哦~
編譯自: https://www.linode.com/docs/security/securing-your-server/
作者:Phil Zona,譯者:geekpi
【免責聲明:本文圖片及文字信息均由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除。