From 7e64d76d02bf565cec6bfe02aa76f786e0891754 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 22 Aug 2026 18:00:24 +0300 Subject: [PATCH] =?UTF-8?q?ufw:=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=BE=20=D0=B4=D0=BB=D1=8F=20zabbix-=D0=B0=D0=B3=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=20=D0=B8=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20all-setup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Порт 10050 (агент Timeweb) открыт только опросчикам хостера из Server= его конфига, а не всему интернету. - playbook-ufw.yml добавлен в playbook-all-setup.yml перед docker: раньше он запускался только руками и после переезда на Timeweb не был прогнан вовсе — на сервере ufw до сих пор с ENABLED=no и пустым набором правил. - В шапке плейбука зафиксировано, что ufw не закрывает порты, опубликованные докером: они идут мимо цепочки INPUT. --- playbook-all-setup.yml | 3 +++ playbook-ufw.yml | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) 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