Files
ansible-mln/infra/playbook-app-firewall-lockdown.yml
T

49 lines
1.8 KiB
YAML

---
# Les ports 80/443 sont publiés par Docker (docker-compose du conteneur waf), donc
# UFW seul ne suffit pas : Docker insère ses propres règles NAT/FORWARD directement
# dans iptables et les contourne. On filtre donc dans la chaîne DOCKER-USER, seul
# point garanti d'être évalué avant les règles de Docker.
#
# Résultat : seul le load-balancer (IP VPN) peut atteindre 80/443 sur ces hôtes,
# tout le reste d'internet est bloqué. SSH et le reste du trafic ne sont pas touchés.
- name: Restreindre l'accès HTTP/HTTPS des serveurs applicatifs au load-balancer
hosts: prod:replica-prod
become: true
gather_facts: false
vars:
lb_vpn_ip: "{{ hostvars['load-balancer']['vpn_ip'] }}"
tasks:
- name: Installer iptables-persistent
ansible.builtin.apt:
name: iptables-persistent
state: present
update_cache: yes
- name: Bloquer les connexions 80/443 non issues du load-balancer
ansible.builtin.iptables:
chain: DOCKER-USER
protocol: tcp
match: multiport
destination_ports: "80,443"
jump: DROP
action: insert
comment: "app-firewall: bloque 80/443 hors load-balancer"
- name: Autoriser les connexions 80/443 depuis le load-balancer (VPN)
ansible.builtin.iptables:
chain: DOCKER-USER
protocol: tcp
source: "{{ lb_vpn_ip }}/32"
match: multiport
destination_ports: "80,443"
jump: RETURN
action: insert
comment: "app-firewall: autorise 80/443 depuis le load-balancer"
- name: Sauvegarder les règles iptables (persistance au reboot)
ansible.builtin.command: netfilter-persistent save
changed_when: false