Ubuntu 22.04 LTS 的服务器版本在默认安装后其实已经具备不错的基础安全性,但真正投入生产环境时,很多默认配置并不适合长期运行。比如自动更新策略、SSH 的密码登录、防火墙规则、日志轮转、内核参数等,都需要根据实际业务做调整。下面直接讲具体问题和处理方式。
更新策略与无人值守升级的取舍Ubuntu 22.04 默认启用了 unattended-upgrades,但这个默认配置只覆盖安全更新,而且有时会因为依赖问题导致服务重启或配置被覆盖。对于生产服务器,建议不要完全依赖默认的无人值守升级。可以保留安全更新自动安装,但把自动重启服务的行为关掉。编辑 /etc/apt/apt.conf.d/50unattended-upgrades,把 Unattended-Upgrade::Automatic-Reboot 设为 false,同时把 Unattended-Upgrade::Remove-Unused-Kernel-Packages 和 Remove-New-Unused-Dependencies 设为 true,这样能避免 /boot 分区被旧内核塞满。手动更新时,建议固定使用 apt full-upgrade 而不是 apt upgrade,因为内核和部分系统库的升级需要 full-upgrade 才能正确处理依赖变更。
SSH 加固:从端口到认证方式默认的 22 端口和密码登录是暴力破解的主要目标。修改 /etc/ssh/sshd_config 时,不要只改 Port,还要同时处理几个关键项。把 PermitRootLogin 设为 prohibit-password 或 no,把 PasswordAuthentication 设为 no,启用 PubkeyAuthentication yes。如果必须保留密码登录给部分用户,可以用 Match User 块单独放行,而不是全局打开。MaxAuthTries 建议设为 3,LoginGraceTime 设为 30,ClientAliveInterval 和 ClientAliveCountMax 分别设为 300 和 2,这样能及时断开空闲连接。另外,建议显式设置 AllowUsers 或 AllowGroups,只允许特定用户通过 SSH 登录,这比单纯禁用 root 更有效。改完配置后执行 sshd -t 检查语法再重启服务。
防火墙:UFW 规则要具体到接口和来源很多教程只教 ufw allow 22/tcp,但生产环境应该更细。先 ufw default deny incoming,再 ufw default allow outgoing。对于 SSH,如果公司出口 IP 固定,就 ufw allow from 203.0.113.0/24 to any port 22 proto tcp,而不是对全网开放。如果服务器上有 Web 服务,80 和 443 可以开放,但建议同时限制访问频率。UFW 本身不带速率限制,可以配合 iptables 的 limit 模块,或者在应用层做。对于数据库端口如 3306、5432、6379,绝对不要对公网开放,只允许内网网段访问。启用 UFW 前先确认当前 SSH 连接不会被切断,最好在控制台或带外管理里操作。
fail2ban 与入侵检测的配合fail2ban 在 Ubuntu 22.04 上默认的 sshd jail 就能挡住大部分扫描,但默认的 bantime 只有 10 分钟,findtime 10 分钟,maxretry 5 次,这个力度对持续扫描的僵尸网络不够。建议在 /etc/fail2ban/jail.local 里把 bantime 提高到 3600 或更高,findtime 设为 600,maxretry 设为 3。同时开启 recidive jail,对反复被封的 IP 进行长时间封禁。如果服务器上有 Nginx 或 Apache,把对应的 jail 也打开,针对 404 扫描和 PHP 漏洞探测做防护。fail2ban 的日志默认在 /var/log/fail2ban.log,定期检查能发现攻击趋势。
内核参数与网络层优化Ubuntu 22.04 默认内核参数对桌面环境更友好,服务器场景需要调整 /etc/sysctl.conf 或 /etc/sysctl.d/ 下的文件。首先是网络层安全,把 net.ipv4.conf.all.rp_filter 设为 1,开启反向路径过滤;把 net.ipv4.conf.all.accept_redirects 和 send_redirects 设为 0,防止 ICMP 重定向攻击;把 net.ipv4.tcp_syncookies 设为 1,防御 SYN Flood。性能方面,net.core.somaxconn 可以提高到 1024 或更高,net.ipv4.tcp_max_syn_backlog 设为 4096,net.ipv4.tcp_fin_timeout 降到 30,net.ipv4.tcp_tw_reuse 设为 1。对于高并发 Web 服务器,net.ipv4.ip_local_port_range 可以扩大到 1024 到 65535。改完执行 sysctl -p 生效。
文件系统与权限加固/tmp 目录经常被用来放置恶意脚本或提权工具。建议把 /tmp 挂载为独立分区或 tmpfs,并在 /etc/fstab 中加上 noexec,nosuid,nodev 选项。如果服务器内存足够,用 tmpfs 挂载 /tmp 性能更好,但要注意内存占用。对于 /var/tmp,至少加上 nosuid 和 nodev。另外,检查系统中是否有 world-writable 目录,用 find / -type d -perm -0002 2>/dev/null 找出后逐个确认是否必要。对于 /etc/shadow、/etc/gshadow 等关键文件,确认权限分别是 640 和 600,属主为 root。
日志管理与审计Ubuntu 22.04 使用 systemd-journald 和 rsyslog 双日志系统。默认 journald 的日志存储在 /run/log/journal,重启就丢失。建议在 /etc/systemd/journald.conf 里设置 Storage=persistent,把日志持久化到 /var/log/journal。同时设置 SystemMaxUse=500M 或根据磁盘大小调整,避免日志占满磁盘。rsyslog 默认会把 auth.log、syslog、kern.log 分开,但轮转策略在 /etc/logrotate.d/rsyslog 里,默认保留 4 周,生产环境建议延长到 8 周或根据合规要求调整。对于关键操作,可以用 auditd 记录文件访问和命令执行,但 auditd 的规则要谨慎配置,过多规则会拖慢系统。
服务最小化与进程隔离用 systemctl list-units --type=service --state=running 查看当前运行的服务,把不需要的停掉并禁用。Ubuntu 22.04 默认会启动一些云环境相关的服务,比如 cloud-init、snapd、ModemManager 等,如果不需要就禁用。snapd 在服务器上经常带来安全和性能问题,如果不用 snap 包,可以直接 apt purge snapd。对于必须运行的服务,考虑用 systemd 的沙箱选项做隔离。比如在服务的 unit 文件里加上 PrivateTmp=true、NoNewPrivileges=true、ProtectSystem=strict、ProtectHome=true,这些选项能显著降低服务被攻破后的影响范围。对于 Web 应用,最好用单独的 systemd 服务跑在非 root 用户下,并通过 socket 或本地端口与 Nginx 通信。
AppArmor 与强制访问控制Ubuntu 22.04 默认启用了 AppArmor,但很多管理员没有利用它。用 aa-status 查看当前加载的 profile,常见服务如 MySQL、Nginx、PHP-FPM 都有默认 profile。如果服务不在默认 profile 里,可以用 aa-genprof 生成自定义 profile。AppArmor 的 complain 模式可以先记录违规行为而不阻止,等确认规则完善后再切换到 enforce 模式。对于容器环境,AppArmor 与 Docker 或 LXD 的集成也很重要,能限制容器内进程对宿主机的访问。如果业务对安全要求极高,可以考虑 SELinux,但 Ubuntu 上 AppArmor 的维护成本更低,生态也更匹配。
定期安全审计与漏洞扫描加固不是一次性工作。建议每月至少执行一次 apt update && apt list --upgradable 检查可更新包,重点关注安全更新。可以用 debsecan 或 ubuntu-security-status 查看当前系统的安全更新状态。对于已安装的软件包,用 dpkg -l 导出清单,定期核对是否有不再使用的包。文件完整性方面,可以用 aide 或 tripwire 建立基线,定期比对关键目录的哈希值。如果发现异常,第一时间检查相关进程和网络连接,用 ss -tunlp 和 ps auxf 定位问题。对于 Web 应用,定期用 nikto 或开源漏洞扫描器做黑盒测试,但注意不要对生产环境造成压力。
备份与恢复验证安全加固的最后一道防线是备份。Ubuntu 22.04 上可以用 rsync 做增量备份,配合 tar 做全量快照。关键目录包括 /etc、/var/lib、/var/www、/home、/root,以及数据库的导出文件。备份文件要加密存储,并且定期做恢复演练。很多团队只备份不验证,真到恢复时发现备份文件损坏或权限不对。建议每季度做一次完整的恢复测试,把备份还原到一台临时服务器上,确认服务和数据都能正常启动。对于数据库,用 mysqldump 或 pg_dump 做逻辑备份,同时配合物理备份工具如 xtrabackup 或 pg_basebackup,两种方式结合更稳妥。
Ubuntu 22.04 服务器的运维优化和安全加固是一个持续的过程,上面这些措施覆盖了系统层、网络层、应用层和数据层。实际部署时,根据业务类型和合规要求选择适合的强度,不要盲目套用所有配置。关键是把变更记录下来,每次调整后观察系统日志和性能指标,确保加固没有引入新的问题。
