Eu faço isso com grupos e a regra iptables -m owner --gid-owner
na corrente OUTPUT
.
O tráfego que sai do jumpbox é controlado de acordo com vários grupos:
# timesheet people go to the timesheet rule
iptables -A OUTPUT -m owner --gid-owner 401 -j TIMESHEET
# debt mgmt people go to the debt rule
iptables -A OUTPUT -m owner --gid-owner 402 -j DEBT
# end to end testing people
iptables -A OUTPUT -m owner --gid-owner 403 -j E2E
Em seguida, cada uma dessas cadeias personalizadas implementará um conjunto (às vezes bastante complexo) de regras sobre quais sistemas as pessoas que correspondem a essa cadeia podem acessar. Um simples pode ser:
# people in the primary group timesheet can go to the timesheet app http://192.168.12.38:17001/
iptables -A TIMESHEET -p tcp --dport 17001 -d 192.168.12.38 -j ACCEPT
# but can't do anything else, with logging
iptables -A TIMESHEET -j LOG --log-prefix "TIMESHEET REJECT: "
iptables -A TIMESHEET -j REJECT
Uma vez que isso esteja configurado, permitir o acesso é apenas uma questão de colocar alguém no grupo principal 401 (para o quadro de horários), 402 (para o gerenciamento da dívida) e assim por diante. Se eu quisesse permitir alta complexidade, eu poderia usar --uid-owner
e ter uma cadeia diferente para cada usuário, mas, em vez disso, mantenho minha vida um pouco mais simples com os grupos.