十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
現(xiàn)在讓我們強(qiáng)化你的服務(wù)器以防止未授權(quán)訪問(wèn)。

保持最新的軟件是你可以在任何操作系統(tǒng)上采取的最大的安全預(yù)防措施。軟件更新的范圍從關(guān)鍵漏洞補(bǔ)丁到小 bug 的修復(fù),許多軟件漏洞實(shí)際上是在它們被公開(kāi)的時(shí)候得到修補(bǔ)的。
有一些用于服務(wù)器上自動(dòng)更新的參數(shù)。Fedora 的 Wiki 上有一篇很棒的剖析自動(dòng)更新的利弊的文章,但是如果你把它限制到安全更新上,自動(dòng)更新的風(fēng)險(xiǎn)將是最小的。
自動(dòng)更新的可行性必須你自己判斷,因?yàn)樗鼩w結(jié)為你在你的服務(wù)器上做什么。請(qǐng)記住,自動(dòng)更新僅適用于來(lái)自倉(cāng)庫(kù)的包,而不是自行編譯的程序。你可能會(huì)發(fā)現(xiàn)一個(gè)復(fù)制了生產(chǎn)服務(wù)器的測(cè)試環(huán)境是很有必要的??梢栽诓渴鸬缴a(chǎn)環(huán)境之前,在測(cè)試環(huán)境里面更新來(lái)檢查問(wèn)題。
到目前為止,你已經(jīng)作為 root 用戶訪問(wèn)了你的服務(wù)器,它有無(wú)限制的權(quán)限,可以執(zhí)行任何命令 - 甚至可能意外中斷你的服務(wù)器。 我們建議創(chuàng)建一個(gè)受限用戶帳戶,并始終使用它。 管理任務(wù)應(yīng)該使用 sudo 來(lái)完成,它可以臨時(shí)提升受限用戶的權(quán)限,以便管理你的服務(wù)器。
不是所有的 linux 發(fā)行版都在系統(tǒng)上默認(rèn)包含 sudo,但大多數(shù)都在其軟件包倉(cāng)庫(kù)中有 sudo。 如果得到這樣的輸出 sudo:command not found,請(qǐng)?jiān)诶^續(xù)之前安裝 sudo。
要添加新用戶,首先通過(guò) SSH 登錄到你的服務(wù)器。
1、 創(chuàng)建用戶,用你想要的名字替換 example_user,并分配一個(gè)密碼:
useradd example_user && passwd example_user
2、 將用戶添加到具有 sudo 權(quán)限的 wheel 組:
usermod -aG wheel example_user
1、 創(chuàng)建用戶,用你想要的名字替換 example_user。你將被要求輸入用戶密碼:
adduser example_user
2、 添加用戶到 sudo 組,這樣你就有管理員權(quán)限了:
adduser example_user sudo
1、 Debian 默認(rèn)的包中沒(méi)有 sudo, 使用 apt-get 來(lái)安裝:
apt-get install sudo
2、 創(chuàng)建用戶,用你想要的名字替換 example_user。你將被要求輸入用戶密碼:
adduser example_user
3、 添加用戶到 sudo 組,這樣你就有管理員權(quán)限了:
adduser example_user sudo
創(chuàng)建完有限權(quán)限的用戶后,斷開(kāi)你的服務(wù)器連接:
exit
重新用你的新用戶登錄。用你的用戶名代替 example_user,用你的服務(wù)器 IP 地址代替例子中的 IP 地址:
ssh example_user@203.0.113.10
現(xiàn)在你可以用你的新用戶帳戶管理你的服務(wù)器,而不是 root。 幾乎所有超級(jí)用戶命令都可以用 sudo(例如:sudo iptables -L -nv)來(lái)執(zhí)行,這些命令將被記錄到 /var/log/auth.log 中。
默認(rèn)情況下,密碼認(rèn)證用于通過(guò) SSH 連接到您的服務(wù)器。加密密鑰對(duì)更加安全,因?yàn)樗盟借€代替了密碼,這通常更難以暴力破解。在本節(jié)中,我們將創(chuàng)建一個(gè)密鑰對(duì),并將服務(wù)器配置為不接受 SSH 密碼登錄。
1、這是在你本機(jī)上完成的,不是在你的服務(wù)器上,這里將創(chuàng)建一個(gè) 4096 位的 RSA 密鑰對(duì)。在創(chuàng)建過(guò)程中,您可以選擇使用密碼加密私鑰。這意味著它不能在沒(méi)有輸入密碼的情況下使用,除非將密碼保存到本機(jī)桌面的密鑰管理器中。我們建議您使用帶有密碼的密鑰對(duì),但如果你不想使用密碼,則可以將此字段留空。
Linux / OS X
如果你已經(jīng)創(chuàng)建了 RSA 密鑰對(duì),則這個(gè)命令將會(huì)覆蓋它,這可能會(huì)導(dǎo)致你不能訪問(wèn)其它的操作系統(tǒng)。如果你已創(chuàng)建過(guò)密鑰對(duì),請(qǐng)?zhí)^(guò)此步驟。要檢查現(xiàn)有的密鑰,請(qǐng)運(yùn)行 ls?/ .ssh / id_rsa *。
ssh-keygen -b 4096
在輸入密碼之前,按下 回車(chē)使用 /home/your_username/.ssh 中的默認(rèn)名稱 id_rsa 和 id_rsa.pub。
Windows
這可以使用 PuTTY 完成,在我們指南中已有描述:使用 SSH 公鑰驗(yàn)證。
2、將公鑰上傳到您的服務(wù)器上。 將 example_user 替換為你用來(lái)管理服務(wù)器的用戶名稱,將 203.0.113.10 替換為你的服務(wù)器的 IP 地址。
Linux
在本機(jī)上:
ssh-copy-id example_user@203.0.113.10
OS X
在你的服務(wù)器上(用你的權(quán)限受限用戶登錄):
mkdir -p ~/.ssh && sudo chmod -R 700 ~/.ssh/
在本機(jī)上:
scp ~/.ssh/id_rsa.pub example_user@203.0.113.10:~/.ssh/authorized_keys
如果相對(duì)于 scp 你更喜歡 ssh-copy-id 的話,那么它也可以在 Homebrew 中找到。使用 brew install ssh-copy-id 安裝。
Windows
選擇 1:使用 WinSCP 來(lái)完成。 在登錄窗口中,輸入你的服務(wù)器的 IP 地址作為主機(jī)名,以及非 root 的用戶名和密碼。單擊“登錄”連接。
一旦 WinSCP 連接后,你會(huì)看到兩個(gè)主要部分。 左邊顯示本機(jī)上的文件,右邊顯示服務(wù)區(qū)上的文件。 使用左側(cè)的文件瀏覽器,導(dǎo)航到你已保存公鑰的文件,選擇公鑰文件,然后點(diǎn)擊上面工具欄中的“上傳”。
系統(tǒng)會(huì)提示你輸入要將文件放在服務(wù)器上的路徑。 將文件上傳到 /home/example_user/.ssh /authorized_keys,用你的用戶名替換 example_user。
選擇 2:將公鑰直接從 PuTTY 鍵生成器復(fù)制到連接到你的服務(wù)器中(作為非 root 用戶):
mkdir ~/.ssh; nano ~/.ssh/authorized_keys
上面命令將在文本編輯器中打開(kāi)一個(gè)名為 authorized_keys 的空文件。 將公鑰復(fù)制到文本文件中,確保復(fù)制為一行,與 PuTTY 所生成的完全一樣。 按下 CTRL + X,然后按下 Y,然后回車(chē)保存文件。
最后,你需要為公鑰目錄和密鑰文件本身設(shè)置權(quán)限:
sudo chmod 700 -R ~/.ssh && chmod 600 ~/.ssh/authorized_keys
這些命令通過(guò)阻止其他用戶訪問(wèn)公鑰目錄以及文件本身來(lái)提供額外的安全性。有關(guān)它如何工作的更多信息,請(qǐng)參閱我們的指南如何修改文件權(quán)限。
3、 現(xiàn)在退出并重新登錄你的服務(wù)器。如果你為私鑰指定了密碼,則需要輸入密碼。
1、 不允許 root 用戶通過(guò) SSH 登錄。 這要求所有的 SSH 連接都是通過(guò)非 root 用戶進(jìn)行。當(dāng)以受限用戶帳戶連接后,可以通過(guò)使用 sudo 或使用 su - 切換為 root shell 來(lái)使用管理員權(quán)限。
# Authentication:
...
PermitRootLogin no
2、 禁用 SSH 密碼認(rèn)證。 這要求所有通過(guò) SSH 連接的用戶使用密鑰認(rèn)證。根據(jù) Linux 發(fā)行版的不同,它可能需要添加 PasswordAuthentication 這行,或者刪除前面的 # 來(lái)取消注釋。
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
如果你從許多不同的計(jì)算機(jī)連接到服務(wù)器,你可能想要繼續(xù)啟用密碼驗(yàn)證。這將允許你使用密碼進(jìn)行身份驗(yàn)證,而不是為每個(gè)設(shè)備生成和上傳密鑰對(duì)。
3、 只監(jiān)聽(tīng)一個(gè)互聯(lián)網(wǎng)協(xié)議。 在默認(rèn)情況下,SSH 守護(hù)進(jìn)程同時(shí)監(jiān)聽(tīng) IPv4 和 IPv6 上的傳入連接。除非你需要使用這兩種協(xié)議進(jìn)入你的服務(wù)器,否則就禁用你不需要的。 這不會(huì)禁用系統(tǒng)范圍的協(xié)議,它只用于 SSH 守護(hù)進(jìn)程。
使用選項(xiàng):
AddressFamily inet 只監(jiān)聽(tīng) IPv4。AddressFamily inet6 只監(jiān)聽(tīng) IPv6。默認(rèn)情況下,AddressFamily 選項(xiàng)通常不在 sshd_config 文件中。將它添加到文件的末尾:
echo 'AddressFamily inet' | sudo tee -a /etc/ssh/sshd_config
4、 重新啟動(dòng) SSH 服務(wù)以加載新配置。
如果你使用的 Linux 發(fā)行版使用 systemd(CentOS 7、Debian 8、Fedora、Ubuntu 15.10+)
sudo systemctl restart sshd
如果您的 init 系統(tǒng)是 SystemV 或 Upstart(CentOS 6、Debian 7、Ubuntu 14.04):
sudo service ssh restart
Fail2Ban 是一個(gè)應(yīng)用程序,它會(huì)在太多的失敗登錄嘗試后禁止 IP 地址登錄到你的服務(wù)器。由于合法登錄通常不會(huì)超過(guò)三次嘗試(如果使用 SSH 密鑰,那不會(huì)超過(guò)一個(gè)),因此如果服務(wù)器充滿了登錄失敗的請(qǐng)求那就表示有惡意訪問(wèn)。
Fail2Ban 可以監(jiān)視各種協(xié)議,包括 SSH、HTTP 和 SMTP。默認(rèn)情況下,F(xiàn)ail2Ban 僅監(jiān)視 SSH,并且因?yàn)?SSH 守護(hù)程序通常配置為持續(xù)運(yùn)行并監(jiān)聽(tīng)來(lái)自任何遠(yuǎn)程 IP 地址的連接,所以對(duì)于任何服務(wù)器都是一種安全威懾。
有關(guān)安裝和配置 Fail2Ban 的完整說(shuō)明,請(qǐng)參閱我們的指南:使用 Fail2ban 保護(hù)服務(wù)器。
大多數(shù) Linux 發(fā)行版都安裝并運(yùn)行了網(wǎng)絡(luò)服務(wù),監(jiān)聽(tīng)來(lái)自互聯(lián)網(wǎng)、回環(huán)接口或兩者兼有的傳入連接。 將不需要的面向網(wǎng)絡(luò)的服務(wù)從系統(tǒng)中刪除,以減少對(duì)運(yùn)行進(jìn)程和對(duì)已安裝軟件包攻擊的概率。
要查看服務(wù)器中運(yùn)行的服務(wù):
sudo netstat -tulpn
如果默認(rèn)情況下 netstat 沒(méi)有包含在你的 Linux 發(fā)行版中,請(qǐng)安裝軟件包 net-tools 或使用 ss -tulpn 命令。
以下是 netstat 的輸出示例。 請(qǐng)注意,因?yàn)槟J(rèn)情況下不同發(fā)行版會(huì)運(yùn)行不同的服務(wù),你的輸出將有所不同:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 7315/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3277/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3179/exim4
tcp 0 0 0.0.0.0:42526 0.0.0.0:* LISTEN 2845/rpc.statd
tcp6 0 0 :::48745 :::* LISTEN 2845/rpc.statd
tcp6 0 0 :::111 :::* LISTEN 7315/rpcbind
tcp6 0 0 :::22 :::* LISTEN 3277/sshd
tcp6 0 0 ::1:25 :::* LISTEN 3179/exim4
udp 0 0 127.0.0.1:901 0.0.0.0:* 2845/rpc.statd
udp 0 0 0.0.0.0:47663 0.0.0.0:* 2845/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 7315/rpcbind
udp 0 0 192.0.2.1:123 0.0.0.0:* 3327/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 3327/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 3327/ntpd
udp 0 0 0.0.0.0:705 0.0.0.0:* 7315/rpcbind
udp6 0 0 :::111 :::* 7315/rpcbind
udp6 0 0 fe80::f03c:91ff:fec:123 :::* 3327/ntpd
udp6 0 0 2001:DB8::123 :::* 3327/ntpd
udp6 0 0 ::1:123 :::* 3327/ntpd
udp6 0 0 :::123 :::* 3327/ntpd
udp6 0 0 :::705 :::* 7315/rpcbind
udp6 0 0 :::60671 :::* 2845/rpc.statd
netstat 告訴我們服務(wù)正在運(yùn)行 RPC(rpc.statd 和 rpcbind)、SSH(sshd)、NTPdate(ntpd)和Exim(exim4)。
TCP
請(qǐng)參閱 netstat 輸出的 Local Address 那一列。進(jìn)程 rpcbind 正在偵聽(tīng) 0.0.0.0:111 和 :::111,外部地址是 0.0.0.0:* 或者 :::* 。這意味著它從任何端口和任何網(wǎng)絡(luò)接口接受來(lái)自任何外部地址(IPv4 和 IPv6)上的其它 RPC 客戶端的傳入 TCP 連接。 我們看到類(lèi)似的 SSH,Exim 正在偵聽(tīng)來(lái)自回環(huán)接口的流量,如所示的 127.0.0.1 地址。
UDP
UDP 套接字是無(wú)狀態(tài)的,這意味著它們只有打開(kāi)或關(guān)閉,并且每個(gè)進(jìn)程的連接是獨(dú)立于前后發(fā)生的連接。這與 TCP 的連接狀態(tài)(例如 LISTEN、ESTABLISHED和 CLOSE_WAIT)形成對(duì)比。
我們的 netstat輸出說(shuō)明 NTPdate :1)接受服務(wù)器的公網(wǎng) IP 地址的傳入連接;2)通過(guò)本地主機(jī)進(jìn)行通信;3)接受來(lái)自外部的連接。這些連接是通過(guò)端口 123 進(jìn)行的,同時(shí)支持 IPv4 和 IPv6。我們還看到了 RPC 打開(kāi)的更多的套接字。
如果你在沒(méi)有啟用防火墻的情況下對(duì)服務(wù)器進(jìn)行基本的 TCP 和 UDP 的 nmap 掃描,那么在打開(kāi)端口的結(jié)果中將出現(xiàn) SSH、RPC 和 NTPdate 。通過(guò)配置防火墻,你可以過(guò)濾掉這些端口,但 SSH 除外,因?yàn)樗仨氃试S你的傳入連接。但是,理想情況下,應(yīng)該禁用未使用的服務(wù)。
本節(jié)針對(duì) Debian 8。默認(rèn)情況下,不同的 Linux 發(fā)行版具有不同的服務(wù)。如果你不確定某項(xiàng)服務(wù)的功能,請(qǐng)嘗試搜索互聯(lián)網(wǎng)以了解該功能是什么,然后再嘗試刪除或禁用它。
如何移除包取決于發(fā)行版的包管理器:
Arch
sudo pacman -Rs package_name
CentOS
sudo yum remove package_name
Debian / Ubuntu
sudo apt-get purge package_name
Fedora
sudo dnf remove package_name
再次運(yùn)行 sudo netstat -tulpn,你看到監(jiān)聽(tīng)的服務(wù)就只會(huì)有 SSH(sshd)和 NTP(ntpdate,網(wǎng)絡(luò)時(shí)間協(xié)議)。
使用防火墻阻止不需要的入站流量能為你的服務(wù)器提供一個(gè)高效的安全層。 通過(guò)指定入站流量,你可以阻止入侵和網(wǎng)絡(luò)測(cè)繪。 最佳做法是只允許你需要的流量,并拒絕一切其他流量。請(qǐng)參閱我們的一些關(guān)于最常見(jiàn)的防火墻程序的文檔:
這些是加固 Linux 服務(wù)器的最基本步驟,但是進(jìn)一步的安全層將取決于其預(yù)期用途。 其他技術(shù)可以包括應(yīng)用程序配置,使用入侵檢測(cè)或者安裝某個(gè)形式的訪問(wèn)控制。
現(xiàn)在你可以按你的需求開(kāi)始設(shè)置你的服務(wù)器了。