Ansible para Sysadmins: Setup e Hardening de Servidor em 5 Minutos

Ansible para sysadmins . Configurar um servidor do zero, do jeito certo, costuma ser repetitivo, demorado e propenso a erro humano. Agora multiplique isso por 5, 10 ou 50 servidores… 💀

É exatamente aqui que o Ansible brilha.

Neste artigo você vai aprender, de forma prática e direta, como criar um playbook único para:

  • Atualizar o sistema
  • Criar usuário administrativo
  • Proteger o SSH
  • Ativar firewall
  • Aplicar hardening básico
  • Funcionar tanto em AlmaLinux quanto em Ubuntu

Tudo isso em menos de 5 minutos, com execução idempotente e reproduzível.


Por que Ansible é a ferramenta ideal para setup inicial

Para sysadmins, Ansible resolve três dores clássicas:

  1. Padronização – todo servidor nasce igual
  2. Velocidade – setup completo com um comando
  3. Segurança – hardening aplicado desde o primeiro boot

E o melhor: não precisa de agente no servidor.


Cenário do playbook

Este playbook faz o seguinte:

  • Atualiza pacotes
  • Cria usuário sysadmin
  • Configura sudo sem senha (opcional)
  • Endurece o SSH
  • Ativa firewall (UFW ou Firewalld)
  • Bloqueia login root via SSH
  • Funciona em AlmaLinux 8/9 e Ubuntu 20.04+

Estrutura do projeto

ansible-setup/
├──
├── setup.yml
└── vars.yml


Inventory ( inventory.ini )

[servers]
server1 ansible_host=IP_DO_SERVIDOR
server2 ansible_host=IP_DO_SERVIDOR2
server3 ansible_host=IP_DO_SERVIDOR3

Variáveis globais (vars.yml)

admin_user: sysadmin
ssh_port: 2222
allow_password_auth: false


Playbook principal (setup.yml)

- name: Setup inicial e hardening
hosts: servers
become: yes
vars_files:
- vars.yml


tasks:


- name: Atualizar pacotes (Debian)
apt:
update_cache: yes
upgrade: dist
when: ansible_os_family == "Debian"


- name: Atualizar pacotes (RedHat)
dnf:
name: '*'
state: latest
when: ansible_os_family == "RedHat"


- name: Criar usuário admin
user:
name: "{{ admin_user }}"
groups: wheel,sudo
shell: /bin/bash
create_home: yes


- name: Autorizar sudo sem senha
copy:
dest: "/etc/sudoers.d/{{ admin_user }}"
content: "{{ admin_user }} ALL=(ALL) NOPASSWD:ALL"
mode: 0440


- name: Configurar SSH
lineinfile:
path: /etc/ssh/sshd_config
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
loop:
- { regexp: '^#?Port', line: 'Port {{ ssh_port }}' }
- { regexp: '^#?PermitRootLogin', line: 'PermitRootLogin no' }
- { regexp: '^#?PasswordAuthentication', line: 'PasswordAuthentication no' }


- name: Reiniciar SSH
service:
name: sshd
state: restarted


- name: Ativar firewall (UFW)
ufw:
rule: allow
port: "{{ ssh_port }}"
when: ansible_os_family == "Debian"


- name: Ativar firewall (Firewalld)
firewalld:
port: "{{ ssh_port }}/tcp"
permanent: yes
state: enabled
when: ansible_os_family == "RedHat"

Execução

ansible-playbook -i inventory.ini setup.yml

Em menos de 5 minutos, o servidor estará:

  • Atualizado
  • Protegido
  • Padronizado
  • Pronto para produção

Boas práticas para produção

  • 🔑 Use SSH por chave, nunca senha
  • 🔁 Versione seus playbooks (Git)
  • 🧪 Teste em VM antes de rodar em produção
  • 📦 Separe roles conforme o ambiente crescer

Quando este setup NÃO é suficiente

Este playbook é ideal para baseline de segurança, mas não substitui:

  • CIS Benchmark completo
  • Hardening de kernel
  • Auditoria com Lynis/OpenSCAP

Ele é o primeiro passo, não o último.


Conclusão

Se você ainda faz setup manual de servidor em 2026, você está:

  • Perdendo tempo
  • Introduzindo inconsistência
  • Assumindo riscos desnecessários

Com Ansible, o servidor já nasce certo.

Automatize cedo. Automatize sempre.