刚部署完Ubuntu服务器,千万别急着上线业务。一个未加固的服务器,就像家门没锁的房子,分分钟可能被入侵。直接开始行动,以下是十个必须立即执行的初始安全加固步骤。
第一步:立即更新系统与软件包
新安装的系统往往存在已知漏洞。你的首要任务是更新软件源并升级所有软件包。打开终端,依次执行以下命令。这能确保你获得最新的安全补丁。
sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y
建议配置自动安全更新。安装unattended-upgrades包并进行配置,让系统在后台自动安装重要的安全更新,无需手动干预。
第二步:创建具有sudo权限的新用户,禁用root直接登录
永远不要直接用root账户进行日常操作。创建一个新的个人账户,并赋予其sudo权限。首先创建用户:sudo adduser yourusername。然后将其加入sudo组:sudo usermod -aG sudo yourusername。接下来,至关重要的一步是禁止root用户通过SSH登录。编辑SSH配置文件:sudo nano /etc/ssh/sshd_config,找到PermitRootLogin这一行,将其改为PermitRootLogin no。保存后重启SSH服务:sudo systemctl restart sshd。此后所有管理操作都通过新用户使用sudo执行。
第三步:配置SSH密钥认证并更改默认端口
密码登录易受暴力破解攻击。更安全的方式是使用SSH密钥对。在你的本地电脑生成密钥对(如果还没有):ssh-keygen -t rsa -b 4096。然后将公钥上传到服务器:ssh-copy-id yourusername@server_ip。再次编辑/etc/ssh/sshd_config文件,确保以下设置:PasswordAuthentication no,PubkeyAuthentication yes。同时,修改默认的22端口可以显著减少自动化扫描攻击。找到Port 22行,在其下方添加一个新端口,例如Port 2222。务必在防火墙中开放新端口,并测试连接成功后再禁用22端口。
第四步:配置防火墙(UFW)
Ubuntu默认的简易防火墙UFW是你的第一道防线。首先启用它:sudo ufw enable。默认策略应设为拒绝所有传入连接,允许所有传出连接。然后,只开放必要的端口。例如,如果你将SSH端口改为2222,则运行sudo ufw allow 2222/tcp。如果运行Web服务器,开放80和443端口:sudo ufw allow 80,443/tcp。使用sudo ufw status verbose查看当前规则。记住,任何新服务的端口都需要手动在此放行。
第五步:安装并配置Fail2ban
Fail2ban是防御暴力破解的利器。它会监控系统日志,当发现来自同一IP的多次失败登录尝试时,自动将其IP加入防火墙黑名单一段时间。安装命令:sudo apt install fail2ban -y。其配置文件在/etc/fail2ban/jail.local(通常通过复制默认文件修改)。你需要针对SSH服务进行配置,设置封禁时间(bantime)、查找时间窗口(findtime)和最大失败次数(maxretry)。启用后,它能极大增加攻击者的入侵成本。
第六步:禁用不必要的服务和端口
系统默认安装的服务可能你并不需要,每一个都是潜在的攻击面。使用sudo systemctl list-unit-files --type=service查看所有服务。对于像apache2、nfs-server、bluetooth等明确用不到的服务,果断禁用:sudo systemctl disable --now servicename。同时,使用sudo ss -tulpn或sudo netstat -tulpn命令检查所有监听的网络端口,确保每一个都是你知晓并需要的。
第七步:配置系统审计与日志监控
完善的日志是你事后追溯和发现异常的眼睛。确保rsyslog服务正在运行。可以安装auditd框架进行更详细的内核级审计,记录文件访问、系统调用等关键事件。更重要的是,不要只记录不查看。将关键日志(如/var/log/auth.log、/var/log/syslog)配置为定期发送到一台独立的、更安全的日志服务器,这能防止攻击者篡改或删除本地日志来掩盖痕迹。
第八步:设置文件系统权限与敏感文件加固
错误的文件权限是常见的安全漏洞。遵循最小权限原则。关键系统配置文件,如/etc/passwd、/etc/shadow、/etc/ssh/sshd_config等,应确保权限正确(例如,shadow文件权限应为640)。可以使用sudo chmod和sudo chown命令进行调整。另外,考虑使用文件系统属性增加额外保护,例如使用sudo chattr +i /etc/passwd命令将文件设置为不可修改(需谨慎,解除使用-i)。
第九步:配置内核安全参数(sysctl)
通过调整内核网络参数,可以缓解多种网络攻击。编辑/etc/sysctl.conf文件,添加或修改以下行,可以增强对SYN洪水攻击、IP欺骗等的防护:
net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.conf.all.accept_source_route = 0 net.ipv6.conf.all.accept_source_route = 0
保存后,运行sudo sysctl -p使配置立即生效。
第十步:定期安全审计与漏洞扫描
安全加固不是一劳永逸的。你需要定期检查。安装并运行像lynis这样的开源安全审计工具:sudo apt install lynis -y,然后执行sudo lynis audit system。它会给出详细的检查报告和优化建议。此外,使用clamav进行恶意软件扫描,并考虑使用rkhunter或chkrootkit来排查rootkit。将这些审计任务加入cron计划任务,实现定期自动检查。
完成以上十个步骤,你的Ubuntu服务器已经具备了坚实的安全基础。但这只是开始。安全的本质是持续的过程,而非一次性任务。务必保持系统和应用软件的更新,定期审查日志和用户账户,并对所有新上线的服务进行同样的安全评估。将这套流程固化为你的服务器部署标准操作程序,是确保线上业务稳定运行的关键。
