ufw
Ansible
possède un ufw
module pour gérer les règles de pare-feu. Dans roles/common/tasks/main.yml
, qui est inclus dans tous mes serveurs, j'ai (entre autres):
- name: Install ufw
apt: name=ufw
- name: Allow ssh through firewall
ufw: proto=tcp port=22 rule=allow
- name: Set ufw policy
ufw: state=enabled direction=incoming policy=deny
Modifier : Il est nécessaire d'autoriser ssh avant de définir la stratégie par défaut sur "refuser" (à l'origine, c'était ci-dessus), sinon vous risquez d'être verrouillé entre les deux étapes.
Ensuite, dans chaque rôle, j'ai des règles de pare-feu supplémentaires pour ce rôle. Par exemple, dans roles/nginx/tasks/main.yml
, j'ai (entre autres) ceci:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Donc, tous mes serveurs nginx ont les ports 80 et 443 ouverts.
De cette façon, vous pouvez créer la configuration commune de votre choix et ajouter des règles supplémentaires dans des rôles plus spécifiques.
ferm
Si vous avez des règles qui ufw
ne peuvent pas être gérées, je pense qu'une solution qui fonctionnerait bien est ferm
; il peut presque tout faire, et vous pouvez le configurer pour lire les règles de répertoires tels que /etc/ferm/input.d/
, /etc/ferm/output.d/
, /etc/ferm/forward.d/
, etc. Vous pouvez rendre votre common
rôle essentiel de préparer la ferm
configuration et avoir d' autres rôles fichiers dans ces répertoires laissent tomber.
iptables simples
Votre exigence d'avoir des ansible
règles spécifiées en plus des règles spécifiées d'une autre manière est inhabituelle et défie apparemment la plupart du point d'utilisation ansible
. Malheureusement, je ne vois aucun moyen de le faire autrement qu'avec de la plaine iptables
, ce qui serait assez moche. Voici un exemple d'ouverture du port 80 dans roles/nginx/tasks/main.yml
(non testé):
- name: Check if port 80 is allowed
shell: iptables -L | grep -q "Allow http" && echo -n yes || echo -n no
register: check_allow_http
changed_when: no
always_run: yes
- name: Allow port 80
command: >
iptables -A INPUT -p tcp -m tcp --dport 80
-m comment --comment "Allow http" -j ACCEPT
when: check_allow_http.stdout == "no"
notify:
- Save iptables
où Save iptables
est un gestionnaire qui s'exécute iptables-save
. Tout ce qui précède est assez fastidieux à écrire, mais cela pourrait être approprié, surtout si vous n'avez que quelques règles à gérer ansible
.
ufw
ne peut apparemment pas répondre à vos besoins; mais que voulez-vous dire lorsque vous dites que vous "ne pouvez pas modifier quelque chose sans ansible sur le serveur local"?lineinfile
Si vous souhaitez gérer des règles dans votre configuration iptables sans écraser les règles existantes ou gérer de manière centralisée iptables dans un modèle, utilisez le module lineinfile d'Ansible:
Voici le gestionnaire "restart iptables":
la source
J'ai créé un rôle pour gérer les règles iptables avec les fonctionnalités suivantes:
Découvrez mikegleasonjr.firewall sur ansible galaxy ou sur github
la source
Nous avons écrit un module spécial pour cela appelé iptables_raw qui nous permet de gérer facilement iptables. Tout est expliqué dans ce billet de blog . Voici un exemple d'utilisation du module:
la source