保護您的服務器以防止數據丟失或安全危害非常重要。因為安全對許多人來說是一個極具挑戰性的主題,所以它常常被忽視。當問題出現時,許多人都沒有意識到。通過遵循這些最佳實踐,您可以顯著降低被惡意行為者破壞的風險。
服務器安全最佳實踐
1.服務器管理
正確的服務器管理可確保所有活動繼續滿足組織標準并保持服務器運營的最佳性能。這包括聘請合格的系統管理員和實施物理和內部安全措施。
2. 人身安全
實施物理安全控制有助于防止未經授權的人員物理訪問路由器、配線柜和服務器等組件。通過物理訪問控制 (PAC) 進行的受控訪問,例如鎖、生物識別身份驗證和徽章等其他設備,在任何組織中都是必不可少的。
傳統門和鎖是物理訪問控制系統的最基本形式,但企業級物理訪問控制系統更進一步。訪問控制在建筑物的某些區域可能更嚴格,例如具有公共訪問區域和限制訪問區域的組織。
維護憑證數據庫并刪除任何已停用的用戶是一種安全最佳做法。此外,添加不同類型的 PAC 是一個很好的公式,可以更安全地控制對企業中易受攻擊或重要部門的物理訪問。
3.更新軟件和操作系統
保持軟件和操作系統 (OS) 的更新周期是您可以為服務器采取的最重要的安全預防措施。更新范圍從關鍵漏洞補丁到小錯誤修復。許多軟件漏洞在公開時都會被修補,這增加了用戶安裝更新的緊迫性。
由于服務器系統往往與軟件環境有著復雜的關系,因此故障可能會被忽視。未能及時更新服務器上的操作系統和任何其他軟件將不可避免地使其面臨常見漏洞。企業必須計劃在合理的時間內執行定期更新和補丁以維護安全。
4. 安全連接
SSH
當需要通過命令行(終端)訪問服務器時,請使用安全外殼 (SSH)連接。SSH 為數據傳輸創建安全管道。此連接僅保護通過終端從計算機發送到服務器的信息。
其他需要考慮的是SSH 端口。SSH 默認端口是#22。最佳實踐建議避免使用此端口并使用 32768 到 61000 的端口范圍以獲得額外的完整性。此更改可防止對連接和主要黑客雷達的自動攻擊。
SSH 密鑰
不要使用 SSH 密碼訪問服務器,而是使用SSH 密鑰。他們禁用以 root 用戶身份訪問服務器所需的 SSH 功能,從而無需使用 root 密碼。與單獨使用密碼相比,它在連接到服務器時提供了額外的安全層。
使用 SSH 密鑰還允許我們創建加密安全密鑰對,將唯一的連接信息本地存儲在您的計算機和服務器上。由于 SSH 密鑰對以加密方式生成,因此密鑰大小越大,越安全。
代理服務器是作為附加安全措施的一種選擇,因為它們將任何網絡用戶隱藏在代理的 IP 地址和主機防火墻之后。此設置使黑客更難以針對特定設備進行訪問。
多重身份驗證 (MFA)
SSH 密鑰主要是一種單因素身份驗證方法。雙重或多重身份驗證將要求用戶提供不同類型的信息(電話號碼、電子郵件、政府 ID)以訪問敏感數據。
虛擬專用網絡
虛擬專用網絡 (VPN)是從遠程位置到本地專用網絡的專用連接。它確保私人數據保持安全并維護該信息的機密性和完整性。VPN 為在線通信和瀏覽提供隱私和保護,使您的設備和 Internet 之間的連接保密。
Fail2Ban
Fail2ban是一種服務器軟件,它通過懲罰或阻止嘗試暴力訪問的遠程連接來防止入侵者。它允許您監控攻擊的影響和頻率,并發布防火墻規則更新以在指定時間內阻止可疑 IP 地址。Fail2Ban 可以監控多種協議,包括 HTTP、SSH 和 SMTP。默認情況下,Fail2Ban 僅監控 SSH,但對任何服務器來說都是一種有用的安全威懾。
SSL/TLS
另一個有效的保護措施是服務器安全證書,例如安全套接字層 (SSL) 和傳輸層安全 (TLS)。這些安全證書是用于身份驗證和加密的加密協議,其中 TLS 是 SSL 的更新版本。TLS 修復了舊 SSL 協議中的一些安全漏洞,這些證書是用戶身份驗證所必需的。
服務器安全證書通過對通過 Internet 發送的敏感數據(例如密碼、用戶名和信用卡信息)進行加擾來保護網絡通信,從而允許服務器驗證實體。
限制根訪問
SSH 應該僅限于有限的用戶子集。為此,請將以下信息添加到/etc/ssh/sshd_config文件。
PermitRootLogin no Protocol 2
然后,將 SSH 用戶組添加到/etc/ssh/sshd_config文件。
AllowGroups sshusers
5.禁用不必要的服務
審計服務
服務審計探索服務器上正在運行的服務、它們使用的協議以及它們交互的端口。意識到這些因素將有助于減少系統中的任何攻擊向量。
大多數服務器都默認啟用某些服務,允許您使用服務器上可用的多種功能。如果不使用這些額外的服務,最好禁用它們。在基于 Red Hat 的系統上運行特定命令可幫助您查找和禁用不必要的服務。
支持 Red Hat/CentOS 的服務
要查看 Red Hat 或 CentOS 中啟用的服務,請運行以下命令。
systemctl list-unit-files | grep enabled
這是輸出。
[root@host ~]# systemctl list-unit-files | grep enabled var-lib-snapd-snap-core-7917.mount enabled var-lib-snapd-snap-hello\x2dworld-29.mount enabled var-lib-snapd-snap-snapcraft-3440.mount enabled acpid.service enabled auditd.service enabled autovt@.service enabled crond.service enabled dbus-org.fedoraproject.FirewallD1.service enabled firewalld.service enabled getty@.service enabled irqbalance.service enabled microcode.service enabled NetworkManager-wait-online.service enabled postfix.service enabled qemu-guest-agent.service enabled rhel-autorelabel.service enabled rhel-configure.service enabled rhel-dmesg.service enabled rhel-domainname.service enabled rhel-import-state.service enabled rhel-loadmodules.service enabled rhel-readonly.service enabled rsyslog.service enabled sonarpush.service enabled sshd.service enabled systemd-readahead-collect.service enabled systemd-readahead-drop.service enabled systemd-readahead-replay.service enabled tuned.service enabled snapd.socket enabled default.target enabled multi-user.target enabled remote-fs.target enabled runlevel2.target enabled runlevel3.target enabled runlevel4.target enabled [root@host ~]#
以下命令顯示正在運行的服務。
systemctl | grep running
輸出如下。
[root@host ~]# systemctl | grep running session-2969.scope loaded active running Session 2969 of user root acpid.service loaded active running ACPI Event Daemon auditd.service loaded active running Security Auditing Service crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus firewalld.service loaded active running firewalld - dynamic firewall daemon getty@tty1.service loaded active running Getty on tty1 irqbalance.service loaded active running irqbalance daemon polkit.service loaded active running Authorization Manager postfix.service loaded active running Postfix Mail Transport Agent rsyslog.service loaded active running System Logging Service serial-getty@ttyS0.service loaded active running Storm management console on Serial Getty ttyS0 snapd.service loaded active running Snappy daemon sonarpush.service loaded active running LiquidWeb Sonarpush Monitoring Agent sshd.service loaded active running OpenSSH server daemon systemd-journald.service loaded active running Journal Service systemd-logind.service loaded active running Login Service systemd-udevd.service loaded active running udev Kernel Device Manager tuned.service loaded active running Dynamic System Tuning Daemon dbus.socket loaded active running D-Bus System Message Bus Socket snapd.socket loaded active running Socket activation for snappy daemon systemd-journald.socket loaded active running Journal Socket systemd-udevd-control.socket loaded active running udev Control Socket systemd-udevd-kernel.socket loaded active running udev Kernel Socket [root@host ~]#
要禁用服務,例如藍牙,請使用此命令。
systemctl disable bluetooth
Debian/Ubuntu 運行服務
以下命令向您顯示在基于 Debian 或 Ubuntu 的服務器上運行的服務。
service --status-all |grep '+'
這是輸出。
root@host ~# service --status-all |grep '+' [ + ] apache-htcacheclean [ + ] apache2 [ + ] apparmor [ + ] apport [ + ] atd [ + ] binfmt-support [ + ] cron [ + ] dbus [ + ] ebtables [ + ] grub-common [ + ] irqbalance [ + ] iscsid [ + ] lvm2-lvmetad [ + ] lvm2-lvmpolld [ + ] lxcfs [ + ] procps [ + ] rsyslog [ + ] ssh [ + ] udev [ + ] ufw [ + ] unattended-upgrades root@host ~#
此命令列出由systemV管理的服務的狀態。加號 (+) 和減號 (-) 表示服務是否處于活動狀態。
systemctl | grep running
下面顯示了輸出。
root@host ~# systemctl | grep running proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File System Automount Point init.scope loaded active running System and Service Manager session-1726.scope loaded active running Session 1726 of user root accounts-daemon.service loaded active running Accounts Service apache2.service loaded active running The Apache HTTP Server atd.service loaded active running Deferred execution scheduler cron.service loaded active running Regular background program processing daemon dbus.service loaded active running D-Bus System Message Bus getty@tty1.service loaded active running Getty on tty1 irqbalance.service loaded active running irqbalance daemon lvm2-lvmetad.service loaded active running LVM2 metadata daemon lxcfs.service loaded active running FUSE filesystem for LXC networkd-dispatcher.service loaded active running Dispatcher daemon for systemd-networkd polkit.service loaded active running Authorization Manager rsyslog.service loaded active running System Logging Service serial-getty@ttyS0.service loaded active running Storm management console on Serial Getty ttyS0 snapd.service loaded active running Snappy daemon ssh.service loaded active running OpenBSD Secure Shell server systemd-journald.service loaded active running Journal Service systemd-logind.service loaded active running Login Service systemd-networkd.service loaded active running Network Service systemd-resolved.service loaded active running Network Name Resolution systemd-timesyncd.service loaded active running Network Time Synchronization systemd-udevd.service loaded active running udev Kernel Device Manager unattended-upgrades.service loaded active running Unattended Upgrades Shutdown user@0.service loaded active running User Manager for UID 0 dbus.socket loaded active running D-Bus System Message Bus Socket lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket snapd.socket loaded active running Socket activation for snappy daemon syslog.socket loaded active running Syslog Socket systemd-journald-audit.socket loaded active running Journal Audit Socket systemd-journald-dev-log.socket loaded active running Journal Socket (/dev/log) systemd-journald.socket loaded active running Journal Socket systemd-udevd-control.socket loaded active running udev Control Socket systemd-udevd-kernel.socket loaded active running udev Kernel Socket root@host ~#
要禁用服務,請使用以下命令。
systemctl disable apache
從系統中刪除 X Windows。
X 窗口系統(也稱為 X11,或簡稱為 X)是一種用于位圖顯示的窗口系統,是類 Unix 操作系統的標準配置。它為窗口圖形用戶界面 (GUI) 環境提供了一個基本框架。CentOS、Red Hat Enterprise Linux (RHEL) 和 Fedora Linux 中包含的 X Windows 系統稱為 X.org。
大多數服務器不需要 GUI 來執行一般服務器管理任務,而其他服務器則使用管理面板。了解服務器有多少開放路徑并僅啟用您需要的路徑會很有幫助。如果已安裝 X Windows 而您的服務器不需要它,最好將其刪除。
使用此命令刪除 X Windows 系統。
yum groupremove "X Window System"
6. 保留備份
丟失關鍵信息對任何企業來說都是災難性的。幸運的是,有許多可靠的備份解決方案可用,包括可以同時支持物理和虛擬服務器的服務器備份軟件。
Liquid Web 提供多種備份選項。一些工具允許您快速執行和自動化備份和恢復率,并輕松監控備份配置文件以避免數據丟失。制定備份計劃時,最佳做法是使用備份保留的 3-2-1 規則。
3-2-1 規則

