ufw
Ansible
hat ein ufw
Modul , um mit Firewall-Regeln umzugehen. In roles/common/tasks/main.yml
, das in allen meinen Servern enthalten ist, habe ich (unter anderem):
- 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
Bearbeiten : Es ist notwendig, ssh zuzulassen, bevor die Standardrichtlinie auf "Verweigern" gesetzt wird (ursprünglich war es das Gegenteil von oben), sonst können Sie zwischen den beiden Schritten gesperrt werden.
Dann habe ich in jeder Rolle zusätzliche Firewall-Regeln für diese Rolle. Zum Beispiel habe roles/nginx/tasks/main.yml
ich in (unter anderem) Folgendes:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Also haben alle meine Nginx-Server die Ports 80 und 443 geöffnet.
Auf diese Weise können Sie die von Ihnen gewünschte allgemeine Konfiguration erstellen und zusätzliche Regeln in spezifischeren Rollen hinzufügen.
ferm
Wenn Sie Regeln haben, mit denen Sie ufw
nicht umgehen können, ist eine Lösung, die meiner Meinung nach gut funktioniert ferm
. es kann fast alles tun, und Sie können es so konfigurieren , Regeln aus Verzeichnissen wie zu lesen /etc/ferm/input.d/
, /etc/ferm/output.d/
, /etc/ferm/forward.d/
etc. Sie könnten Ihre machen common
Rolle die wesentliche Vorbereitung ferm
Konfiguration und haben dann andere Rollen Dateien in diesen Verzeichnissen löschen.
einfache Iptables
Ihre Forderung ansible
, Regeln zusätzlich zu Regeln festzulegen, die auf andere Weise festgelegt wurden, ist ungewöhnlich und widerspricht anscheinend den meisten Verwendungszwecken ansible
. Leider sehe ich keinen anderen Weg, als dies mit der Ebene zu tun iptables
, was ziemlich hässlich wäre. Hier ist ein Beispiel für das Öffnen von Port 80 in roles/nginx/tasks/main.yml
(ungetestet):
- 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
wo Save iptables
ist ein Handler, der ausführt iptables-save
. Das alles ist ziemlich mühsam zu schreiben, aber es könnte angebracht sein, besonders wenn Sie nur ein paar Regeln haben, mit denen Sie umgehen müssen ansible
.