После многочисленных поисков мне удалось ограничить сетевой трафик только VPN-интерфейсом tun0 с помощью следующей команды:
sudo iptables -A OUTPUT -m owner --uid-owner deluge \! -o tun0 -j REJECT
Но теперь я не могу получить доступ к WebUI через eth0 на порту 8112 (т.е. 192.168.0.23:8112)
Могу ли я использовать другое правило iptables для предоставления доступа к WebUI в локальной сети?
решение1
Это заставит Deluge использовать только VPN-туннель, за исключением вашей локальной подсети.
iptables -A OUTPUT -m owner --uid-owner deluge ! -d 192.168.1.0/24 \! -o tun0 -j REJECT
Логика заключается в том, что он блокирует весь ВЫХОД, который не является VPN-туннелем, за исключением локальной подсети.
Убедитесь, что вы проверили, какой пользователь использует ваш deluge. и настройте подсеть, чтобы она соответствовала вашей. Также проверьте в ifconfig, что имя вашего туннеля, в моем примере, tun0
решение2
Другой способ — разрешить VPN-подключению и веб-интерфейсу работать только через eth0 и заблокировать все остальное:
-A INPUT -s my.vpn.net -i eth0 -p udp -m udp --sport 1194 -j ACCEPT
-A INPUT -s my.local.ip -i eth0 -p udp -m udp --sport 8112 -j ACCEPT
-A INPUT ! -i tun0 -j DROP
-A OUTPUT -d my.vpn.net -o eth0 -p udp -m udp --dport 1194 -j ACCEPT
-A OUTPUT -d my.local.ip -i eth0 -p udp -m udp --sport 8112 -j ACCEPT
-A OUTPUT ! -o tun0 -j DROP
решение3
Использование контейнеров (LXC/LXD/Docker):
Если вы запустите интерфейс Wireguard на хосте, а затем добавите интерфейс в контейнер, в котором запущен Deluge, как единственный интерфейс, то доступ будет ограничен исключительно интерфейсом Wireguard.
Вы можете добавить прокси-устройство, которое привязывается к порту webui на локальном хосте внутри контейнера и прослушивает любой адрес на хосте.
Iptables не нужен.