三:創建數據的三個副本。這些副本應包括一份主副本和兩份備份。
二:將數據副本存儲在至少兩種不同類型的存儲介質上。您可以將一份副本存儲在本地硬盤驅動器上,將另一份副本存儲在外部驅動器、網絡附加存儲 (NAS) 或本地保存的存儲服務器上。
一:異地存儲一份數據副本。此選項可以是位于其他位置的存儲服務器,也可以是托管提供商提供的云存儲解決方案。
7.用戶管理
監控登錄嘗試
主機入侵檢測系統 (HIDS) 是一種監視設備和網絡是否存在可疑活動的應用程序。它檢查內核日志中訪問的文件、使用的應用程序和數據。網絡入侵檢測系統 (NIDS) 是一種監控網絡流量是否存在可疑活動的應用程序。它評估網絡內設備之間的數據流。HIDS 用于更全面的解決方案,NDIS 用于基于局域網 (LAN) 的解決方案。
這是 HIDS 的列表:
- 奧賽克
- Wazuh(OSSEC 的一個分支,提供更高的可靠性和可擴展性)
- 絆線
- 薩溫
- 安全洋蔥
NIDS 和 HIDS 可以結合使用,形成一個堅實而全面的入侵檢測系統策略。一些建議包括:
- 打鼾
- 最小值
- 澤克
- OpenWIPS-ng
- 學校b
限制用戶權限
為確保只有需要的用戶才能訪問關鍵系統,請將他們擁有的權限集限制為 644 或 444(文件)和 755(文件夾)。

