1. 为什么我们需要自动化等保三级加固?
如果你是一名运维工程师或者安全管理员,手头管理着几十台甚至上百台CentOS或者Kylin服务器,那你肯定对“等保三级”这个词又爱又恨。爱的是,它代表了一套清晰的安全基线,让我们的工作有章可循;恨的是,每次合规检查前,面对海量的服务器,一条条手动去执行安全加固命令,那感觉简直是一场噩梦。
我经历过不止一次。半夜接到通知,要求所有生产服务器在三天内完成等保三级加固自查和整改。光是想到要登录每一台机器,重复执行修改密码策略、调整用户权限、配置审计规则这些操作,头就开始疼了。更别提手动操作极易出错,这台机器忘了改登录超时,那台机器漏了配置日志外发,最后检查时漏洞百出,还得返工。效率低、一致性差、可追溯性弱,这是手动加固的三大硬伤。
这时候,自动化就成了我们的救命稻草。而Ansible,凭借其无代理、基于SSH、声明式语法的特点,几乎是为此类批量配置管理任务量身定做的工具。把那些零散、重复、容易出错的手工命令,编写成一套结构清晰、可重复执行的Ansible剧本(Playbook),一次编写,处处运行。今天要分享的,就是我这几年在实战中沉淀下来的一套基于Ansible的Linux等保三级自动化加固方案。它不仅仅是一堆命令的堆砌,更是一套包含策略设计、剧本编写、执行验证和问题排查的完整工作流。
这套方案的目标很明确:让你能够通过一条命令,在几分钟内对成百上千台服务器完成标准化的安全加固,并且确保每台机器的加固结果都完全一致,同时生成清晰的执行报告,方便审计和复盘。接下来,我们就从最基础的环境准备开始,一步步构建这个自动化堡垒。
2. 环境准备与Ansible基础搭建
工欲善其事,必先利其器。在开始编写复杂的加固剧本之前,我们需要一个稳定、可控的Ansible控制环境。这里假设你有一台专用的管理机(可以是你的笔记本,也可以是一台跳板机),系统是CentOS 7/8或者Kylin V10,我们将在这台机器上安装和配置Ansible。
2.1 Ansible控制节点安装与配置
首先,通过包管理器安装Ansible是最简单的方式。在CentOS上,你需要先配置EPEL源。
# 对于CentOS 7/RHEL 7
sudo yum install epel-release -y
sudo yum install ansible -y
# 对于CentOS 8/RHEL 8/Kylin V10,使用dnf
sudo dnf install epel-release -y
sudo dnf install ansible -y
安装完成后,验证一下版本:ansible --version。我建议使用Ansible 2.9及以上版本,对新模块和语法的支持更好。
接下来是核心配置:清单文件(Inventory)。这是Ansible识别和管理目标服务器的“花名册”。我们不要用默认的/etc/ansible/hosts,而是在项目目录下创建自己的清单文件,这样更灵活。
假设我们有三个业务组:web服务器、数据库服务器和缓存服务器。我们可以这样定义清单文件 inventory/production.ini:
[web_servers]
web01.example.com ansible_host=192.168.1.101 ansible_user=ops
web02.example.com ansible_host=192.168.1.102 ansible_user=ops
[db_servers]
db01.example.com ansible_host=192.168.1.201 ansible_user=ops
db02.example.com ansible_host=192.168.1.202 ansible_user=ops
[cache_servers]
redis01.example.com ansible_host=192.168.1.301 ansible_user=ops
# 定义一个总组,包含所有服务器
[all_servers:children]
web_servers
db_servers
cache_servers
# 定义一些通用变量
[all_servers:vars]
ansible_port=22
# 这里可以设置堡垒机跳转等,例如使用ssh代理
# ansible_ssh_common_args='-o ProxyJump="jumpuser@bastion.example.com"'
这里我做了几件重要的事:一是使用主机别名和ansible_host变量分离了连接用的IP和显示名;二是设置了ansible_user,这是Ansible连接时使用的初始用户(需要有sudo权限);三是通过组嵌套[group:children]语法,方便地管理所有服务器。
2.2 配置SSH免密登录与权限提升
Ansible通过SSH连接目标主机,为了自动化,必须配置从控制节点到所有目标节点的SSH密钥免密登录。这是大规模自动化运维的基础。
首先,在控制节点生成密钥对(如果还没有的话):ssh-keygen -t rsa -b 4096,一路回车。
然后,将公钥分发到所有目标服务器。我们可以先用一个小剧本测试连通性并完成分发:
# playbooks/setup_ssh_keys.yml
---
- name: Test connection and deploy SSH key
hosts: all_servers
gather_facts: no
tasks:
- name: Test connectivity with ping module
ansible.builtin.ping:
- name: Deploy public key for ansible user
ansible.posix.authorized_key:
user: "{
{ ansible_user | default('ops') }}"
state: present
key: "{
{ lookup('file', '~/.ssh/id_rsa.pub') }}"
执行这个剧本:ansible-playbook -i inventory/production.ini playbooks/setup_ssh_keys.yml。如果遇到问题,可能是防火墙或sshd配置限制了密钥登录,需要先手动处理一下。
权限提升方面,等保加固很多操作需要root权限。我们通常不直接用root用户连接,而是用一个具有sudo权限的普通用户(如上面的

&spm=1001.2101.3001.5002&articleId=151127972&d=1&t=3&u=eb055a2af0084591a4e59840976fda07)
272

被折叠的 条评论
为什么被折叠?



