本教程仅涵盖CentOS 8/7 的一般安全提示,可用于加固系统。清单提示主要用于各种类型的裸机服务器或提供网络服务的机器(物理或虚拟)。
然而,一些技巧也可以成功应用于通用机器,例如台式机、笔记本电脑和卡片大小的单板计算机 (Raspberry Pi)。
要求
CentOS 8 最小安装
CentOS 7 最小安装
1. 身体防护
锁定您的服务器机房访问权限,使用机架锁定和视频监控。考虑到对服务器机房的任何物理访问都可能使您的机器面临严重的安全问题。
BIOS 密码可以通过重置主板上的跳线或断开 CMOS 电池来更改。此外,入侵者可以窃取硬盘或直接将新硬盘连接到主板接口(SATA、SCSI 等),使用 Linux live 发行版启动,并克隆或复制数据而不留下任何软件痕迹。
2. 减少间谍影响
对于高度敏感的数据,您可能应该使用高级物理保护,例如将服务器放置并锁定在 TEMPEST 解决方案中,以最大限度地减少通过无线电或漏电辐射监视系统的影响。
3. 安全 BIOS/UEFI
通过保护 BIOS/UEFI 设置开始强化您的机器,特别是设置 BIOS/UEFI 密码并禁用启动媒体设备(CD、DVD、禁用 USB 支持)为了防止任何未经授权的用户修改系统 BIOS 设置或更改引导设备优先级并从备用介质引导机器。
为了将这种类型的更改应用于您的机器,您需要查阅主板制造商手册以获取特定说明。
4.安全引导加载程序
设置一个 GRUB 密码以防止恶意用户篡改内核启动顺序或运行级别、编辑内核参数或将系统启动到单用户模式以损害您的系统并重置根目录获得特权控制的密码。
5.使用单独的磁盘分区
在用作生产服务器的系统上安装 CentOS 时,为系统的以下部分使用专用分区或专用硬盘:
/(root) /boot /home /tmp /var
6. 使用 LVM 和 RAID 实现冗余和文件系统增长
/var 分区是将日志消息写入磁盘的地方。在暴露网络服务(例如 Web 服务器或文件服务器)的高流量服务器上,系统的这一部分的大小可能呈指数级增长。
因此,为 /var 使用大分区或考虑使用逻辑卷 (LVM) 设置此分区,或将多个物理磁盘组合成一个更大的虚拟 RAID 0 设备以维持大数据量。对于数据,冗余考虑在 RAID 1 级别上使用 LVM 布局。
要在磁盘上设置 LVM 或 RAID,请遵循我们的有用指南:
在 Linux 中使用 LVM 设置磁盘存储
使用 vgcreate、lvcreate 和 lvextend 创建 LVM 磁盘
将多个磁盘组合成一个大型虚拟存储
在 Linux 中使用两个磁盘创建 RAID 1
7. 修改 fstab 选项以保护数据分区
通过将以下选项添加到 fstab 文件来分隔用于存储数据的分区,并防止在这些类型的分区上执行程序、设备文件或 setuid 位,如下图所示摘抄:
/dev/sda5 /nas ext4 defaults,nosuid,nodev,noexec 1 2
为防止权限提升和任意脚本执行,为 /tmp 创建一个单独的分区并将其挂载为 nosuid、nodev 和 noexec 。
/dev/sda6 /tmp ext4 defaults,nosuid,nodev,noexec 0 0
8. 使用 LUKS 在块级加密硬盘
为了保护敏感数据在物理访问机器硬盘驱动器的情况下被窥探。我建议您通过阅读我们的文章 Linux Hard Disk Data Encryption with LUKS 来学习如何加密磁盘。
9. 使用 PGP 和公钥加密
为了加密磁盘,请使用 PGP 和公钥加密或 OpenSSL 命令使用密码加密和解密敏感文件,如本文配置加密的 Linux 系统存储中所示。
10. 只安装所需的最少数量的包
避免安装不重要或不必要的程序、应用程序或服务以避免软件包漏洞。这可以降低软件的危害可能导致危害其他应用程序、系统部分甚至文件系统的风险,最终导致数据损坏或数据丢失。
11.经常更新系统
定期更新系统。通过发出以下命令,使 Linux 内核与最新的安全补丁保持同步,并使所有已安装的软件与最新版本保持同步:
# yum update
12. 禁用 Ctrl+Alt+Del
为了防止用户在物理访问键盘或通过远程控制台应用程序或虚拟化控制台(KVM,虚拟化软件界面)后重新启动服务器,您应该禁用 Ctrl+Alt +Del
键序列通过执行以下命令。
# systemctl mask ctrl-alt-del.target
13.删除不需要的软件包
安装机器所需的最少软件。切勿安装额外的程序或服务。仅从可信或官方存储库安装软件包。如果机器注定要作为服务器运行其整个生命周期,请使用系统的最小安装。
使用以下命令之一验证已安装的软件包:
# rpm -qa
制作所有已安装软件包的本地列表。
# yum list installed >> installed.txt
查询无用软件列表并通过发出以下命令删除软件包:
# yum remove package_name
14. 守护进程更新后重启 Systemd 服务
使用以下命令示例重新启动 systemd 服务以应用新更新。
# systemctl restart httpd.service
15.删除不需要的服务
使用以下 ss 命令识别在特定端口上侦听的服务。
# ss -tulpn
要列出所有已安装的服务及其输出状态,请发出以下命令:
# systemctl list-units -t service
例如,CentOS 默认的最小安装附带默认安装的 Postfix 守护进程,它以主机名在端口 25 下运行。删除 Postfix 网络服务,以防您的机器不用作邮件服务器。
# yum remove postfix
16.加密传输数据
不要使用不安全的协议进行远程访问或文件传输,例如 Telnet、FTP 或其他纯文本高级协议,例如 SMTP、HTTP、NFS 或 SMB,这些协议通过默认情况下,不加密身份验证会话或发送的数据。
仅使用 scp 进行文件传输,使用 SSH 或 VNC over SSH 隧道进行远程控制台连接或 GUI 访问。
为了通过 SSH 隧道连接 VNC 控制台,请使用以下示例,该示例将 VNC 端口 5901 从远程计算机转发到您的本地计算机:
# ssh -L 5902:localhost:5901 remote_machine
在本地计算机上运行以下命令以虚拟连接到远程端点。
# vncviewer localhost:5902
17.网口扫描
通过 LAN 从远程系统使用 Nmap 工具执行外部端口检查。这种类型的扫描可用于验证网络漏洞或测试防火墙规则。
# nmap -sT -O 192.168.1.10
18.包过滤防火墙
使用firewalld 实用程序保护系统端口,打开或关闭特定服务端口,尤其是众所周知的端口(<1024)。
通过发出以下命令安装、启动、启用和列出防火墙规则:
# yum install firewalld # systemctl start firewalld.service # systemctl enable firewalld.service # firewall-cmd --list-all
19. 使用 Tcpdump 检查协议数据包
使用 tcpdump 实用程序在本地嗅探网络数据包并检查其内容是否存在可疑流量(源-目标端口、TCP/IP 协议、第二层流量、异常 ARP 请求)。
要更好地分析 tcpdump 捕获的文件,请使用更高级的程序,例如 Wireshark。
# tcpdump -i eno16777736 -w tcpdump.pcap
20. 防止 DNS 攻击
检查解析器的内容,通常是 /etc/resolv.conf 文件,它定义了应该用来查询域名的 DNS 服务器的 IP 地址,以避免中间人-中间攻击、根 DNS 服务器的不必要流量、欺骗或创建 DOS 攻击。