OS X 10.8: redirección de conexiones ssh iniciadas localmente a localhost:22

OS X 10.8: redirección de conexiones ssh iniciadas localmente a localhost:22

Necesito hackear OS X pf para redirigir todas las conexiones ssh de un usuario a esta máquina. quiero, al hacer

$ ssh google.com

para obtener los mismos resultados que con

$ ssh localhost

es decir, una conexión a mi sshd que se ejecuta localmente.

En un Linux reciente, esto sería simplemente:

# iptables -t nat -A OUTPUT -p tcp --dport 22 -m owner --uid-owner theuser -j REDIRECT

En OS X 10.8, parece haber dos métodos: ipfw y pf. Ninguno de los dos funciona. Ipfw:

# ipfw flush
# ipfw add 50 fwd 127.0.0.1,22 tcp from any to any 22 uid theuser

Si dejo caer la uid theuserparte, la redirección funciona, menos el problema del usuario. Si dejo la uiddirectiva ahí, la pila de red muere y el sistema pronto queda inutilizable; No más ipfw, no más ps, no más kill.

Según las páginas de manual, ipfw está en desuso, por lo que se debe utilizar un filtro de paquetes en su lugar:

# sysctl -w net.inet.ip.forwarding=1

Luego agregué

anchor "910.Custom/*"
load anchor "910.Custom" from "/etc/pf.anchors/910.Custom"

/etc/pf.anchors/com.appley en

rdr on en1 proto TCP from any to any port 22 -> 127.0.0.1 port 22

en /etc/pf.anchors/910.Custom(observe cómo no menciono nada sobre un usuario aquí, ya que los documentos de pf no incluyen dicha opción para las reglas de rdr).

Después de ejecutar # pfctl -ef /etc/pf.anchors/com.appleno pasa nada. Si agrego basura a la regla /etc/pf.anchors/910.Customo incluso si me atrevo a agregarla user theuserdespués rdr, el firewall se queja ocasionalmente de la mala sintaxis.

¿Puede el kernel de OS X seguir realizando enrutamiento NAT, o Apple eliminó esa funcionalidad? Si es posible, ¿me falta algo?

LE. iptablessintaxis fija

Respuesta1

Puedes hacerlo con PF también. Sin embargo, rdrsólo acepta paquetes entrantes. Por lo tanto, primero debe enrutar esos paquetes a lo0, luego agregar una rdrregla allí (que los detectará ya que serán enrutados desde "algún lugar") para enviarlos a su servidor SSH local.

El orden es necesariamente: rdrcosas, luego filtrar cosas (como pasar), pero cronológicamente la segunda regla aparecerá primero (en $Out), lo que luego activará la primera regla (en lo0).

# Output interface
Out = en0

# A macro to shorten rules below
Packets = "proto tcp from" $Out "to any port 22"

# Rule 1: Redirect those connections _after_ they were routed to lo0 below
rdr pass log on lo0 $Packets -> 127.0.0.1

# Rule 2: Route _first_ new IPv4 TCP connections leaving $Out to lo0
pass out on $Out route-to lo0 inet $Packets

información relacionada