49 lines
1.8 KiB
YAML
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
|