Настройте nftables, чтобы разрешить соединения только через VPN и заблокировать весь IPv6 трафик.

Вопрос или проблема

Я пытаюсь настроить брандмауэр nftables на своем дистрибутиве Arch Linux, который позволяет пропускать трафик только через VPN (и блокирует весь трафик IPv6, чтобы предотвратить утечки IPv6).

Я несколько времени экспериментировал с этим и в итоге получил конфигурацию, которая позволяет мне просматривать веб, хотя, насколько я понимаю nftables на данный момент, это не должно быть возможным. Набор правил довольно короткий и выглядит следующим образом:

table inet filter {
    chain input {
            type filter hook input priority 0; policy drop;
            jump base_checks
            ip saddr VPN_IP_ADRESS udp sport openvpn accept
    }

    chain forward {
            type filter hook forward priority 0; policy drop;
    }

    chain output {
            type filter hook output priority 0; policy drop;
            ip daddr VPN_IP_ADRESS udp dport openvpn accept
            oifname "tun0" accept
    }

    chain base_checks {
            ct state { related, established} accept
            ct state invalid drop
    }
}

Я пытался разобраться методом проб и ошибок и у меня было много других правил, но только с этим я могу сначала подключиться к VPN-серверу, а затем просматривать веб. Однако, если я удаляю последнее правило из цепочки output, я больше не могу просматривать веб.

Я абсолютно нов в этом и, в общем-то, не имею понятия, пытаясь учиться. К сожалению, документация по nftables не такая обширная, так что я немного застрял на данный момент.

Насколько я понимаю, эта настройка должна позволить установить соединение с VPN, но она не должна позволять любой другой входящий трафик – однако я могу спокойно просматривать веб.

Кто-нибудь знает, почему это работает и как мне следует продолжить настройку nftables для того, чтобы получить более полную настройку?

Вы позволяете входящий трафик с помощью state related и established. HTTP-трафик инициируется вашим клиентом, отправляющим запрос, ответы будут соответствовать правилу established в цепочке output. Предполагая, что ваш маршрут проходит через VPN, первоначальный исходящий трафик принимается вашим правилом oif "tun0" accept.

Ответ или решение

Настройка nftables для разрешения соединений только через VPN и блокировки всего трафика IPv6

Для настройки межсетевого экрана nftables на вашей системе Arch Linux с целью разрешить соединения только через VPN, а также заблокировать весь трафик IPv6, вам необходимо следовать определенным шагам и учитывать некоторые ключевые аспекты.

Основные принципы работы с nftables

Система nftables использует концепцию таблиц, цепочек и правил для фильтрации трафика. Ваша изначальная конфигурация уже содержит несколько основных правил, но давайте пройдемся по ним более детально и добавим нужные элементы.

Шаг 1: Создание и редактирование конфигурации

Для начала создайте файл конфигурации для nftables. Вы можете использовать любой текстовый редактор, bijvoorbeeld nano или vim:

sudo nano /etc/ngnftables.conf

Шаг 2: Конфигурация nftables

В приведенном ниже примере настраивается таблица и цепочки для приема, пересылки и выхода трафика:

table inet filter {
    # Цепочка для входящего трафика
    chain input {
        type filter hook input priority 0; policy drop;

        # Разрешаем установленные соединения
        ct state { related, established } accept

        # Блокируем весь IPv6 трафик
        ip6 protocol udp drop
        ip6 protocol tcp drop

        # Разрешаем трафик только для соединения с VPN-сервером
        ip saddr VPN_IP_ADDRESS udp sport openvpn accept
    }

    # Цепочка для пересылаемого трафика
    chain forward {
        type filter hook forward priority 0; policy drop;

        # Разрешаем пересылку только для трафика через VPN
        iifname "tun0" accept
        oifname "tun0" accept
    }

    # Цепочка для исходящего трафика
    chain output {
        type filter hook output priority 0; policy drop;

        # Разрешаем исходящий трафик только через VPN
        oifname "tun0" accept

        # Разрешаем установленным соединениям
        ct state { established, related } accept

        # Разрешаем трафик на VPN-сервер
        ip daddr VPN_IP_ADDRESS udp dport openvpn accept
    }
}

Шаг 3: Применение конфигурации

После того как вы создали файл конфигурации, примените его с помощью следующей команды:

sudo nft -f /etc/nftables.conf

Шаг 4: Проверка работы

Для проверки работы новых правил используйте команду:

sudo nft list ruleset

Это отобразит активные правила, и вы сможете убедиться, что изменения были применены.

Объяснение работы правил

  1. Цепочка input: Данная цепочка обрабатывает входящий трафик. Правила позволяют устанавливать соединения, относящиеся к уже установленным соединениям, и принимать трафик, приходящий с вашего VPN-сервера. Захватываем также блокировку IPv6 трафика на уровне входа.

  2. Цепочка forward: Эта цепочка обрабатывает трафик, который пересылается через ваше устройство. Разрешается пересылка только для интерфейса tun0, который обычно используется для VPN-соединений.

  3. Цепочка output: Данная цепочка обрабатывает исходящие соединения. Все исходящие соединения разрешаются только в условиях, когда они идут через interface tun0 или являются частью уже установленного соединения.

Дополнительные рекомендации

  • Убедитесь, что у вас активирован модуль nftables в systemd, чтобы сетевые правила применялись автоматически при перезагрузке системы.
  • Для увеличения безопасности рассмотрите возможность установки дополнительных правил для блокировки нежелательного трафика на основе IP-адресов, портов и протоколов.

Заключение

Ваше изначальное понимание работы nftables неплохо, но требуется небольшая доработка для достижения ожидаемого результата. Приведенные выше шаги помогут вам настроить ваш межсетевой экран, позволяя только трафик через VPN и блокируя IPv6. Надеюсь, это руководство будет вам полезно в освоении nftables и обеспечении безопасного подключения через VPN.

Оцените материал
Добавить комментарий

Капча загружается...