diff --git a/playbook-all-setup.yml b/playbook-all-setup.yml index 3a85355..00a5421 100644 --- a/playbook-all-setup.yml +++ b/playbook-all-setup.yml @@ -2,6 +2,9 @@ - name: 'Configure system' ansible.builtin.import_playbook: playbook-system.yml +- name: 'Configure firewall' + ansible.builtin.import_playbook: playbook-ufw.yml + - name: 'Configure docker' ansible.builtin.import_playbook: playbook-docker.yml diff --git a/playbook-ufw.yml b/playbook-ufw.yml index 6d10c30..4979268 100644 --- a/playbook-ufw.yml +++ b/playbook-ufw.yml @@ -1,7 +1,19 @@ --- +# ufw фильтрует только цепочку INPUT, то есть хостовые сервисы (sshd, +# zabbix-агент). Порты, опубликованные докером (80, 443, 2222), идут через +# PREROUTING/FORWARD мимо ufw — закрыть их можно только правкой `ports:` в +# docker-compose соответствующего приложения. - name: "Configure UFW firewall" hosts: all + vars: + # Опросчики Zabbix у Timeweb: только им нужен доступ к агенту на хосте. + # Список — из Server= в /etc/zabbix/zabbix_agentd.conf. + zabbix_poller_ips: + - "92.53.116.12" + - "92.53.116.111" + - "92.53.116.119" + tasks: - name: "Ensure UFW is installed" ansible.builtin.apt: @@ -49,6 +61,17 @@ port: "443" proto: udp + # Агент хостера слушает 0.0.0.0:10050 и сам проверяет адрес источника, + # но держать порт открытым для всего интернета незачем. + - name: "Allow Zabbix agent on port 10050 from Timeweb pollers" + community.general.ufw: + rule: allow + src: "{{ item }}" + port: "10050" + proto: tcp + comment: "Timeweb zabbix poller" + loop: "{{ zabbix_poller_ips }}" + - name: "Enable UFW" community.general.ufw: state: enabled