OS X 10.8: 로컬에서 시작된 SSH 연결을 localhost:22로 리디렉션

OS X 10.8: 로컬에서 시작된 SSH 연결을 localhost:22로 리디렉션

사용자의 모든 SSH 연결을 이 컴퓨터로 리디렉션하려면 OS X pf를 해킹해야 합니다. 내가 원할 때, 할 때

$ ssh google.com

와 같은 결과를 얻으려면

$ ssh localhost

즉, 로컬로 실행 중인 sshd에 대한 연결입니다.

최근 Linux에서는 다음과 같습니다.

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

OS X 10.8에는 ipfw와 pf라는 두 가지 방법이 있는 것으로 보입니다. 둘 다 작동하지 않습니다. Ipfw:

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

해당 부분을 삭제하면 uid theuser사용자 항목을 제외하고 리디렉션이 작동합니다. 지시문을 그대로 두면 uid네트워크 스택이 종료되고 시스템이 곧 사용할 수 없게 됩니다. 더 이상 ipfw, 더 이상 ps, 더 이상은 안 됩니다 kill.

매뉴얼 페이지에 따르면 ipfw는 더 이상 사용되지 않으므로 대신 패킷 필터를 사용해야 합니다.

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

그런 다음 추가했습니다.

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

/etc/pf.anchors/com.apple

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

(pf 문서에는 rdr 규칙에 대한 그러한 옵션이 나열되어 있지 않기 때문에 여기서 /etc/pf.anchors/910.Custom사용자에 대해 어떻게 언급하지 않는지 확인하십시오.)

실행한 후에는 # pfctl -ef /etc/pf.anchors/com.apple아무 일도 일어나지 않습니다. 규칙에 쓰레기를 추가하거나 /etc/pf.anchors/910.Custom감히 규칙 user theuser뒤에 추가하더라도 rdr방화벽은 잘못된 구문에 대해 변덕스럽게 불평합니다.

OS X 커널은 더 이상 NAT 라우팅을 수행할 수 있습니까? 아니면 Apple이 해당 기능을 없앴습니까? 가능하다면 내가 놓친 것이 있습니까?

르. 고정 iptables구문

답변1

PF로도 할 수 있습니다. 그러나 rdr들어오는 패킷만 허용합니다. 따라서 먼저 해당 패킷을 lo0으로 라우팅한 다음 rdr거기에 -rule을 추가하여("어딘가"에서 라우팅될 때 이를 포착함) 로컬 SSH 서버로 보내야 합니다.

순서는 반드시 다음과 같습니다. rdr물건을 넣은 다음 물건을 필터링합니다(예: 통과). 그러나 시간순으로 두 번째 규칙이 먼저 적용되고(on $Out) 첫 번째 규칙(on 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

관련 정보