ufw
Ansible
ma ufw
moduł do obsługi reguł zapory. W roles/common/tasks/main.yml
, który jest zawarty na wszystkich moich serwerach, mam (między innymi):
- 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
Edycja : Należy zezwolić ssh przed ustawieniem domyślnej zasady na „odmawianie” (pierwotnie było odwrotnie powyżej), w przeciwnym razie możesz zostać zablokowany pomiędzy dwoma krokami.
Następnie w każdej roli mam dodatkowe reguły zapory dla tej roli. Na przykład, roles/nginx/tasks/main.yml
mam (między innymi) to:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Więc wszystkie moje serwery nginx mają otwarte porty 80 i 443.
W ten sposób możesz zbudować dowolną wspólną konfigurację i dodać dodatkowe reguły w bardziej szczegółowych rolach.
ferm
Jeśli masz zasady, których ufw
nie możesz sobie poradzić, jedno rozwiązanie, które moim zdaniem dobrze by działało, to ferm
; Można to zrobić niemal wszystko, i można go skonfigurować, aby przeczytać zasady z katalogów takich jak /etc/ferm/input.d/
, /etc/ferm/output.d/
, /etc/ferm/forward.d/
, itd. Można zrobić swoją common
rolę przygotować podstawową ferm
konfigurację, a następnie mają inne role upuścić pliki w tych katalogach.
proste iptables
Twoje wymaganie, aby ansible
określić reguły oprócz reguł określonych w inny sposób, jest niezwykłe i najwyraźniej przeczy większości punktów za używanie ansible
. Niestety nie widzę innego sposobu niż zwykły iptables
, co byłoby dość brzydkie. Oto przykład otwarcia portu 80 w roles/nginx/tasks/main.yml
(niesprawdzony):
- 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
gdzie Save iptables
jest program obsługi, który wykonuje iptables-save
. Wszystko powyższe jest dość żmudne w pisaniu, ale może być odpowiednie, szczególnie jeśli masz tylko kilka reguł do zarządzania ansible
.