原文地址html
許多服務器時不時被黑客攻擊。因此我決定寫一個簡短的教程,向您展現如何輕鬆保護您的 Linux 服務器。node
這並非一本全面的安全指南。linux
可是,它能夠幫助您防止幾乎90%的流行後端攻擊,例如暴力登陸嘗試和 DDoS。git
最好的部分是你能夠在一兩個小時內實現它們。github
若是您已知足上述要求,請轉到第一步。後端
要訪問遠程服務器,您必須使用密碼登陸或使用 SSH 密鑰。安全
密碼的問題在於它們很容易暴力破解(您將在下面學習如何進一步防止這種狀況)。此外,您還必須在須要訪問服務器時隨時鍵入它們。bash
要避免上述缺點,您必須設置 SSH 密鑰身份驗證。它比密碼更安全,由於黑客不能暴力破解它們。服務器
鏈接到服務器也更容易,更快,由於您不須要輸入密碼。網絡
如下是如何爲服務器設置SSH身份驗證。
在本地計算機上,鍵入如下內容生成SSH密鑰對:
ssh-keygen
複製代碼
上面的命令將指導您完成幾個步驟來生成SSH密鑰。記下要存儲密鑰的文件。
使用如下命令將公鑰添加到服務器:
ssh-copy-id username@remote_host
複製代碼
請務必使用您的真實用戶名和服務器的IP地址替換 username 和 remote_host 。系統將提示您輸入密碼。
嘗試使用如下命令登陸服務器:
ssh username@remote_host
複製代碼
不要忘記將 username 和 remote_host 替換爲服務器的詳細信息。您應該注意到,此次不會提示您輸入密碼。
若是 ssh-copy-id 命令沒法使用,請使用如下命令將公鑰(這裏是 id_rsa.pub)拷貝到服務器:
scp -P port id_rsa.pub username@remote_host:~/.ssh
複製代碼
port 是端口號
而後在服務器執行
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
複製代碼
許多安全協議利用您的系統時間來運行 cron 做業,日期日誌和執行其餘關鍵任務。
若是您的系統時間不正確,可能會對您的服務器產生負面影響。爲防止這種狀況發生,您能夠安裝 NTP 客戶端。此客戶端將使您的系統時間與全球 NTP 服務器保持同步。
使用如下命令安裝 NTP 客戶端:
sudo apt install ntp
複製代碼
您再也不須要擔憂再次設置系統日期。
服務器上的應用程序會公開某些端口,以便網絡中的其餘應用程序能夠訪問它們。
黑客還能夠在您的服務器上安裝後門,並公開一個端口,經過它能夠控制服務器。
出於這個緣由,咱們不但願您的服務器在咱們不知道的端口上偵聽請求。
要查看活動端口,請使用如下命令:
sudo ss -lntup
複製代碼
查看輸出並調查您彷佛並不熟悉的任何端口或進程。
嘗試發現並追蹤可能有害的服務和進程。
要開始前,請查看 「bad」 TCP/UDP ports。
防火牆容許您中止/容許來自/來自服務器上特定端口的流量。爲此,我一般使用 UFW(簡單的防火牆)。
UFW 的工做原理是讓您配置如下規則:
在本節中,您將阻止除明確容許的網絡流量以外的全部網絡流量。在安裝其餘程序時,請記住啓用運行所需的必要端口。
Install ufw.
sudo apt-get install ufw
複製代碼
您能夠拒絕全部傳出流量...
sudo ufw default deny outgoing comment 'deny all outgoing traffic'
複製代碼
...或容許全部傳出流量。
sudo ufw default allow outgoing comment 'allow all outgoing traffic'
複製代碼
接下來,咱們要拒絕全部傳入的流量......
sudo ufw default deny incoming comment 'deny all incoming traffic'
複製代碼
...除了SSH鏈接,以便咱們能夠訪問系統。
sudo ufw limit in ssh comment 'allow SSH connections in'
複製代碼
若是您將UFW配置爲拒絕全部傳出流量,請不要忘記根據您的須要容許特定流量。如下是一些例子:
# 容許端口 53 上的流量 -- DNS
sudo ufw allow out 53 comment 'allow DNS calls out'
# 容許在 123 端口輸出流量-- NTP
sudo ufw allow out 123 comment 'allow NTP out'
# 容許 HTTP,HTTPS 或 FTP 的流量輸出 apt 可能須要這些,具體取決於您使用的是哪些來源
sudo ufw allow out http comment 'allow HTTP traffic out'
sudo ufw allow out https comment 'allow HTTPS traffic out'
sudo ufw allow out ftp comment 'allow FTP traffic out'
# allow whois
sudo ufw allow out whois comment 'allow whois'
# 容許端口 68 上的流量輸出 -- the DHCP client
# you only need this if you're using DHCP
sudo ufw allow out 68 comment 'allow the DHCP client to update'
複製代碼
要拒絕端口 99 上的任何流量,請使用如下命令:
sudo ufw deny 99
複製代碼
最後,使用如下命令啓動 UFW:
sudo ufw enable
複製代碼
您還可使用如下命令查看 UFW 狀態:
sudo ufw status
複製代碼
您可使用兩個實用程序來阻止大多數自動攻擊:
PSAD 和 Fail2Ban 之間的區別
咱們瞭解到端口能夠訪問服務器上的應用程序。
攻擊者可能決定掃描您的服務器以獲取他們可能用於訪問服務器的開放端口。
PSAD 監視網絡活動以檢測並可選地阻止此類掃描和其餘類型的可疑流量,例如 DDoS 或 OS 指紋識別嘗試。
另外一方面,Fail2Ban 掃描各類應用程序(如 FTP )的日誌文件,並自動禁止顯示惡意標誌(如自動登陸嘗試)的 IP。
服務器上的應用程序一般會將日誌消息保存到日誌文件中。除非您打算手動監視日誌文件,不然須要安裝 logwatch。
logwatch 掃描系統日誌文件並對其進行彙總。
您能夠直接從命令行運行它,也能夠將其安排在按期計劃中運行。例如,您能夠配置 logwatch 以經過電子郵件向您發送日誌文件的每日摘要。請注意,您的服務器須要可以發送電子郵件才能正常工做。
logwatch使用服務文件來了解如何讀取和彙總日誌文件。您能夠在 /usr/share/logwatch/scripts/services
中查看全部庫存服務文件。
logwatch的配置文件 /usr/share/logwatch/default.conf/logwatch.conf
指定默認選項。您能夠經過命令行參數覆蓋它們。
要在 Ubuntu 或 Debian 上安裝 logwatch,請運行如下命令:
apt-get install logwatch
複製代碼
對於其餘 Linux 發行版的用戶,請查看 Linode 的這篇史詩指南。
您能夠嘗試直接運行 logwatch,以防須要查看收集的樣本。
sudo /usr/sbin/logwatch --output stdout --format text --range yesterday --service all
複製代碼
最後,告訴 logwatch 天天發送一封電子郵件,其中包含咱們日誌文件的摘要。要執行此操做,請打開文件 /etc/cron.daily/00logwatch
並找到執行行,而後將其更改成如下內容:
/usr/sbin/logwatch --output mail --format html --mailto root --range yesterday --service all
複製代碼
保護 Linux 服務器後,您應該執行安全審覈,以發現您可能錯過的任何安全漏洞。
爲此,您可使用 Lynis,這是一個能夠執行如下操做的開源軟件:
首先,經過克隆他們的 Github 存儲庫來安裝 Lynis。這可確保您安裝最新版本的Lynis。
git clone https://github.com/CISOfy/lynis
複製代碼
切換到咱們克隆Lynis的目錄:
cd lynis
複製代碼
最後,使用下面的命令來運行你的第一次審覈:
./lynis audit system
複製代碼
您能夠在他們的官方網站上了解有關 Lynis 的更多信息。
歡迎您閱讀有關增強 Linux 服務器的其餘操做指南。我但願你能學到新東西。