Ajuda com regra iptables, como permitir porta antes da regra REJECT?

0

Estou usando o iptables para marcar pacotes para o usuário vpn e fazer tunelamento dividido. O usuário vpn é tunelado pela interface tun0 e outros usuários têm acesso direto à internet. Tudo funciona como esperado, mas tenho um problema com uma regra REJECT, ou seja, não entendo exatamente o que essa regra está fazendo e a sintaxe. Agora eu gostaria de abrir uma porta sobre a conexão vpn. Eu posso fazer isso quando eu remover a última regra de rejeição de saída, então funciona muito bem. Qual regra devo adicionar antes da regra REJECT para permitir que a porta funcione e ainda manter a regra REJECT?

export INTERFACE="tun0"
export VPNUSER="vpn"
export LOCALIP="192.168.1.28"
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

# 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

# allow open TCP port 47657

iptables -A INPUT i $INTERFACE -p tcp --dport 47657 -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

O problema está na última linha:

iptables -A OUTPUT ! --src $LOCALIP -o $NETIF -j REJECT

1) Eu não entendo o que exatamente esta linha faz, e a sintaxe.

2) Se eu remover esta última linha, a porta 47657 está aberta e ativa. Se a linha acima estiver incluída, a porta será fechada. Qual regra devo inserir antes da regra OUTPUT REJECT para abrir apenas a porta 47657?

Muito obrigado!

    
por gurabli 12.09.2016 / 14:40

1 resposta

0

Algo assim:

iptables -I INPUT -p tcp --dport 47657 -j ACCEPT

Se o TCP for o protocolo que você usará nessa porta. Lembre-se que: -A é acrescentar uma regra em IPTABLES, sempre colocará no final. Se você usar -I é dar prioridade para que ele coloque a regra no início das regras. Você pode precisar colocá-lo em uma posição exata se tiver mais regras que possam interferir nessa regra.

    
por Adonist 12.09.2016 / 15:24