ufw
Ansibleha un ufwmodulo per gestire le regole del firewall. In roles/common/tasks/main.yml, che è incluso in tutti i miei server, ho (tra le altre cose):
- 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
Modifica : È necessario consentire a ssh prima di impostare la politica di default su "nega" (originariamente era l'opposto sopra), altrimenti potresti essere bloccato tra i due passaggi.
Quindi, in ogni ruolo, ho regole firewall aggiuntive per quel ruolo. Ad esempio, in roles/nginx/tasks/main.yml, ho (tra le altre cose) questo:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Quindi tutti i miei server nginx hanno le porte 80 e 443 aperte.
In questo modo è possibile creare qualsiasi configurazione comune desiderata e aggiungere regole aggiuntive in ruoli più specifici.
ferm
Se hai regole che ufwnon sono in grado di gestire, penso che una soluzione funzionerebbe bene ferm; si può fare quasi tutto, ed è possibile configurarlo per leggere le regole di directory come /etc/ferm/input.d/, /etc/ferm/output.d/, /etc/ferm/forward.d/, ecc Si potrebbe rendere il vostro commonruolo essenziale preparare la fermconfigurazione e poi altri ruoli rilasciare i file in queste directory.
iptables semplici
Il tuo requisito di avere ansibleregole specifiche oltre alle regole specificate in un altro modo è insolito e apparentemente sfugge alla maggior parte del punto per l'utilizzo ansible. Sfortunatamente non vedo altro modo di farlo se non con Plain iptables, il che sarebbe abbastanza brutto. Ecco un esempio di apertura della porta 80 in roles/nginx/tasks/main.yml(non testato):
- 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
dove Save iptablesè un gestore che esegue iptables-save. Tutto quanto sopra è abbastanza noioso da scrivere, ma potrebbe essere appropriato, soprattutto se hai solo poche regole da gestire ansible.