iptables para definir o IP de origem, dependendo do ID do usuário local

1

Eu tenho dois usuários, alfa (uid 500) e beta (uid 501), e dois endereços IP atribuídos como eth0 e eth0: 1. Eu gostaria que todos os pacotes de saída originados pelos processos iniciados pelo usuário alpha fossem marcados com o endereço IP de origem de eth0, e todos os pacotes dos processos do usuário beta fossem marcados com o endereço IP de origem de eth0: 1.

Pesquisando as respostas disponíveis neste fórum e em outros lugares, descobri que deveria fazer algo assim:

# mark packets with 11 or 12 depending which user they came from:
iptables -A OUTPUT -m owner --uid-owner 500 -j MARK --set-mark 11
iptables -A OUTPUT -m owner --uid-owner 501 -j MARK --set-mark 12

# now, for a packet having mark 11 (or 12), set source IP to  192.168.1.1 (or .2) 
iptables -t nat -I POSTROUTING -m connmark  --mark 11 -j SNAT --to-source 192.168.1.1
iptables -t nat -I POSTROUTING -m connmark  --mark 12 -j SNAT --to-source 192.168.1.2

O acima funcionaria? Existe uma configuração mais simples (uma etapa, em vez de duas etapas)? Como posso usar o tcpdump para verificar se funciona, de fato?

    
por mario 16.07.2014 / 22:59

1 resposta

0

Infelizmente, devido à maneira como o netfilter funciona, você não pode fazer uma configuração de "um passo".

  • Os proprietários de pacotes só podem ser detectados na cadeia OUTPUT, mas
  • O SNAT só pode ser executado na cadeia POSTROUTING

Dito isso, em vez de usar o SNAT, recomendo usar uma combinação de netfilter e iproute2 , por exemplo:

Para netfilter :

iptables -A OUTPUT -m owner --uid-owner 500 -j MARK --set-mark 500
iptables -A OUTPUT -m owner --uid-owner 501 -j MARK --set-mark 501

Para iproute2 :

ip rule add fwmark 500 table 500
ip rule add fwmark 501 table 501

ip route add default via $gateway dev eth0 src $ip_eth0   table 500
ip route add default via $gateway dev eth0 src $ip_eth0_1 table 501
    
por 10.08.2014 / 14:35