Lors d’un précédent article et d’une précédente vidéo, nous avions découvert comment commencer à sécuriser vos raspberry avec iptables. Ce firewall natif à Linux se configure très facilement et est d’une efficacité redoutable.
Néanmoins, déployer les règles à la main ce n’est pas pratique en cas de nécessité de reconfigurer vos serveurs. Mais pour éviter ce genre de problème nous allons continuer à développer nos rôles ansible. Notre objectif est de disposer d’une infrastructure de plusieurs raspberry. Pour cela, nous configurons un bastion qui servira comme point d’entrée ssh pour rebondir les autres serveurs de notre infra.
Si vous le souhaitez vous pouvez retrouver tous les éléments sur ce dépôt.
L’inventory
Peu d’évolution sur notre inventory qui permet de faire la dictinction entre bastion et serveurs simples.
all:
children:
door:
hosts:
192.168.1.31:
back:
hosts:
192.168.1.41:
192.168.1.42:
192.168.1.43:
192.168.1.44:
Le rôle iptables : firewall
Notre rôle va servir à configurer simplement notre bastion. Nous verrons dans un prochain article comment configurer notre firewall pour les autres serveurs ?
- name: install iptables-persistent
apt:
name: iptables-persistent
state: present
- name: only me
iptables:
chain: INPUT
protocol: tcp
destination_port: 22
source: 192.168.1.1/24
jump: ACCEPT
- name: specific
iptables:
chain: OUTPUT
protocol: tcp
destination_port: 22
jump: ACCEPT
- name: icmp accept
iptables:
chain: INPUT
protocol: icmp
jump: ACCEPT
- name: icmp accept
iptables:
chain: OUTPUT
protocol: icmp
jump: ACCEPT
- name: Allow related and established connections
iptables:
chain: INPUT
ctstate: ESTABLISHED,RELATED
jump: ACCEPT
- name: Allow related and established connections
iptables:
chain: OUTPUT
ctstate: ESTABLISHED,RELATED
jump: ACCEPT
- name: Set the policy for the INPUT chain to DROP
iptables:
chain: OUTPUT
policy: ACCEPT
- name: Set the policy for the INPUT chain to DROP
iptables:
chain: INPUT
policy: DROP
- name: Set the policy for the INPUT chain to DROP
iptables:
chain: FORWARD
policy: DROP
- name: persistent rules
shell: iptables-save > /etc/iptables/rules.v4
1ère étape : nous installons iptables-persistent qui nous permet de rendre nos règles durables dans le temps. De base, iptables ne garde pas ses règles en cas de reboot. C’est ballot mais c’est comme ça. Iptales-persistent va maintenir les règles présentes dans un fichier de configuration. Pour nous ce sera /etc/iptables/riles.v4. Npus l’alimentons dans la dernière ligne de notre rôle en utilisant le module shell et en lançant iptables-save.
2ème étapes : pour notre notre bastion, il est nécessaire d’accepter les entrées de notre réseau local sur le port 22 (ssh). Idem
3ème étape : on accepte la sortie de notre bastion avec le port 22
4ème étape : on accepte les entrées/sorties pour les ping (icmp)
5ème étape : toutes les connexions établies sont maintenues
6ème étape : on peut accepter toutes les sorties mais à ajuster avec l’étape précédente
7ème étape : on refuse toutes les autres entrées et les forward
