NAT 뒤에서 테스트 서버를 운영하고 있습니다. 아래와 같이 2222
다른 공인 IP 서버( example.com
) 의 원격 포트를 22
NAT 뒤의 서버 포트( )로 전달해 주었습니다 .localhost
autossh -f -N -i /root/.ssh/id_rsa -R 2222:localhost:22 [email protected]
ssh
이제 NAT 뒤의 로컬 서버는 ::1
클라이언트의 실제 IP 주소에 관계없이 모든 클라이언트의 IP 주소만 가져옵니다.
w
in의 출력은 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.log
localhost
이런 글이 있군요
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 라이브러리가 존재합니다.