執行用戶測試
設置一個特定的日期來執行安全審計,并在它到來之前通知用戶。定義您的期望,并讓他們對任何發現的缺陷負責。
持續的安全培訓
發送每月提醒并每三個月進行一次培訓,在多個領域(電子郵件、網絡和物理)進行為期六個月的試運行,并跟蹤失敗以改進這些領域并增加額外的培訓。
旅行安全
安全不僅僅止于您企業的前門。為出差的員工設置安全參數培訓在當今世界是一個明智的選擇,在許多公司完全遠程或為某些部門安排遠程周的情況下更是如此。
8. 使用 SELinux
SELinux 是一個基于內核的安全模塊,它提供了一種機制來支持訪問控制安全策略,包括強制訪問控制 (MAC)。它主要用作調整訪問控制要求的手段。
使用 SELinux,您可以指定進程或用戶可以做什么。它可以將操作限制在其域內,因此操作只能從允許的域與特定文件類型或其他進程進行交互。
SELinux 可以存在于以下三種可能模式中的任何一種:
- 執行 - SELinux 主動執行定義的策略。
- 許可 - 主要用于測試。未應用執行但已記錄。
- 禁用 - 系統處于非活動狀態。
9. 意識和教育
如果您不知道要尋找什么或不知道要問什么問題,那么重要的事情就會被忽視。雖然您無需成為安全專家也能受到保護,但您必須意識到試圖損害您的業務的危險。
一個常見的誤解是完全托管的服務器產品是您需要的所有安全性。但是,托管服務提供商會與您和您的團隊合作以確保您的環境安全。托管提供商確保硬件、網絡和設施的安全,但您的數據是您的責任。您和您的團隊必須就常見的安全問題以及如何保護您的網站和應用程序免受這些問題進行自我教育。
10. 保護文件系統
有幾個步驟可以保護服務器文件系統。對于初學者,始終將具有用戶可寫目錄的文件系統掛載在單獨的分區上。此外,使用您選擇的文本編輯器在/etc/fstab文件中使用nosuid、nodev和noexec 。
以下是一些需要注意的附加設置:
將/boot設置為只讀
確保/boot文件夾默認設置為 RW 模式,盡管僅用于讀取或加載模塊和內核。使用以下命令來完成此操作。
/dev/sda1 /boot ext2 defaults ro 1 2
另外,在/etc/fstab文件中將/boot設置為只讀。
禁用從可移動媒體啟動
此設置是可選的,具體取決于您的服務器使用情況。要禁用從可移動媒體啟動,您需要修改 bios 設置以禁用從可移動媒體(如 U 盤)啟動。
設置 GRUB 引導加載程序密碼
如果有人可以物理訪問服務器,他們就可以進入它。攻擊者和服務器訪問之間的另一堵墻是在 GRUB 引導加載程序上設置密碼。您可以通過設置密碼來限制訪問來實現此目的。首先,備份當前的grub.conf文件。
root@host ~# cp /etc/grub.conf /etc/grub.conf.bak
接下來,生成安全密碼。創建一個文件,然后使用grub-md5-crypt命令創建密碼。然后系統將提示您輸入密碼兩次。然后,將創建的密碼從安全文件復制到grub.conf文件中。
root@host ~# touch secure root@host ~# grub-md5-crypt > secure
在此之后,復制密碼并將其粘貼到grub.conf文件中第一行之后(在 RedHat 中),如下所示。然后,保存并退出文件。
splashimage=(hd0,0)/grub/splash.xpm.gz password --md5 JnK!xdBep53lt1NVk@K6wb!js%!HEI#^
您將需要重新啟動服務器以使更改生效。
進入單用戶模式前提示輸入根密碼
如果惡意行為者可以物理訪問服務器,則他們可以通過按e鍵從 GRUB 菜單項中選擇要引導到的特定內核。此操作允許某人編輯第一個引導選項以啟用引導到單用戶模式而無需輸入密碼。
您的系統應該配置為在進入單用戶模式之前提示輸入 root 密碼,以限制可能的利用。按照設置 GRUB 引導加載程序密碼部分中概述的說明完成此任務。
最后的想法
安全是一個共同的問題。遵循這些服務器安全最佳實踐并與您的托管服務提供商合作。所有這些都為您的服務器環境提供了蓬勃發展所需的安全性。雖然本文有助于您結束安全交易,但尋找可靠的托管服務提供商是另一個挑戰。