Mengelola firewall di banyak server: mendefinisikan policy rule terpusat berbasis inventory Ansible, mendeteksi drift antara state server dan definisi kode, mengekspor ruleset untuk backup dan compliance, serta menyusun checklist audit untuk seluruh fleet

Episode 20 mengajarkan otomasi untuk satu pola ruleset. Episode 21 menaikkan skala: banyak server, banyak peran, satu kebijakan. Inilah yang membedakan admin server tunggal dari tim ops yang mengelola fleet — kemampuan mendefinisikan kebijakan di satu tempat dan memastikan semua server patuh.
Mengapa ini penting? Karena semakin banyak server, semakin besar risiko drift — server yang menyimpang dari standar karena edit manual, konfigurasi lama, atau server baru yang lupa dikonfigurasi. Tanpa deteksi drift, kalian tidak pernah tahu server mana yang terbuka. Episode ini menyediakan kerangka untuk menjawab pertanyaan itu dengan pasti.
Kuncinya adalah memisahkan kebijakan (rule) dari data (server). Ansible memungkinkan ini lewat inventory + group variables.
inventory/
├── production/
│ ├── hosts.yml
│ └── group_vars/
│ ├── all.yml
│ ├── webservers.yml
│ └── databases.yml
└── staging/
├── hosts.yml
└── group_vars/
└── all.ymlSetiap grup server mendefinisikan port yang dibutuhkan — satu sumber kebenaran:
ufw_policy:
- { rule: allow, port: 22, proto: tcp }
- { rule: allow, port: 80, proto: tcp }
- { rule: allow, port: 443, proto: tcp }
ufw_defaults:
incoming: deny
outgoing: allowufw_policy:
- { rule: allow, port: 22, proto: tcp }
- { rule: allow, port: 5432, proto: tcp, from_ip: 10.0.1.0/24 }
ufw_defaults:
incoming: deny
outgoing: allowPlaybook tunggal yang berlaku untuk semua grup:
- name: Deploy firewall UFW ke semua server
hosts: all
become: true
tasks:
- name: Default policies
community.general.ufw:
default: "{{ ufw_defaults.incoming }}"
direction: incoming
when: ufw_defaults is defined
- name: Terapkan rules dari policy
community.general.ufw:
rule: "{{ item.rule }}"
port: "{{ item.port | default(omit) }}"
proto: "{{ item.proto | default(omit) }}"
from_ip: "{{ item.from_ip | default(omit) }}"
loop: "{{ ufw_policy }}"
when: ufw_policy is definedDengan pola ini, menambahkan server baru ke inventory sudah cukup — playbook akan menerapkan kebijakan yang sesuai dengan grupnya. Satu definisi, seluruh fleet patuh.
Note
Model ini menggabungkan yang sudah kita pelajari: policy default (episode 9), rule per peran (episode 15-16), dan idempotensi module (episode 20). Nilai terbesarnya bukan menghapus kerja manual — melainkan membuat state server bisa diprediksi dan diverifikasi.
Drift adalah ketika server menyimpang dari definisi kode. Dua pendekatan deteksi:
Jalankan playbook dalam mode check yang membandingkan state aktual dengan definisi:
ansible-playbook deploy-firewall.yml --check --diff--check mensimulasikan tanpa menerapkan; --diff menampilkan perbedaan yang akan terjadi. Hasilnya adalah daftar drift di seluruh fleet.
Ekspor ruleset semua server, lalu bandingkan dengan standar:
ansible all -m shell -a "sudo ufw status verbose" > ufw-status-all.txtDengan beberapa baris parsing, kalian bisa membangun indikator sederhana:
grep -c "Status: active" ufw-status-all.txt
grep -L "Status: active" ufw-status-all.txtServer yang tidak active muncul di output kedua — kandidat untuk perhatian segera.
Backup ruleset sama pentingnya dengan backup data. Dua bentuk ekspor:
sudo ufw show added > ufw-rules-backup.txt
cat ufw-rules-backup.txtufw allow 22/tcp
ufw allow 80/tcp
ufw limit 443/tcpFile ini bisa dijalankan ulang langsung (bash ufw-rules-backup.txt) — rekonstruksi sempurna.
sudo iptables-save > ufw-iptables-save.txtiptables-save menghasilkan ruleset mentah yang bisa dikembalikan dengan iptables-restore. Ini snapshot persis yang dijalankan kernel.
Tip
Simpan kedua ekspor di repository (bersama playbook episode 20) dan jadwalkan ekspor berkala via cron. Saat audit compliance, kalian punya bukti historis: ruleset seperti apa yang berjalan di server X pada tanggal Y.
Checklist yang bisa dipakai untuk audit seluruh fleet:
ufw status = active, service ufw enabled saat boot.Jalankan checklist ini berkala; setiap item yang gagal adalah tiket perbaikan.
iptables-restore di lab.Pada episode 21 ini, kalian telah menguasai manajemen banyak server.
Inti yang harus dibawa pulang:
ansible-playbook --check --diff dan ekspor status berkala.ufw show added (rekonstruksi) dan iptables-save (state persis).Di episode 22 — episode terakhir — kita menutup perjalanan dengan Gufw, Alternatif & Refleksi Akhir: GUI Gufw untuk desktop, alternatif seperti firewalld dan cloud security groups, rekap seluruh series, checklist production final, dan sumber belajar resmi. Sampai jumpa di episode 22!