毋庸置疑,對於系統管理員,提高站群伺服器的安全性是最重要的事情之一。因此,也就有了許多針對這個話題而生的文章、部落格網站和論壇帖子。
一臺站群伺服器由大量功能各異的部件組成,這一點使得很難根據每個人的需求去提供定製的站群解決方案。這篇文章儘可能涵蓋一些有所裨益的小技巧來幫助管理員保證站群伺服器和使用者安全。
有一些常識是每個系統管理員都應該爛熟於心的,所以下面的幾點在本文將不會提及:
務必保證系統是 最新的
經常更換密碼 – 使用數字、字母和非字母的符號組合
給予使用者 最小 的許可權,滿足他們日常使用所需即可
只安裝那些真正需要的站群軟體包
下面是一些更有意思的內容:
更改 SSH 預設埠
在搭建好一臺全新的站群伺服器後要做的第一件事情就是更改 SSH 的預設埠。這個小小的改動能夠使你的站群伺服器避免受到成千上萬的暴力攻擊(LCTT 譯註:不更改預設埠相當於駭客們知道你家的門牌號,這樣他們只需要一把一把的試鑰匙就可能開啟你家的鎖)。
要更改預設的 SSH 埠,先開啟 sshd_config 檔案:
sudo vim /etc/ssh/sshd_config
找到下面這行:
#Port 22
“#” 號表示這行是註釋。首先刪除 #號,然後把埠號改成目的埠。埠號不能超過 65535,確保要指定的埠號沒有被系統或其它服務佔用。建議在 [維基百科] 上檢視常用埠號列表。在本文中,使用這個埠號:
Port 16543
然後儲存並關閉檔案,等待更改生效。
接下來的一步是:
使用 SSH 金鑰認證
在透過 SSH 訪問站群伺服器時,使用 SSH 金鑰進行認證是尤其重要的。這樣做為站群伺服器增加了額外的保護,確保只有那些擁有金鑰的人才能訪問站群伺服器。
在本地機器上執行下面命令以生成 SSH 金鑰:
ssh-keygen -t rsa
你會看到下面的輸出,詢問要將金鑰寫到哪一個檔案裡,並且設定一個密碼:
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): my_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in my_key.
Your public key has been saved in my_key.pub.
The key fingerprint is:
SHA256:MqD/pzzTRsCjZb6mpfjyrr5v1pJLBcgprR5tjNoI20A
完成之後,就得到兩個檔案:
my_key
my_key.pub
接下來把 my_key.pub 複製到~/.ssh/authorized_key 中
cp my_key.pub ~/.ssh/authorized_keys
然後使用下面命令將金鑰上傳到站群伺服器:
scp -P16543 authorized_keys user@yourserver-ip:/home/user/.ssh/
至此,你就可以從這臺本地機器上無密碼地訪問站群伺服器了。
關閉 SSH 的密碼認證
既然已經有了 SSH 金鑰,那麼關閉 SSH 的密碼認證就會更安全了。再次開啟並編輯 sshd_config,按如下設定:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
關閉 Root 登入
下面關鍵的一步是關閉 root 使用者的直接訪問,而使用 sudo 或 su 來執行管理員任務。首先需要新增一個有 root 許可權的新使用者,所以編輯這個路徑下的 sudoers 檔案:
/etc/sudoers/
推薦使用如 visudo 這樣的命令編輯該檔案,因為它會在關閉檔案之前檢查任何可能出現的語法錯誤。當你在編輯檔案時出錯了,這就很有用了。
接下來賦予某個使用者 root 許可權。在本文中,使用使用者 sysadmin 。確保在編輯後這個檔案時使用的使用者是系統已有的使用者。找到下面這行:
root ALL=(ALL) ALL
複製這行,然後貼上在下一行,然後把 root 更改為 “sysadmin”,如下所示:
root ALL=(ALL) ALL
sysadmin ALL=(ALL) ALL
現在解釋一下這行的每一個選項的含義:
(1) root (2)ALL=(3)(ALL) (4)ALL
(1) 指定使用者
(2) 指定使用者使用 sudo 的終端
(3) 指定使用者可以擔任的使用者角色
(4) 這個使用者可以使用的命令
(LCTT 譯註:所以上面的配置是意思是:root 使用者可以在任何終端擔任任何使用者,執行任何命令。)
使用這個配置可以給使用者訪問一些系統工具的許可權。
這時,可以放心儲存檔案了。
為了關閉透過 SSH 直接訪問 root,需要再次開啟 sshd_config ,找到下面這行:
#PermitRootLogin yes
更改為:
PermitRootLogin no
然後儲存檔案,重啟 sshd 守護程式使改動生效。執行下面命令即可:
sudo /etc/init.d/sshd restart
設定防火牆
防火牆有助於過濾出入埠和阻止使用暴力法的登入嘗試。我傾向於使用 SCF(Config Server Firewall) 這個強力防火牆。它使用了 iptables,易於管理,而且對於不擅於輸入命令的使用者提供了 web 介面。
要安裝 CSF,先登入到站群伺服器,切換到這個目錄下:
cd /usr/local/src/
然後以 root 許可權執行下面命令:
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
只需等待安裝程式完成,然後編輯 CSF 的配置檔案:
/etc/csf/csf.conf
預設情況下 CSF 是以測試模式執行。透過將 “TESTING” 的值設定成 0,切換到 product 模式。
TESTING = “0”
下面要設定的就是站群伺服器上允許透過的埠。在 csf.conf 中定位到下面的部分,根據需要修改埠:
# 允許入站的 TCP 埠
TCP_IN = “20,21,25,53,80,110,143,443,465,587,993,995,16543”
# 允許出站的 TCP 埠
TCP_OUT = “20,21,22,25,53,80,110,113,443,587,993,995,16543”
# 允許入站的 UDP 埠
UDP_IN = “20,21,53”
# 允許出站的 UDP 埠
# 要允許發出 traceroute 請求,請加 33434:33523 埠範圍到該列表
UDP_OUT = “20,21,53,113,123”
請根據需要逐一設定,推薦只使用那些需要的埠,避免設定對埠進行大範圍設定。此外,也要避免使用不安全服務的不安全埠。比如只允許埠 465 和 587 來傳送電子郵件,取代預設的 SMTP 埠 25 。(LCTT 譯註:前提是你的郵件站群伺服器支援 SMTPS)
重要 :千萬不要忘記允許自定義的 ssh 埠。
允許你的 IP 地址透過防火牆,而絕不被遮蔽,這一點很重要。 IP 地址定義在下面的檔案中:
/etc/csf/csf.ignore
被遮蔽了的 IP 地址會出現在這個檔案中:
/etc/csf/csf.deny
一旦完成更改,使用這個命令重啟 csf:
sudo /etc/init.d/csf restart
下面是在某臺站群伺服器上的 csf.deny 檔案的部分內容,來說明 CSF 是很有用的:
.216.48.205 # lfd: (sshd) Failed SSH login from 211.216.48.205 (KR/Korea, Republic of/-): 5 in the last 3600 secs – Fri Mar 6 00:30:35 2015
.41.124.53 # lfd: (sshd) Failed SSH login from 103.41.124.53 (HK/Hong Kong/-): 5 in the last 3600 secs – Fri Mar 6 01:06:46 2015
.41.124.42 # lfd: (sshd) Failed SSH login from 103.41.124.42 (HK/Hong Kong/-): 5 in the last 3600 secs – Fri Mar 6 01:59:04 2015
.41.124.26 # lfd: (sshd) Failed SSH login from 103.41.124.26 (HK/Hong Kong/-): 5 in the last 3600 secs – Fri Mar 6 02:48:26 2015
.169.74.58 # lfd: (sshd) Failed SSH login from 109.169.74.58 (GB/United Kingdom/mail2.algeos.com): 5 in the last 3600 secs – Fri Mar 6 03:49:03 2015
可以看到,嘗試透過暴力法登入的 IP 地址都被遮蔽了,真是眼不見心不煩啊!
鎖住賬戶
如果某個賬戶在很長一段時間內都不會被使用了,那麼可以將其鎖住以防止其它人訪問。使用如下命令:
passwd -l accountName
當然,這個賬戶依然可以被 root 使用者使用(LCTT 譯註:可用 su 切換為該賬號)。
瞭解站群伺服器上的服務
站群伺服器的本質是為各種服務提供訪問功能。使站群伺服器只執行所需的服務,關閉沒有使用的服務。這樣做不僅會釋放一些系統資源,而且也會使站群伺服器變得更加安全。比如,如果只是執行一個簡單的站群伺服器,顯然不需要 X 顯示或者桌面環境。如果不需要 Windows 網際網路共享功能,則可以放心關閉 Samba 。
使用下面的命令能檢視伴隨系統啟動而啟動的服務:
chkconfig –list | grep “3n”
如果系統執行了 systemd ,執行這條命令:
systemctl list-unit-files –type=service | grep enabled
然後使用下面的命令關閉服務:
chkconfig service off
或
systemctl disable service
在上面的例子中,把 “service” 替換成真正想要停止的服務名稱。例項如下:
chkconfig httpd off
或
systemctl disable httpd
小結
這篇文章的目的是涵蓋一些通用的安全步驟以便幫助你保護站群伺服器。你可以採取更多方式去增強對站群伺服器的保護。請記住保證站群伺服器安全是你的責任,在維護站群伺服器安全時儘量做出明智的選擇,儘管並沒有什麼容易的方式去完成這件事情,而建立 “完善的” 安全需要花費大量的時間和測試直到達到想要的結果。
原文連結:http://www.centoscn.com/CentosSecurity/CentosSafe/2015/0705/5798.html