ufw
Ansible
ha un ufw
modulo 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 ufw
non 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 common
ruolo essenziale preparare la ferm
configurazione e poi altri ruoli rilasciare i file in queste directory.
iptables semplici
Il tuo requisito di avere ansible
regole 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
.