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 перед установкой политики по умолчанию «deny» (изначально это было наоборот), в противном случае вы можете быть заблокированы между двумя шагами.
Затем в каждой роли у меня есть дополнительные правила брандмауэра для этой роли. Например, у 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.
Таким образом, вы можете создать любую обычную конфигурацию и добавить дополнительные правила в более конкретные роли.
FERM
Если у вас есть правила, которые 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
.