Вопрос или проблема
Я пытаюсь настроить брандмауэр 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
Это отобразит активные правила, и вы сможете убедиться, что изменения были применены.
Объяснение работы правил
-
Цепочка input: Данная цепочка обрабатывает входящий трафик. Правила позволяют устанавливать соединения, относящиеся к уже установленным соединениям, и принимать трафик, приходящий с вашего VPN-сервера. Захватываем также блокировку IPv6 трафика на уровне входа.
-
Цепочка forward: Эта цепочка обрабатывает трафик, который пересылается через ваше устройство. Разрешается пересылка только для интерфейса
tun0
, который обычно используется для VPN-соединений. -
Цепочка output: Данная цепочка обрабатывает исходящие соединения. Все исходящие соединения разрешаются только в условиях, когда они идут через interface
tun0
или являются частью уже установленного соединения.
Дополнительные рекомендации
- Убедитесь, что у вас активирован модуль
nftables
в systemd, чтобы сетевые правила применялись автоматически при перезагрузке системы. - Для увеличения безопасности рассмотрите возможность установки дополнительных правил для блокировки нежелательного трафика на основе IP-адресов, портов и протоколов.
Заключение
Ваше изначальное понимание работы nftables неплохо, но требуется небольшая доработка для достижения ожидаемого результата. Приведенные выше шаги помогут вам настроить ваш межсетевой экран, позволяя только трафик через VPN и блокируя IPv6. Надеюсь, это руководство будет вам полезно в освоении nftables и обеспечении безопасного подключения через VPN.