Linux 服务器加固清单
15 分钟阅读 - 2026年5月8日

加固 Linux 服务器的分步核对表。涵盖 SSH、防火墙、打补丁、文件权限、SELinux/AppArmor 和审计日志
Linux 服务器加固清单
默认的 Linux 安装不是安全的 Linux 安装。错误配置(如开放 SSH 根访问权限、防火墙薄弱和未打补丁软件)是造成漏洞的主要原因。新服务器上线后几分钟内就会面临自动扫描,因此加固工作应先行一步。
这份清单涵盖了核心步骤:锁定 SSH、配置防火墙、打补丁、收紧文件权限、启用强制访问控制和设置审计日志。
锁定 SSH
SSH 是您的主要访问点,也是攻击者首先探查的对象。默认配置(密码验证、root 登录、端口 22)正是自动扫描程序所寻找的。
生成 Ed25519 密钥对,它比 RSA 提供了更好的安全性和性能:
ssh-keygen -t ed25519一旦基于密钥的登录成功,更新/etc/ssh/sshd_config:
PasswordAuthentication no
ChallengeResponseAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
AllowUsers yourname
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2将默认端口从 22 改为不那么明显的端口。这并不能阻止有决心的攻击者,但可以大大减少自动扫描的噪音。
在关闭当前会话前,请务必从第二个终端测试更改。运行sudo sshd -t检查语法错误,然后运行systemctl reload sshd进行应用,同时不中断活动连接。
添加双因素身份验证
2FA 意味着攻击者需要同时获得你的 SSH 密钥和设备的物理访问权限。安装 Google Authenticator PAM 模块:
sudo apt install libpam-google-authenticator # Debian/Ubuntu
sudo dnf install google-authenticator # RHEL/Fedora为每个用户运行google-authenticator,生成密钥和恢复密码。离线存储恢复密码。
在/etc/pam.d/sshd 中添加此行:
auth required pam_google_authenticator.so然后更新/etc/ssh/sshd_config:
KbdInteractiveAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive测试时保持打开活动会话。TOTP 代码取决于准确的系统时间,因此请确保 NTP 正在运行。
配置防火墙和 Fail2Ban
即使服务器位于网络防火墙之后,也要运行基于主机的防火墙。原则很简单:默认情况下拒绝所有进入的流量,然后只允许需要的流量。
适用于Ubuntu/Debian(UFW):
ufw default deny incoming
ufw default allow outgoing
ufw limit ssh
ufw enable用于RHEL/Rocky/AlmaLinux(Firewalld):
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=https
firewall-cmd --reload将这些内容添加到/etc/sysctl.conf 中,对内核网络协议栈进行加固:
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1安装 Fail2Ban
Fail2Ban 可监控登录尝试,并在多次失败后封禁 IP。创建/etc/fail2ban/jail.local(不要直接编辑jail.conf,更新会覆盖它),并将其配置为在 10 分钟内尝试登录三次失败后禁止 IP 一小时。为防火墙设置正确的后端(banaction = ufw或banaction = nftables)。
审计服务并删除遗留协议
使用ss -tlnp检查正在监听的服务,使用systemctl list-units --type=service --state=running 检查正在运行的服务。禁用任何你不需要的功能:蓝牙、CUPS、avahi-daemon、rpcbind。
删除以明文传输数据的传统协议:
| 传统协议 | 端口 | 安全替代方案 |
|---|---|---|
| 远程登录 | 23 | SSH |
| RSH / Rlogin | 512, 513, 514 | SSH |
| FTP | 21 | SFTP / FTPS |
| TFTP | 69 | SFTP / SCP |
| NIS | 可变 | LDAP / Kerberos |
在 Debian/Ubuntu 上:sudo apt-get --purge 删除 xinetd nis tftpd telnetd rsh-server。在基于 RHEL 的系统上:yum erase xinetd ypserv tftp-server telnet-server rsh-server。使用ss -tulpn 验证删除。
打补丁和自动更新
更新系统是弥补已知安全漏洞的最快方法。配置后立即运行更新:
apt update && apt upgrade -y # Debian/Ubuntu
dnf update -y # RHEL/Rocky然后自动运行安全补丁。在 Debian/Ubuntu 上,安装unattended-upgrades,并将其配置为仅应用安全补丁。在 RHEL/Rocky 上,安装dnf- automatic,并在/etc/dnf/automatic.conf 中设置upgrade_type = security。
设置更新结果的电子邮件通知。禁用生产服务器上的自动重启(Automatic-Reboot = false),以便在计划维护窗口期间重启。对于高运行时间环境,可考虑使用Canonical Livepatch(Ubuntu) 或kpatch(RHEL)进行实时修补。
加固文件系统和权限
首先审计 SUID 和 SGID 二进制文件。这些文件以提升的权限运行,是被利用的主要目标:
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -ls收紧关键文件的权限:/etc/shadow应为600,/ etc/passwd应为644,/etc/ssh/sshd_config应为600。在/etc/profile中设置全局umask为027,以防止新文件被世界读取。
使用find / -xdev -type f -perm -0002 -ls 查找并修复世界可写文件。对于必须保持世界可写的目录(如/tmp),应用粘性位:chmod 1777 /tmp。
安全挂载选项
编辑/etc/fstab以限制关键分区上可能发生的情况:
| 分区 | 挂载选项 | 用途 |
|---|---|---|
/tmp | nodev、nosuid、noexec | 防止在世界可写入区域执行恶意软件 |
/var/tmp | nodev、nosuid、noexec | 保护措施与 /tmp 相同 |
/dev/shm | nodev、nosuid、noexec | 保护共享内存 |
/home | nodev, nosuid | 阻止设置二进制文件和设备节点 |
/var/log | nodev、nosuid、noexec | 保护日志完整性 |
在重启前使用mount -o remount测试更改,以避免出现启动问题。
启用强制访问控制
SELinux 和 AppArmor 增加了内核级限制,规定进程可以做什么。请使用您的发行版附带的功能:RHEL/CentOS/Fedora 使用 SELinux,Ubuntu/Debian/SUSE 使用 AppArmor。在它们之间切换会导致兼容性问题。
SELinux:使用getenforce 检查状态。以允许模式(setenforce 0)启动至少两周,以便在不破坏任何东西的情况下捕捉工作负载行为。使用ausearch -m avc -ts recent 监控违规行为。使用audit2why诊断阻塞,使用audit2allow -M [module_name]创建策略模块。清除日志后,使用setenforce 1 切换到强制执行,然后在/etc/selinux/config 中将其永久化。
AppArmor:使用aa-status 检查活动配置文件。为管理命令安装apparmor-utils。使用aa-complain 以投诉模式启动配置文件,一旦有把握,再使用aa-enforce转为强制模式。使用aa-genprof为自定义应用程序构建配置文件。
设置审计日志和监控
没有日志记录,事件就不会留下痕迹。安装auditd:
sudo apt-get install auditd audispd-plugins为关键文件添加文件系统监控:
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity跟踪所有 root 级命令的执行情况:
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands使用augenrules --load加载规则,并在规则文件末尾添加-e 2,以防止配置被篡改(更改后需要重启)。
使用 AIDE 监控文件完整性
AIDE 通过将当前状态与已知良好基线进行比较,检测未经授权的文件更改。安装AIDE,使用aideinit 初始化数据库,并将生成的文件移至/var/lib/aide/aide.db.gz。设置每天运行aide --check 的cron 作业,并将结果通过电子邮件发送给管理员。
集中管理日志
如果拥有 root 访问权限的攻击者删除了本地日志,那么这些日志将毫无用处。使用带有 TLS 加密功能的 rsyslog,实时将日志转发到远程服务器。添加到/etc/rsyslog.conf 中:
*.* @@remote-host:514在 SSH 配置中设置LogLevel VERBOSE,以便日志中包含每次成功登录的密钥指纹。对于管理多个服务器的生产环境,Wazuh或OSSEC等工具可通过集中日志分析提供基于主机的入侵检测。
持续维护
加固不是一次性任务。配置会发生变化,新的漏洞会出现,人员变动会留下孤儿账户。
每周一次:查看 Fail2Ban 日志,检查更新是否失败,验证备份。
每月一次:审核用户账户和权限,检查运行中的服务,使用Lynis或OpenSCAP 进行全面扫描。
每季度轮换凭证、更新防火墙规则、测试灾难恢复。
使用基础设施即代码工具(如带有dev-sec.io加固角色的 Ansible)在整个机群中执行一致的配置,并防止审计之间的偏移。
FDC 的专用服务器为您提供完全 root 访问权限,让您完全控制安全堆栈。探索专用服务器选项,在您可以控制每一层的平台上进行构建。

厌倦了缓慢的部署或带宽限制?FDC Servers 提供即时的专用电源、全球覆盖和灵活的计划,适合任何规模。
立即升级
iperf3 教程:在 Linux 和 Windows 上测试网络速度
10 分钟阅读 - 2026年5月7日