20 个 CentOS 服务器加固安全技巧

admin11个月前笔记113

image.png

本教程仅涵盖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,请遵循我们的有用指南:


  1. 在 Linux 中使用 LVM 设置磁盘存储

  2. 使用 vgcreate、lvcreate 和 lvextend 创建 LVM 磁盘

  3. 将多个磁盘组合成一个大型虚拟存储

  4. 在 Linux 中使用两个磁盘创建 RAID 1


7. 修改 fstab 选项以保护数据分区

通过将以下选项添加到 fstab 文件来分隔用于存储数据的分区,并防止在这些类型的分区上执行程序、设备文件或 setuid 位,如下图所示摘抄:

/dev/sda5 	 /nas          ext4    defaults,nosuid,nodev,noexec 1 2

为防止权限提升和任意脚本执行,为 /tmp 创建一个单独的分区并将其挂载为 nosuidnodev 和 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.加密传输数据

不要使用不安全的协议进行远程访问或文件传输,例如 TelnetFTP 或其他纯文本高级协议,例如 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 攻击。


相关文章

了解php中session垃圾回收机制

了解php中session垃圾回收机制

1、php中session的生成机制我们先来分析一下PHP中是怎么生成一个session的。设计出session的目的是保持每一个用户的各种状态来弥补HTTP协议的不足(无状态)。我们现在有一个疑问,...

慎用Linux find命令

慎用Linux find命令

当使用 Linux 下的 find 命令时,请使用 -ok 选项来避免文件被意外删除,这个选项会在移除任何文件之前都会请求你的许可。最近有朋友提醒我有一个有用的选项来更加谨慎地运行 find...

教你快速了解一台Linux系统服务器的方法

教你快速了解一台Linux系统服务器的方法

对于生物信息工作者而言,Linux系统服务器最熟悉不过,那么如何通过简单的命令对Linux服务器进行最快的了解。【存储空间】df -hdf命令作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘...

Linux检查硬件错误工具—mcelog命令

安装[root@RedHat_test ~]# yum install mcelog.x86_64mcelog的启动方式cron : 最老的方式,有确定,定时任...

深入的理解UDP编程

深入的理解UDP编程

什么是UDP?UDP是User Datagram Protocol(用户数据报协议)的缩写,它是一个简单的协议,简单到UDP规范RFC0768只有区区3页。UDP是工作在IP层之上的传输层协议,UDP...

看完这篇文章,还不懂nginx,算我输

看完这篇文章,还不懂nginx,算我输

1. Nginx产生~Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。