国际综合云 国际综合云 立即咨询
返回列表

腾讯云认证账号 使用 Ansible 自动化一键加固安全

腾讯云国际 / 2026-05-15 02:01:44

一、当安全加固变成“一键三连”

1.1 手动操作的“血泪史”

以前每次加固服务器,我都是先深吸一口气,然后战战兢兢地打开配置文件,生怕手抖把系统搞崩。结果往往发现,有的服务器漏了关键配置,有的改了之后服务起不来,简直像在玩俄罗斯轮盘赌。直到遇见Ansible,这玩意儿简直是运维人的救星——写好配置,一键执行,所有服务器同步更新,连睡觉都安稳了。

1.2 Ansible:IT界的“瑞士军刀”

Ansible就像个听话的机器人,你给它一份清单(Playbook),它就能按部就班地帮你完成所有任务,连睡觉都不用。而且它不需要在目标机器上安装代理,直接通过SSH通信,简单方便。想象一下,你有个懒惰的同事,但特别靠谱,只要你给他一张清单,他就能自动完成所有工作,连咖啡都不用喝——这就是Ansible。

腾讯云认证账号 为什么需要自动化加固?

2.1 人肉操作的坑

手动配置防火墙规则,就像用牙刷刷整个游泳池——累死人还刷不干净。比如某台服务器的防火墙漏了,黑客就能从那个缺口钻进来,结果整个网络都遭殃。更糟的是,当服务器数量多起来,手动操作简直就是噩梦。前几天我帮客户加固10台服务器,改完SSH配置后,突然发现其中一台的配置文件被我改错了,导致服务起不来,只能紧急联系客户,花了两个小时才修复。这种时候,你就会明白,自动化有多重要。

2.2 安全漏洞的“隐形杀手”

很多安全漏洞其实源于简单的配置错误。比如默认的SSH端口22,随便一个扫描工具就能找到,然后尝试暴力破解。而很多管理员懒得改端口,或者忘记禁用root登录。这些小细节,往往成了攻击者的突破口。自动化加固能确保每个服务器都严格按照安全规范配置,不留死角。

Ansible加固实战指南

3.1 安装与配置

安装Ansible其实非常简单。以Ubuntu系统为例,先更新软件源:sudo apt update,然后安装:sudo apt install ansible -y。安装完成后,编辑/etc/ansible/hosts文件,把要管理的服务器IP列进去。比如:

[webservers]
192.168.1.10 ansible_ssh_user=admin ansible_ssh_pass=yourpassword
192.168.1.11 ansible_ssh_user=admin ansible_ssh_pass=yourpassword

或者用SSH密钥认证,更安全。比如:

[webservers]
192.168.1.10 ansible_ssh_user=admin
192.168.1.11 ansible_ssh_user=admin

然后生成SSH密钥:ssh-keygen,把公钥拷贝到目标服务器:ssh-copy-id [email protected]。这样就不需要密码了。测试连接:ansible webservers -m ping。如果返回pong,说明连接成功。如果失败,检查防火墙、SSH服务是否运行、密钥是否正确。

3.2 编写你的第一个加固Playbook

Playbook是YAML格式的剧本,告诉Ansible该做什么。比如下面这个,禁止root登录并修改SSH端口:

---
- name: SSH安全加固
  hosts: all
  tasks:
    - name: 禁止root登录
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^PermitRootLogin'
        line: 'PermitRootLogin no'
        state: present
      notify: restart sshd

    - name: 修改默认端口
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^Port'
        line: 'Port 2222'
        state: present
      notify: restart sshd

    - name: 重启SSH服务
      service:
        name: sshd
        state: restarted
      when: ansible_ssh_pass is defined
      listen: restart sshd

这里用到了notify和listen,当前面的任务修改了配置文件,就会触发重启服务。注意,when条件是为了避免在没有密码的情况下执行重启,实际使用时可能需要调整。

3.3 常用模块详解

Ansible的模块就像积木,随便组合。比如user模块可以一键删除无用账户:

