本文以 Ubuntu 22.04/24.04 LTS 和 CentOS 7/8/Stream 为例,系统性地介绍 Linux 服务器安全加固的各个环节,覆盖从初始配置到持续监控的完整安全实践。
一、引言 随着网络安全威胁日益增多,Linux 服务器的安全加固已成为运维工作的重中之重。无论是部署在云上的生产环境,还是本地的实验服务器,都应遵循”最小权限、纵深防御”的原则进行安全配置。
二、初始系统配置 2.1 系统更新 第一时间确保系统所有软件包处于最新版本:
1 2 3 4 5 6 sudo apt update && sudo apt upgrade -ysudo yum update -y sudo dnf upgrade -y
2.2 创建普通用户并禁用 root 直接登录 1 2 3 4 5 6 7 8 9 sudo adduser xinyusudo usermod -aG sudo xinyu sudo usermod -aG wheel xinyu su - xinyu sudo whoami
三、SSH 安全加固 SSH 是服务器最常暴露的服务,也是最容易受到攻击的入口。
3.1 修改默认端口 将 SSH 端口从默认的 22 改为高位端口,减少自动化扫描攻击。
1 2 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.baksudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
3.2 禁用 root 登录和密码认证 1 2 3 4 5 6 7 8 9 10 11 12 sudo vim /etc/ssh/sshd_configPermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2
3.3 配置 SSH 密钥登录 1 2 3 4 5 ssh-keygen -t ed25519 -C "xinyu@server" ssh-copy-id -p 2222 xinyu@your-server-ip
3.4 配置 AllowUsers 白名单
修改完成后重启 SSH 服务:
1 2 sudo systemctl restart sshd sudo systemctl restart sshd
重要:在断开当前连接前,务必另开一个终端验证新配置是否工作正常!
四、防火墙配置 4.1 ufw(Ubuntu 推荐) 1 2 3 4 5 6 7 8 9 10 11 12 sudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 2222/tcp comment 'SSH' sudo ufw allow 80/tcp comment 'HTTP' sudo ufw allow 443/tcp comment 'HTTPS' sudo ufw enable sudo ufw status verbose
4.2 firewalld(CentOS/RHEL 推荐) 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo yum install firewalld -ysudo systemctl enable --now firewalldsudo firewall-cmd --permanent --add-port=2222/tcpsudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --permanent --remove-service=sshsudo firewall-cmd --reloadsudo firewall-cmd --list-all
场景 推荐工具 说明
Ubuntu 个人/轻量服务器 ufw 配置简单,上手快
CentOS/RHEL 企业服务器 firewalld 支持区域策略和丰富的网络环境
Docker 宿主机 iptables + Docker 网络策略 需额外配置 Docker 与防火墙协同
云服务器(云防火墙) 云厂商安全组 服务器内可配合 iptables 做二次加固
五、Fail2Ban 入侵防御 Fail2Ban 能自动分析日志并将恶意 IP 加入防火墙黑名单。
5.1 安装与基本配置 1 2 3 4 5 6 7 8 9 sudo apt install fail2ban -ysudo yum install epel-release -ysudo yum install fail2ban -ysudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
5.2 配置 SSH 防护 编辑 /etc/fail2ban/jail.local,找到 [sshd] 部分:
1 2 3 4 5 6 7 8 9 [sshd] enabled = true port = 2222 filter = sshdlogpath = /var/log/auth.log maxretry = 3 bantime = 86400 findtime = 600
5.3 启动服务 1 2 sudo systemctl enable --now fail2bansudo fail2ban-client status sshd
六、SELinux / AppArmor 6.1 SElinux(CentOS/RHEL) 检查 SELinux 状态并设置为强制模式:
1 2 3 4 5 6 7 8 getenforce sudo setenforce 1sudo sed -i 's/SELINUX=disabled/SELINUX=enforcing/' /etc/selinux/config
6.2 AppArmor(Ubuntu) 1 2 3 4 5 6 7 8 sudo aa-statussudo apt install apparmor-utils -ysudo aa-enforce /path/to/profile
七、系统审计与日志 7.1 auditd 审计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sudo apt install auditd -y sudo yum install audit -y sudo systemctl enable --now auditdsudo auditctl -w /etc/passwd -p wa -k passwd_changessudo auditctl -w /etc/shadow -p wa -k shadow_changessudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_configsudo auditctl -w /var/log/auth.log -p wa -k auth_logsudo ausearch -k passwd_changessudo aureport -x --summary
7.2 日志轮转配置 确保日志不会无限增长导致磁盘满:
1 2 3 4 5 6 7 8 9 10 11 12 sudo vim /etc/logrotate.d/custom/var/log/*.log { daily rotate 30 compress delaycompress missingok notifempty create 0640 root adm }
八、内核参数优化 编辑 /etc/sysctl.conf 或创建 /etc/sysctl.d/99-security.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_synack_retries = 2 net.ipv4.ip_forward = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.tcp_timestamps = 0 net.netfilter.nf_conntrack_max = 200000 net.netfilter.nf_conntrack_tcp_timeout_established = 432000
应用配置:
1 sudo sysctl -p /etc/sysctl.d/99-security.conf
九、自动安全更新 Ubuntu / Debian 1 2 3 4 5 sudo apt install unattended-upgrades -ysudo dpkg-reconfigure --priority=low unattended-upgradessudo cat /etc/apt/apt.conf.d/50unattended-upgrades
CentOS / RHEL 1 2 sudo yum install dnf-automatic -ysudo systemctl enable --now dnf-automatic.timer
十、入侵检测与文件完整性 10.1 AIDE 文件完整性检查 1 2 3 4 5 6 7 8 9 10 11 12 sudo apt install aide -y sudo yum install aide -y sudo aideinitsudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.dbsudo crontab -e0 6 * * * /usr/bin/aide --check | mail -s "AIDE Report" admin@example.com
10.2 RKHunter 检测 Rootkit 1 2 3 4 5 6 7 8 9 10 11 12 sudo apt install rkhunter -y sudo yum install rkhunter -y sudo rkhunter --updatesudo rkhunter --check --skip-keypresssudo crontab -e0 3 * * 0 /usr/bin/rkhunter --check --cronjob
十一、安全核查清单
序号 检查项 状态 操作方式
1 系统已更新至最新 ☐ apt update / dnf upgrade
2 已创建sudo用户并禁用root登录 ☐ adduser + PermitRootLogin no
3 SSH端口已修改为非默认端口 ☐ Port 2222
4 SSH已禁用密码认证 ☐ PasswordAuthentication no
5 已配置 SSH 密钥登录 ☐ ssh-keygen + ssh-copy-id
6 已启用防火墙 ☐ ufw enable / firewalld
7 已安装并配置 Fail2Ban ☐ fail2ban-client status
8 已配置日志审计(auditd) ☐ auditctl 规则
9 已启用自动安全更新 ☐ unattended-upgrades / dnf-automatic
10 已配置文件完整性检查(AIDE) ☐ aideinit + crontab
十二、附录:快速一键加固脚本 为了方便快速部署基础安全配置,以下是一段 bash 脚本,整合了上述主要步骤(请根据实际情况修改端口和用户名):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #!/bin/bash USERNAME="xinyu" SSH_PORT="2222" set -eecho "=== 1. 更新系统 ===" apt update && apt upgrade -y echo "=== 2. 创建用户 ===" adduser --disabled-password --gecos "" $USERNAME usermod -aG sudo $USERNAME echo "=== 3. 配置 SSH ===" cp /etc/ssh/sshd_config /etc/ssh/sshd_config.baksed -i "s/#Port 22/Port $SSH_PORT /" /etc/ssh/sshd_config sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config echo "AllowUsers $USERNAME " >> /etc/ssh/sshd_configsystemctl restart sshd echo "=== 4. 配置防火墙 ===" ufw default deny incoming ufw default allow outgoing ufw allow $SSH_PORT /tcp comment 'SSH' ufw allow 80/tcp comment 'HTTP' ufw allow 443/tcp comment 'HTTPS' ufw --force enable echo "=== 5. 安装 Fail2Ban ===" apt install fail2ban -y cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localsed -i 's/#ignoreip = 127.0.0.1/ignoreip = 127.0.0.1/' /etc/fail2ban/jail.local systemctl enable --now fail2ban echo "=== 6. 安装审计 ===" apt install auditd aide rkhunter -y systemctl enable --now auditd echo "=== 7. 自动安全更新 ===" apt install unattended-upgrades -y dpkg-reconfigure --priority=low unattended-upgrades echo "=== 8. 内核参数 ===" cat >> /etc/sysctl.d/99-security.conf << 'EOF' net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 EOF sysctl -p /etc/sysctl.d/99-security.conf echo "" echo "==========================================" echo " 基础安全加固完成!" echo " 请手动将所有公钥添加到 ~$USERNAME /.ssh/authorized_keys" echo " 推荐立即重启服务器:sudo reboot" echo "=========================================="
总结 Linux 服务器安全加固不是一次性工作,而是一个持续的过程。本文介绍的实践涵盖了从初始安全配置到持续监控的主要环节。核心原则是:
最小权限 — 每个服务、每个用户只获得完成任务所需的最小权限
纵深防御 — 不依赖单一安全措施,构建多层次防护
持续监控 — 部署日志审计和入侵检测,及时发现异常
及时更新 — 保持系统和软件包处于最新版本,修补已知漏洞
安全没有终点,只有持续的努力和关注。建议每季度至少进行一次安全审计,对照本文的核查清单逐项检查。
本文由AI辅助生成,内容仅供参考