ubuntu生产环境需最小化安装并强化安全:禁用root远程登录、强制ssh密钥认证、限制ip白名单、卸载snap等冗余组件、启用auditd与集中日志、加固内核参数,并通过ansible或定制iso实现自动化加固。

生产环境的Ubuntu网络安装版(如ubuntu-22.04-live-server-amd64.iso)默认配置偏重易用性,未针对安全性与最小化原则优化。直接部署上线存在SSH弱策略、冗余服务、默认账户风险、日志缺失、内核参数松散等问题。加固不是“加功能”,而是“减暴露、控权限、强审计、快响应”。
基础系统精简与账户安全
安装时选择“minimal installation”,避免预装snap、lxd、cloud-init等非必需组件。安装完成后立即执行:
- 删除默认用户(如ubuntu),仅保留业务所需管理账户;新用户必须用
sudo adduser --gecos "" --disabled-password <name></name>创建,并禁用密码登录,强制使用SSH密钥 - 禁用root远程登录:
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config;同时设置AllowUsers白名单,例如AllowUsers deploy@10.10.20.* admin@192.168.1.* - 卸载无用包:
sudo apt purge snapd fwupd whoopsie apport ubuntu-report landscape-common -y && sudo apt autoremove -y;禁用snap自动更新:sudo systemctl mask snapd.service snapd.socket
SSH与防火墙硬约束
SSH是主要攻击入口,需多层收敛:
- 修改默认端口(如改为2222),并配合fail2ban限制暴力尝试:
sudo apt install fail2ban -y,启用jail.local中[sshd]段,设置maxretry = 3、bantime = 1h - 启用SSH密钥强制认证 + 二次验证(可选):在
/etc/ssh/sshd_config中确认PubkeyAuthentication yes、PasswordAuthentication no、KbdInteractiveAuthentication no;如需MFA,部署libpam-google-authenticator并绑定PAM模块 - 用
ufw替代iptables裸配:默认拒绝所有入站,仅开放加固后必需端口(如2222、443、80),并限制源IP范围:sudo ufw allow from 10.10.1.0/24 to any port 2222 proto tcp
运行时防护与日志审计
生产系统需可观测、可追溯、可阻断:
- 启用并持久化auditd:
sudo apt install auditd audispd-plugins -y,编辑/etc/audit/rules.d/custom.rules,加入关键路径监控(如-w /etc/passwd -p wa -k identity、-w /bin/su -p x -k priv_esc),重启auditd生效 - 集中日志外发:配置rsyslog将auth.log、syslog、audit.log通过TLS推送到SIEM(如Graylog或ELK),本地保留7天,防止攻击者清日志:
$ActionFileDefaultTemplate RSYSLOG_ForwardFormat+*.* @@logserver:514;RSYSLOG_SyslogProtocol23Format - 启用内核级防护:在
/etc/sysctl.conf中添加net.ipv4.conf.all.rp_filter=1(反向路径过滤)、kernel.kptr_restrict=2(隐藏内核指针)、vm.swappiness=1(降低swap泄露风险),执行sudo sysctl -p
自动化加固与预装脚本封装
人工逐条操作易错漏,建议将上述逻辑固化为幂等脚本,集成进CICD或Packer镜像构建流程:
- 用Ansible role统一管理:定义
ubuntu-hardening角色,包含user、ssh、firewall、audit、sysctl等task文件,支持变量控制(如allowed_ssh_cidrs、admin_users) - 制作定制ISO(可选):基于
ubuntu-server源ISO,用mkisofs注入preseed.cfg + 自定义shell脚本,在安装末期自动执行加固命令(注意避开cloud-init干扰) - 部署后校验:提供
check-hardening.sh脚本,检查SSH配置、ufw状态、audit规则加载、关键包卸载情况,输出PASS/FAIL清单,供CI门禁或运维巡检使用










