--- # 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: name: ufw state: present update_cache: true - name: "Set default incoming policy to deny" community.general.ufw: direction: incoming policy: deny - name: "Set default outgoing policy to allow" community.general.ufw: direction: outgoing policy: allow - name: "Allow SSH on port 22" community.general.ufw: rule: allow port: "22" proto: tcp - name: "Allow Gitea SSH on port 2222" community.general.ufw: rule: allow port: "2222" proto: tcp - name: "Allow HTTP on port 80/tcp" community.general.ufw: rule: allow port: "80" proto: tcp - name: "Allow HTTPS on port 443/tcp" community.general.ufw: rule: allow port: "443" proto: tcp - name: "Allow HTTPS QUIC on port 443/udp" community.general.ufw: rule: allow 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 logging: true