保护您的服务器以防止数据丢失或安全危害非常重要。因为安全对许多人来说是一个极具挑战性的主题,所以它常常被忽视。当问题出现时,许多人都没有意识到。通过遵循这些最佳实践,您可以显着降低被恶意行为者破坏的风险。
服务器安全最佳实践
1.服务器管理
正确的服务器管理可确保所有活动继续满足组织标准并保持服务器运营的最佳性能。这包括聘请合格的系统管理员和实施物理和内部安全措施。
2. 人身安全
实施物理安全控制有助于防止未经授权的人员物理访问路由器、配线柜和服务器等组件。通过物理访问控制 (PAC) 进行的受控访问,例如锁、生物识别身份验证和徽章等其他设备,在任何组织中都是必不可少的。
传统门和锁是物理访问控制系统的最基本形式,但企业级物理访问控制系统更进一步。访问控制在建筑物的某些区域可能更严格,例如具有公共访问区域和限制访问区域的组织。
维护凭证数据库并删除任何已停用的用户是一种安全最佳做法。此外,添加不同类型的 PAC 是一个很好的公式,可以更安全地控制对企业中易受攻击或重要部门的物理访问。
3.更新软件和操作系统
保持软件和操作系统 (OS) 的更新周期是您可以为服务器采取的最重要的安全预防措施。更新范围从关键漏洞补丁到小错误修复。许多软件漏洞在公开时都会被修补,这增加了用户安装更新的紧迫性。
由于服务器系统往往与软件环境有着复杂的关系,因此故障可能会被忽视。未能及时更新服务器上的操作系统和任何其他软件将不可避免地使其面临常见漏洞。企业必须计划在合理的时间内执行定期更新和补丁以维护安全。
4. 安全连接
当需要通过命令行(终端)访问服务器时,请使用安全外壳 (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 引导加载程序密码部分中概述的说明完成此任务。
最后的想法
安全是一个共同的问题。遵循这些服务器安全最佳实践并与您的托管服务提供商合作。所有这些都为您的服务器环境提供了蓬勃发展所需的安全性。虽然本文有助于您结束安全交易,但寻找可靠的托管服务提供商是另一个挑战。