- name: 删除测试账户
  user:
    name: test_user
    state: absent

firewalld模块能快速配置防火墙:

- name: 开放HTTP和HTTPS
  firewalld:
    service: "{{ item }}"
    state: enabled
    immediate: yes
    permanent: yes
  loop:
    - http
    - https

shell模块可以执行系统命令,比如更新系统:

- name: 更新系统
  shell: yum update -y
  args:
    warn: false

设置密码策略:

- name: 设置密码复杂度
  lineinfile:
    path: /etc/security/pwquality.conf
    regexp: '^minlen'
    line: 'minlen = 12'

禁用空密码:

- name: 禁用空密码
  lineinfile:
    path: /etc/pam.d/common-password
    regexp: '^password.*pam_unix.so.*nullok'
    line: 'password requisite pam_unix.so nullok obscure minlen=12'

真实案例:从混乱到井井有条

4.1 SSH加固实例

之前有个客户,服务器被爆破攻击,因为SSH允许root登录且端口没改。我用Ansible一键搞定所有服务器:

---
- name: SSH加固
  hosts: servers
  tasks:
    - name: 禁止root登录
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^PermitRootLogin'
        line: 'PermitRootLogin no'
    - name: 修改端口为2222
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^Port'
        line: 'Port 2222'
    - name: 重启SSH
      service:
        name: sshd
        state: restarted

运行ansible-playbook ssh_secure.yml,所有服务器瞬间合规。再也不用担心漏掉某台,安全风险直线下降。

4.2 防火墙规则自动化

防火墙配置最怕漏掉规则。比如,只允许80、443端口,其他全关:

---
- name: 防火墙加固
  hosts: all
  tasks:
    - name: 清空默认规则
      firewalld:
        service: all
        state: disabled
        immediate: yes
        permanent: yes

    - name: 开放必要端口
      firewalld:
        service: "{{ item }}"
        state: enabled
        immediate: yes
        permanent: yes
      loop:
        - http
        - https

运行之后,所有服务器只允许Web流量,其他端口自动关闭。黑客想扫都找不到入口,安全感爆棚。

腾讯云认证账号 踩坑记:常见问题避坑指南

5.1 权限问题

Ansible执行命令时可能需要sudo权限,记得在playbook里加become: yes。比如:

- name: 安装必要软件
  apt:
    name: fail2ban
    state: present
  become: yes

如果忘了become,任务会失败,提示权限不足。记住,系统级操作都要加become。

5.2 配置冲突

多个playbook修改同一个文件时,容易互相覆盖。比如一个playbook改SSH端口,另一个改PermitRootLogin,如果顺序不对,可能最后只保留一个配置。解决办法是把相关配置放在同一个task里,或者用templates模板文件统一管理。

还有个常见问题:忘记测试Playbook。比如修改防火墙规则时,如果直接关闭所有端口,可能把自己锁在外面。这时候可以在Playbook里加测试环节,比如先开放新端口再关闭旧端口,或者用定时任务回滚。

比如:

- name: 开放新端口
  firewalld:
    port: 2222/tcp
    state: enabled
    immediate: yes
    permanent: yes

- name: 关闭旧端口
  firewalld:
    port: 22/tcp
    state: disabled
    immediate: yes
    permanent: yes

这样,新端口先开放,确认没问题后再关闭旧端口,避免意外锁死。

总结:安全加固的“快乐之道”

用Ansible自动化加固,就像请了个24小时待命的安全管家。再也不用担心手抖改错配置,也不用逐台服务器检查。写好Playbook,一键执行,所有服务器瞬间合规。不仅效率提升,安全水平也更有保障。想想看,当别人还在手忙脚乱改配置时,你已经喝着咖啡,看着系统自动加固完成——这才是运维的高级享受。从此,安全加固不再是噩梦,而是乐趣。毕竟,谁不想在同事忙得焦头烂额时,优雅地喝杯咖啡,顺便享受自动化带来的轻松呢?(当然,安全问题永远不能松懈,但有了Ansible,至少你不用再为重复工作累到崩溃)

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系