Настройка UFW для приёма запросов от Yandex Forms через IPv6

    При интеграции сервиса Yandex Forms с вашим веб-приложением через HTTP-запросы часто возникает проблема: форма отправляет данные, но сервер их не получает. Ошибка обычно связана с неправильной конфигурацией файрвола (UFW) или веб-сервера (Nginx). Разберём, как правильно настроить приём запросов от Yandex Forms, используя асинхронное приложение на Quart (Flask) и UFW.

    Почему запросы не доходят при ограничении по IP?

    Yandex Forms использует только протокол IPv6 и отправляет данные с диапазона 2a02:6b8:c00::/40. Если вы открываете порт 80 для всех (anywhere), запросы проходят успешно. Но при попытке ограничить доступ только этим диапазоном - запросы блокируются. Основная причина: UFW по умолчанию может не корректно обрабатывать IPv6-правила, если не включена поддержка протокола. Также важно, чтобы правило было добавлено с правильным синтаксисом и без конфликтов с другими правилами.

    Пошаговая настройка UFW для Yandex Forms

    Шаг 1: Включите поддержку IPv6 в UFW

    Откройте файл конфигурации UFW:

    sudo nano /etc/default/ufw

    Найдите строку IPV6=no и измените её на IPV6=yes. Сохраните изменения.

    Шаг 2: Добавьте правило для диапазона Yandex Forms

    Используйте команду:

    sudo ufw allow from 2a02:6b8:c00::/40 proto tcp to any port 80

    Убедитесь, что правило добавлено. Проверьте список активных правил:

    sudo ufw status verbose

    Вы должны увидеть строку вида:

    80/tcp (v6) ALLOW 2a02:6b8:c00::/40

    Шаг 3: Удалите общее правило для порта 80 (если есть)

    Если ранее вы открывали порт 80 для всех IPv6 (например, ufw allow 80/tcp), удалите его, чтобы не было конфликтов:

    sudo ufw delete allow 80/tcp

    Шаг 4: Перезагрузите UFW

    Примените изменения:

    sudo ufw reload

    Настройка Nginx для проксирования на Quart

    Убедитесь, что Nginx слушает IPv6-адрес. В блоке server укажите:

    server {
        listen 80;
        listen [::]:80;
        server_name ваш-сервер-ip;
        location / {
            proxy_pass http://127.0.0.1:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    После изменений перезапустите Nginx:

    sudo systemctl restart nginx

    Проверка работы приложения на Quart

    Ваше тестовое приложение Quart должно принимать POST-запросы на корневой маршрут. Убедитесь, что оно запущено на 127.0.0.1:5000. Для отладки можно временно включить логирование UFW:

    sudo ufw logging on

    Проверьте логи в /var/log/ufw.log - там будут видны все заблокированные пакеты. Если запросы от Yandex Forms всё ещё блокируются, проверьте, что правило для диапазона стоит выше общего правила deny (если такое есть).

    Распространённые ошибки

    • Не включён IPv6 в UFW - по умолчанию UFW работает только с IPv4, и правило для IPv6 диапазона не применяется.
    • Конфликт правил - если есть правило allow 80/tcp для всех IPv6, оно может перезаписывать более узкое правило.
    • Nginx не слушает IPv6 - без директивы listen [::]:80; запросы по IPv6 не будут обработаны.
    • Ошибка в синтаксисе правила - убедитесь, что диапазон указан в формате CIDR: 2a02:6b8:c00::/40.

    Заключение

    Правильная настройка UFW для приёма запросов от Yandex Forms требует включения IPv6, добавления точного правила для диапазона 2a02:6b8:c00::/40 и корректной конфигурации Nginx. После выполнения всех шагов интеграция будет работать стабильно. Если проблема сохраняется, проверьте логи файрвола и убедитесь, что веб-сервер доступен по IPv6 из внешней сети.

    Часто задаваемые вопросы