사용자의 모든 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