Eu preciso hackear o OS X pf para redirecionar todas as conexões ssh de um usuário para esta máquina. Eu quero, ao fazer
$ ssh google.com
para obter os mesmos resultados que com
$ ssh localhost
ou seja, uma conexão com o meu sshd em execução localmente.
Em um Linux recente, isso seria simplesmente:
# iptables -t nat -A OUTPUT -p tcp --dport 22 -m owner --uid-owner theuser -j REDIRECT
No OS X 10.8, parece haver dois métodos - ipfw e pf. Nenhum dos dois funciona.
Ipfw:
# ipfw flush
# ipfw add 50 fwd 127.0.0.1,22 tcp from any to any 22 uid theuser
Se eu derrubar a parte uid theuser
, o redirecionamento funcionará, menos a coisa do usuário. Se eu deixar a diretiva uid
, a pilha de rede morre e o sistema logo se torna inutilizável; não mais ipfw
, não mais ps
, não mais kill
.
De acordo com as man pages, o ipfw é obsoleto, então o filtro de pacotes deve ser usado em seu lugar:
# sysctl -w net.inet.ip.forwarding=1
Então eu adicionei
anchor "910.Custom/*"
load anchor "910.Custom" from "/etc/pf.anchors/910.Custom"
em /etc/pf.anchors/com.apple
e
rdr on en1 proto TCP from any to any port 22 -> 127.0.0.1 port 22
em /etc/pf.anchors/910.Custom
(observe como eu não estou mencionando nada sobre um usuário aqui, já que os documentos do pf não listam tal opção para as regras do rdr).
Depois de executar # pfctl -ef /etc/pf.anchors/com.apple
, nada acontece. Se eu adicionar lixo a /etc/pf.anchors/910.Custom
ou mesmo se eu ousar adicionar user theuser
após a regra rdr
, o firewall reclama da má sintaxe.
O kernel do OS X pode até mesmo executar o roteamento NAT, ou a Apple arrancou essa funcionalidade? Se puder, estou faltando alguma coisa?
LE. % de sintaxe fixaiptables