Exclui Port From Mangling? (Permitindo Portas Específicas para Ignorar VPN)

0

Eu configurei uma configuração de túnel dividido em minha máquina Linux que transmite todo o tráfego executado da conta vpnsandbox por meio de uma VPN. Estou usando o procedimento encontrado aqui . Gostaria de permitir que determinadas portas ignorem a VPN.

Eu acredito que a regra do iptables que precisa ser alterada é:

iptables -t mangle -A OUTPUT ! --dest $LOCALIP -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1

Eu tentei três variantes na regra.

  1. Item da lista

O primeiro adicionou uma exclusão para a porta 4000, mas derrubou completamente o túnel dividido. A segunda tentativa foi criar uma regra de correspondência apenas para a porta 4000 e colocá-la antes da regra de mangle acima, mas posso ter errado.

1) iptables -t mangle -A OUTPUT ! --dest $LOCALIP ! --dport 4000 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
2) iptables -t mangle -A OUTPUT -m owner --uid-owner $VPNUSER --dport 4000 -j ACCEPT
3) iptables -t mangle -A OUTPUT ! --dest $LOCALIP -m owner --uid-owner $VPNUSER --sport 58846 -j MARK --set-mark 0x0 

Idealmente, a solução será uma que eu possa repetir para outras portas, conforme necessário.

(Eu já confirmei que a conexão de entrada funciona. É apenas a saída que é o problema.)

Regras completas do iptables:

#! /bin/bash
# Niftiest Software – www.niftiestsoftware.com
# Modified version by HTPC Guides – www.htpcguides.com

export INTERFACE="tun0"
export VPNUSER="vpnsandbox"
export LOCALIP="999.999.999.999"
export NETIF="eth0"

# flushes all the iptables rules, if you have other rules to use then add them into the script
iptables -F -t nat
iptables -F -t mangle
iptables -F -t filter

#> Add my rules
iptables -A INPUT -i $NETIF -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $NETIF -p tcp -m tcp --dport 4000 -j ACCEPT
iptables -A INPUT -i $NETIF -p icmp -j ACCEPT
iptables -A INPUT -i $NETIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# mark packets from $VPNUSER
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark 
iptables -t mangle -A OUTPUT ! --dest $LOCALIP -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p udp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT --dest $LOCALIP -p tcp --dport 53 -m owner --uid-owner $VPNUSER -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT ! --src $LOCALIP -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -j CONNMARK --save-mark

# allow responses
iptables -A INPUT -i $INTERFACE -m conntrack --ctstate ESTABLISHED -j ACCEPT

# block everything incoming on $INTERFACE to prevent accidental exposing of ports
iptables -A INPUT -i $INTERFACE -j REJECT

# let $VPNUSER access lo and $INTERFACE
iptables -A OUTPUT -o lo -m owner --uid-owner $VPNUSER -j ACCEPT
iptables -A OUTPUT -o $INTERFACE -m owner --uid-owner $VPNUSER -j ACCEPT

# all packets on $INTERFACE needs to be masqueraded
iptables -t nat -A POSTROUTING -o $INTERFACE -j MASQUERADE

# reject connections from predator IP going over $NETIF
iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT

# Start routing script
/etc/openvpn/routing.sh

exit 0
    
por Brandon Lebedev 06.03.2018 / 04:43

0 respostas