ufw
Ansible
tiene un ufw
módulo para manejar las reglas del firewall. En roles/common/tasks/main.yml
, que está incluido en todos mis servidores, tengo (entre otras cosas):
- 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
Editar : es necesario permitir ssh antes de configurar la política predeterminada para "denegar" (originalmente era lo opuesto más arriba), de lo contrario, puede quedar bloqueado entre los dos pasos.
Luego, en cada rol, tengo reglas de firewall adicionales para ese rol. Por ejemplo, en roles/nginx/tasks/main.yml
, tengo (entre otras cosas) esto:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Entonces, todos mis servidores nginx tienen los puertos 80 y 443 abiertos.
De esta forma, puede crear la configuración común que desee y agregar reglas adicionales en roles más específicos.
ferm
Si tiene reglas que ufw
no pueden manejar, una solución que creo que funcionaría bien es ferm
; que puede hacer casi cualquier cosa, y se puede configurar para leer las reglas de directorios como /etc/ferm/input.d/
, /etc/ferm/output.d/
, /etc/ferm/forward.d/
, etc Usted puede hacer su common
función esencial preparar la ferm
configuración y luego tener otros papeles caen archivos en estos directorios.
iptables simples
Su requisito de tener ansible
reglas específicas además de las reglas especificadas de otra forma es inusual y aparentemente desafía la mayor parte del uso ansible
. Desafortunadamente, no veo otra manera de hacerlo que no sea con plain iptables
, lo que sería bastante feo. Aquí hay un ejemplo de apertura del puerto 80 en roles/nginx/tasks/main.yml
(no probado):
- 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
donde Save iptables
hay un controlador que se ejecuta iptables-save
. Todo lo anterior es bastante tedioso de escribir, pero puede ser apropiado, especialmente si solo tiene unas pocas reglas para manejar ansible
.