安全基线配置速查:Ubuntu Server 22.04
安全基线配置速查:Ubuntu Server 22.04
前言:
受够了那些空洞的安全最佳实践?我也是。这篇速查手册只关注能真正解决问题的配置,让你像搭乐高一样快速构建安全的 Ubuntu Server 22.04。拒绝纸上谈兵,直接上手操作。
1. 问题速览
Ubuntu Server 22.04 常见的安全风险包括:
- 弱口令/默认口令: 通过暴力破解或社工获取服务器控制权。攻击者可能利用未更改的默认凭据或容易猜测的密码进行未经授权的访问。
- 未及时更新的软件包: 存在已知漏洞,容易被利用。过时的软件版本包含已知的安全漏洞,攻击者可以利用这些漏洞来执行恶意代码。
- SSH 暴力破解: 攻击者尝试大量密码组合来登录服务器。SSH服务是远程管理的入口,如果配置不当,容易遭受暴力破解攻击。
- 未授权访问: 服务端口暴露在外网,未经授权的用户可以访问。例如,未受保护的数据库端口暴露可能导致数据泄露。
- 恶意软件: 通过上传恶意脚本或程序来感染服务器。攻击者可能利用上传漏洞或配置不当的服务来安装恶意软件。
应用安全基线的目标是:
- 加固系统配置,降低被攻击的风险。
- 及时修复已知漏洞,减少攻击面。
- 限制未授权访问,保护敏感数据。\n* 建立监控机制,及时发现和响应安全事件。
2. 配置清单
2.1 禁用SSH密码登录
- 风险等级: 高
-
配置方法:
编辑
/etc/ssh/sshd_config文件:bash sudo nano /etc/ssh/sshd_config找到以下行并修改:
PasswordAuthentication no确保以下行存在且未被注释:
PubkeyAuthentication yes重启 SSH 服务:
bash sudo systemctl restart sshd解释:
PasswordAuthentication no:禁用使用密码进行 SSH 登录,强制使用密钥认证。PubkeyAuthentication yes:启用公钥认证,允许使用密钥进行 SSH 登录。
-
验证方法:
尝试使用密码登录 SSH,应该被拒绝。使用密钥登录应该成功。
bash ssh user@server_ip或者查看 SSH 日志:
bash sudo tail /var/log/auth.log -
例外情况:
如果服务器没有配置密钥认证,禁用密码登录会导致无法登录。确保在禁用密码登录之前已经配置好密钥认证。
2.2 启用防火墙(UFW)
- 风险等级: 高
-
配置方法:
启用 UFW:
bash sudo ufw enable设置默认规则:
bash sudo ufw default deny incoming sudo ufw default allow outgoing允许 SSH 连接:
bash sudo ufw allow ssh允许 HTTP 和 HTTPS 连接(如果需要):
bash sudo ufw allow http sudo ufw allow https查看防火墙状态:
bash sudo ufw status解释:
ufw enable:启用 UFW 防火墙。ufw default deny incoming:设置默认规则为拒绝所有入站连接。ufw default allow outgoing:设置默认规则为允许所有出站连接。ufw allow ssh:允许 SSH 连接,避免被防火墙阻止。ufw allow http和ufw allow https:允许 HTTP 和 HTTPS 连接,如果服务器需要提供 Web 服务。
-
验证方法:
使用
nmap扫描服务器端口,只有允许的端口应该是开放的。bash nmap server_ip查看 UFW 状态,确认规则是否生效。
bash sudo ufw status verbose -
例外情况:
如果服务器需要运行其他服务,需要添加相应的 UFW 规则。例如,如果服务器运行 MySQL 数据库,需要允许 MySQL 端口(默认 3306)的连接。
2.3 定期更新系统软件包
- 风险等级: 高
-
配置方法:
更新软件包列表:
bash sudo apt update升级软件包:
bash sudo apt upgrade安装安全更新:
bash sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades解释:
apt update:更新软件包列表,从软件源服务器获取最新的软件包信息。apt upgrade:升级所有可升级的软件包到最新版本。apt install unattended-upgrades:安装unattended-upgrades软件包,用于自动安装安全更新。\n *dpkg-reconfigure unattended-upgrades:配置unattended-upgrades,选择自动安装安全更新。
-
验证方法:
查看
/var/log/apt/history.log文件,确认软件包是否成功更新。bash sudo tail /var/log/apt/history.log使用
apt list --upgradable命令查看是否有可升级的软件包。bash apt list --upgradable -
例外情况:
在某些情况下,升级软件包可能会导致兼容性问题。在升级之前,建议先备份重要数据,并在测试环境中进行测试。
2.4 配置日志审计
- 风险等级: 中
-
配置方法:
安装
auditd:bash sudo apt install auditd配置审计规则:
编辑
/etc/audit/rules.d/audit.rules文件,添加需要审计的规则。例如,审计所有对/etc/passwd文件的访问:-w /etc/passwd -p wa -k passwd_changes重启
auditd服务:bash sudo systemctl restart auditd解释:
auditd:Linux 审计守护进程,用于记录系统事件。-w /etc/passwd:指定要审计的文件或目录。-p wa:指定要审计的权限(w:写,a:属性)。-k passwd_changes:指定审计规则的关键字,方便查找日志。
-
验证方法:
查看审计日志:
bash sudo ausearch -k passwd_changes或者查看
/var/log/audit/audit.log文件。 -
例外情况:
审计规则过多可能会导致性能下降。建议只审计关键文件和目录。
2.5 禁用不必要的服务
- 风险等级: 中
-
配置方法:
列出所有正在运行的服务:
bash systemctl list-units --type=service --state=running禁用不需要的服务:
bash sudo systemctl disable service_name停止不需要的服务:
bash sudo systemctl stop service_name解释:
systemctl list-units --type=service --state=running:列出所有正在运行的服务。systemctl disable service_name:禁用指定的服务,防止开机启动。systemctl stop service_name:停止指定的服务。
-
验证方法:
使用
systemctl status service_name命令查看服务状态,确认服务是否已禁用或停止。 -
例外情况:
禁用错误的服务可能会导致系统功能异常。在禁用服务之前,请确认该服务是否必要。\n
3. 自动化部署
使用 Ansible 可以轻松自动化部署安全基线。
以下是一个 Ansible Playbook 示例,用于禁用 SSH 密码登录:
---
- hosts: all
become: true
tasks:
- name: Disable SSH password authentication
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PasswordAuthentication'
line: 'PasswordAuthentication no'
notify: restart_ssh
- name: Ensure PubkeyAuthentication is enabled
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PubkeyAuthentication'
line: 'PubkeyAuthentication yes'
notify: restart_ssh
handlers:
- name: restart_ssh
systemd:
name: sshd
state: restarted
解释:
hosts: all:指定 Playbook 应用于所有主机。become: true:使用 sudo 权限执行任务。lineinfile:用于修改文件中的行。\n*regexp:用于匹配需要修改的行。line:用于替换匹配到的行。\nnotify:用于在任务完成后触发 handlers。\nhandlers:用于重启 SSH 服务。
可以使用类似的方法自动化部署其他安全配置。\n
4. 蜜罐策略(可选)
创建一个假的 SSH 登录入口,记录所有尝试登录的用户信息。\n
* 配置方法:
* 安装 cowrie 蜜罐软件。
* 配置 cowrie 监听在非标准 SSH 端口(例如 2222)。
* 使用防火墙将所有对 22 端口的访问转发到 cowrie 监听的 2222 端口。
```bash
# 安装 cowrie
sudo apt update
sudo apt install git python3 python3-venv python3-openssl libssl-dev libffi-dev build-essential libgmp3-dev virtualenv
git clone https://github.com/cowrie/cowrie.git
cd cowrie
./bin/cowrie create
./venv/bin/pip install --upgrade pip
./venv/bin/pip install -r requirements.txt
cp etc/cowrie.cfg.dist etc/cowrie.cfg
nano etc/cowrie.cfg # 修改监听端口等配置
./bin/cowrie start
# 防火墙配置 (使用 iptables,ufw 类似)
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
```
-
验证方法:
查看
cowrie日志,确认是否记录了登录尝试。\n * 日志通常位于cowrie/var/log/cowrie/目录下。\n
* 解释:
*cowrie是一个 SSH 蜜罐,可以模拟真实的 SSH 服务,记录所有尝试登录的用户信息。
* 将cowrie监听在非标准 SSH 端口,可以减少误报。
* 使用防火墙将所有对 22 端口的访问转发到cowrie,可以捕获所有针对 SSH 服务的攻击。
5. 参考资料
- Ubuntu Server Documentation
- UFW Documentation
- Ansible Documentation
- 华为云安全配置基线指南的标准合规包(level 2)
- 安全基线指南 | Microsoft Learn
声明:
本速查手册仅供参考,请根据实际情况进行调整。安全是一个持续的过程,需要不断学习和改进。希望这份速查手册能帮助你更高效地保护你的 Ubuntu Server 22.04 服务器。祝你安全运维顺利!