ufw
Ansible
має ufw
модуль для обробки правил брандмауера. У системі roles/common/tasks/main.yml
, яка входить у всі мої сервери, я маю (серед іншого):
- 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
Редагувати : Необхідно дозволити ssh перед встановленням політики за замовчуванням "відмовити" (спочатку це було навпаки вище), інакше вас можуть заблокувати між двома кроками.
Потім у кожній ролі у мене є додаткові правила брандмауера для цієї ролі. Наприклад, у roles/nginx/tasks/main.yml
мене є (серед іншого) це:
- name: Allow nginx firewall
ufw: proto=tcp port=80 rule=allow
- name: Allow nginx ssl firewall
ufw: proto=tcp port=443 rule=allow
Тож у всіх моїх серверах nginx відкриті порти 80 та 443.
Таким чином ви можете будувати будь-яку загальну конфігурацію, яку хочете, і додавати додаткові правила в більш конкретних ролях.
ферм
Якщо у вас є правила, які ufw
не в змозі впоратися, одне рішення, на мою думку, спрацювало б добре ferm
; він може робити майже все, і ви можете налаштувати його для читання правил з каталогів , такі як /etc/ferm/input.d/
, /etc/ferm/output.d/
, /etc/ferm/forward.d/
і т.д. Ви можете зробити вашу common
роль підготувати необхідну ferm
конфігурацію і потім інші ролі перетягувати файли в цих каталогах.
прості iptables
Ваша вимога мати ansible
додаткові правила, крім правил, визначених іншим способом, є незвичною і, очевидно, не відповідає більшості пунктів для використання ansible
. На жаль, я не бачу жодного способу зробити це, крім звичайної iptables
, що було б досить потворно. Ось приклад відкриття порту 80 в roles/nginx/tasks/main.yml
(неперевірений):
- 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
де Save iptables
обробник, який виконує iptables-save
. Все вищесказане написати досить нудно, але це може бути доречно, особливо якщо у вас є лише кілька правил, якими можна керувати ansible
.