SSH 원격 포트 전달 터널을 통해 원격 IP 주소를 얻는 방법은 무엇입니까?

SSH 원격 포트 전달 터널을 통해 원격 IP 주소를 얻는 방법은 무엇입니까?

NAT 뒤에서 테스트 서버를 운영하고 있습니다. 아래와 같이 2222다른 공인 IP 서버( example.com) 의 원격 포트를 22NAT 뒤의 서버 포트( )로 전달해 주었습니다 .localhost

autossh -f -N -i /root/.ssh/id_rsa -R 2222:localhost:22 [email protected]

ssh이제 NAT 뒤의 로컬 서버는 ::1클라이언트의 실제 IP 주소에 관계없이 모든 클라이언트의 IP 주소만 가져옵니다.

win의 출력은 localhost다음과 같습니다.

 22:27:37 up  8:03,  2 users,  load average: 0.03, 0.03, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user tty7     :0               14:24    8:03m  1.27s  0.33s /usr/bin/lxsession -s LXDE-pi -e LXDE
user pts/0    ::1              22:27    1.00s  0.34s  0.03s w

/var/log/auth.loglocalhost이런 글이 있군요

Feb 28 22:27:32 localhost sshd[5201]: Accepted password for user from ::1 port 55168 ssh2

fail2ban이제 스팸 IP 주소를 차단하기 위해 방화벽을 실행하고 싶습니다 csf. 그래서 클라이언트의 실제 IP 주소를 원합니다. 어떻게 해야 하나요? iptables NAT규칙을 다시 작성하는 것이 도움이 될까요?

답변1

이것SSH 프로토콜 메시지TCP 전달 세션을 여는 데 사용되는 IP 주소와 포트에는 전달 포트에 연결하는 클라이언트가 포함됩니다. OpenSSH ssh유틸리티는 정보만 기록할 뿐 다른 작업은 수행하지 않습니다.

$ ssh -v -R 2048:localhost:22 localhost
...
debug1: client_request_forwarded_tcpip: listen localhost port 2048, originator ::1 port 49341
                                                                    ^^^^^^^^^^^^^^^^^^^^^^^^^

이 정보를 활용하여 유용한 작업을 수행하려면 다음 중 하나를 수행해야 합니다.

  • 디버그 모드에서 실행 ssh하고 관련 디버그 출력을 캡처하고 구문 분석합니다.
  • 조정ssh정보를 기록하거나 필요한 작업을 수행하는 유틸리티입니다.
  • 다른 SSH 클라이언트를 사용하거나 직접 작성하세요. 대부분의 최신 프로그래밍 언어에 대한 SSH 라이브러리가 존재합니다.

관련 정보