일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 생성패턴 행위패턴 구조패턴
- 디자인패턴
- gof design pattern
- 팬인과 팬아웃
- 상태다이어그램
- ssh
- base64
- 모듈구조도
- cron
- 소프트웨어공학 디자인패턴
- factory metohd pattern
- 클래스 관계
- prototypepattern 예시 example
- 매크로를 바라보는 시각
- nc reverse shell
- strucuture charat
- status diagram
- Bandit
- usecase description
- fan-in fan-out
- 리버스쉘
- 객체 상속 속성 인스턴스 메소드 오퍼레이션
- sofrware architeture
- 암표거래
- madia designer ui design
- 구조적 설계
- telnet
- ui 디자인 기본원칙
- UseCase
- bandit21
- Today
- Total
2.log
포트 포워딩과 SSH 포트포워딩/터널링에 대하여 본문
포트포워딩?
네트워크 연결을 설정하여 한 컴퓨터나 기기에서 다른 컴퓨터나 기기로 연결을 전달(forwarding)하는 기술로, 주로 외부 네트워크에서 내부 네트워크로의 접속을 가능하게 해주는데 사용 되며(ex, 인터넷 공유기), 서버 간 원격 접속에서도 사용 가능.
만약 2대의 pc 를 같은 포트로 포트포워딩 할 경우 우선순위가 높은 쪽으로 적용 됨
포트포워딩을 하는 이유?
IP 주소의 부족과 관리 관점
전 세계 모든 컴퓨터에 고유한 IP 주소를 모두 부여하는 것은 불가능 하기에 IP 할당을 효율적으로 관리하기 위해 공인 IP 주소와 사설 IP 주소로 나누어 사용하게 됨. 이 때, 공인 IP 주소는 인터넷 서비스 제공자(ISP)로 부터 할당받은 IP 주소로, 이를 통해 인터넷에 접속이 가능한데, 이러한 공인 IP 주소는 앞서 말했듯이 유한하고 절대적으로 부족하므로 대부분 가정이나 회사에서는 사설 IP 주소를 사용하게 됨. 사설 IP 주소는 로컬 네트워크 내에서만 사용 가능하며, 공인 IP 주소와는 다른 IP 대역을 사용 함
[공인 IP 대역]
- 인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(Internet Service Provider) 가 제공하는 IP 주소 (전 세계 유일)
- 공용 IP 주소, 외부에 공개된 IP 주소(공개되어 있기에 인터넷에 연결된 다른 PC로부터의 접근이 가능)
- 공개되어 있기에 공인 IP 주소를 사용하는 경우 방화벽 등 보안 프로그램 설치 필요
- SK, KT, KT 등 통신사 통하여 사용하고 있는 인터넷 망
0.0.0.1 ~ 127.255.255.255 128.0.0.0 ~ 191.255.255.255 192.0.0.0 ~ 233.255.255.255 224.0.0.0 ~ 239.255.255.255 240.0.0.0.0 ~ 255.255.255.255 |
[사설 IP 대역]
- 일반 가정이나 회사 내에서 할당된 네트워크 IP 주소
- 로컬IP, 가상IP라고도 불리며 IPv4 의 주소 부족으로 인해 서브넷팅된 IP 이기에 라우터에 의해 로컬 NW 상의 PC 나 장치에 할당 됨
- 인터넷 고유기에 연결된 PC, TV, 스마트 폰 등이 대표적 사설 IP 주소
- 외부에 공개되지 않아 외부에서 검색 및 접근 불가능한 IP
10.0.0.0 ~ 10.255.255.255 172.16.0.0 ~ 172.31.255.255 192.168.0.0 ~ 192.168.255.255 |
일반적으로, 외부에서 내부망의 컴퓨터에 접근하려면 내부망에서 사용하는 IP 주소로는 접근이 불가능하기에 내부망에서 사용하는 IP 주소와 외부망에서 접근 가능한 IP 주소를 매핑해 줄 필요가 있음. 포트포워딩이 바로 이 기능을 하여 외부에서도 내부망에 있는 컴퓨터에 접근할 수 있게 해주며, 내부망의 컴퓨터를 외부에서 접근해 원격제어 할 수 있게 됨. 또한 공인 IP 주소 하나로 여러개의 사설 IP 주소를 관리할 수 있기에 여러 대의 디바이스 역시 한 번에 관리 가능함
공유기 포트포워딩
[원문참고]
SSH 포트 포워딩/터널링
SSH 포트 포워딩은 SSH 서버를 게이트웨이 or 프록시 서버처럼 활용해 외부 접속을 하는 것으로 터널링(Tunneling)이라고도 함. 만약 접근하려는 서버의 웹 서비스 포트가 닫혀있고 22번(SSH) 포트만 개방되어 있을 경우, 이 포트포워딩을 이용하여 해당 서버에 우회하여 접근 할 수 있게 됨
1. Local Port Forwarding (로컬 포트 포워딩)
로컬에서 SSH 클라이언트를 실행, 원격머신에서 SSH 서버 실행해 서버에 연결하면서 로컬 포트를 원격 포트로 포워딩 함
$ ssh -L [로컬에서 사용할 리스닝 포트]:[최종 접근할 주소(IP:PORT)] [SSH 서버 주소]
- [ex] Host_A(1.1.1.1)에서 SSH client의 31000 포트 사용해 Host_B(2.2.2.2)의 8080 포트로 접근
$ ssh -L 31000:2.2.2.2:8080 2.2.2.2
원격 서버(HostB)의 8080 포트는 방화벽으로 막혀있지만 22번 포트(SSH port)가 열려있는 경우, SSH 클라이언트의 31000 포트와 SSH 서버의 22번 포트 간 터널을 생성하여 SSH 서버로 데이터를 보낼 수 있게 되며, 결과적으로 사용자는 방화벽에 차단되지 않고 최종 목적지 서버에 접근할 수 있게 됨
2. Remote Port Forwarding (원격 포트 포워딩)
로컬에서 SSH 서버를 실행, 원격 머신에서 SSH 클라이언트를 실행하면서 로컬 포트를 원격 포트로 포워딩 함
$ ssh -R [원격에서 사용할 리스닝 포트]:[포워딩 할 서버 주소(IP:Port)] [SSH 서버 주소]
- [ex] Host_A(1.1.1.1) 에서 SSH server 의 31000 포트를 통해 Host_B(2.2.2.2) 의 8080번 포트로 접근
$ ssh -R 31000:2.2.2.2:8080 1.1.1.1
원격서버(Host_B) 내부로 들어오는 모든 연결은 차단되어 있지만 내부에서 외부로 나가는 패킷은 허용되어 있는 경우, SSH 서버측 리스닝 포트를 열어두면(31000) SSH 클라이언트 측에서 여기로 데이터를 보내면서 터널이 생성되고 SSH 서버는 이 통로를 통해 데이터를 클라이언트에게 전송할 수 있게 되며, 최종적으로는 목적지인 8080 포트에도 접근할 수 있게 됨
3. Dynamic Port Forwarding (동적 포트 포워딩)
앞선 두 가지 포트포워딩 방식이 (1:1) 매핑이었다면, Dynamic 방식은 (1:N) 매핑 방식으로, 이 방식으로 원격 서버에 접속하면 해당 서버는 프록시 서버이면서 SOCKS* 로 동작하게 되어 해당 서버 내에 있는 여러 포트들에 접근 할 수 있게 됨
즉, 로컬 머신에서 실행되는 SOCKS 프록시를 생성하고 이 프록시는 로컬 네트워크를 통해 연결할 수 있는 모든 호스트와의 통신을 중계하기에, 로컬에서 SSH 를 통해 원격서버에 연결하면 로컬에서 지정한 포트를 통해 원격서버와 연결되어 있는 모든 포트에 접근할 수 있게 되는 것
*SOCKS : Soket Secure, 프록시 서버가 네트워크 packet 라우팅 하는데 사용하는 프로토콜
$ ssh -D [로컬 리스닝 포트] [SSH 서버 주소(원격서버)]
- [ex] Host_A(1.1.1.1) 에서 SSH client 의 31000 포트를 통해 Host_B(2.2.2.2) 내부 포트들로 접근
$ ssh -D 31000 2.2.2.2
(사실 정확히 이해한 건지, 그림은 제대로 그린건지 스스로도 굉장히 의문스러움..
그러므로 오류, 지적해주시면 감사히 받겠습니다..)
포트포워딩 우선순위
[공유기 포트 포워딩]
1. 수동 포트 포워딩 (공유기 설정에서 직접 포트 포워딩 수동으로 설정한 경우)
2. UPnP(Universal Plug and Play) 를 사용해 포트포워딩 자동으로 설정한 경우
3. DMZ(De-Militarized Zone)설정 (외부에서 접근하는 어떤 포트라도 1개의 특정 사설 IP/ 내부 IP 로 통과되도록 하는 특수 기능으로, 모든 포트와 모든 외부 인터넷 트래픽을 허용하기에 보안에 취약하므로 권장하지 않음)
[SSH 포트포워딩]
1. 로컬 포트와 원격 포트가 모두 지정된 경우 -L 옵션에 의해 설정된 포트 포워딩 우선
2. 원격 포트만 지정된 경우 -R 옵션에 의해 설정된 포트 포워딩이 우선
3. 로컬과 원격 포트 모두 지정되니 않은 경우 *SSH 구성 파일에 설정된 포트 포워딩이 우선
* ~/.ssh/config : 이 파일에 포트 포워딩 추가하면 SSH 클라이언트 실행할 때마다 포트 포워딩 일일이 입력하지 않아도 됨
보안 상 취약점
1. 포트 포워딩 공격 : 앞선 방법들로 서버 관리자가 아닌 공격자가 네트워크 내부로 침입 가능
2. 중간자 공격 : 포트 포워딩을 통해 전달되는 데이터를 가로채거나 변조할 여지 있음
3. 포트 포워딩 오용 : 내부 네트워크에서 사용되는 포트를 외부에 노출하여 공격 대상이 될 수 있음
대응방안
1. 접근 제어 목록 (ACL, Access Control List) 등을 사용해 불필요한 접근 차단 및 이상행동 탐지 시스템 구축
2. SSH 와 같은 암호화 프로토콜 사용해 데이터 암호화 (SSL/TLS와 같은 보안 프로토콜 사용해 데이터 전송 보호)
3. 외부에서 접근 가능한 포트와 내부에서 접근 가능한 포트 구분하여 설정하고, 불필요한 포트는 차단 등
[참고]
https://skstp35.tistory.com/234
https://www.hanbit.co.kr/network/category/category_view.html?cms_code=CMS5064906327
https://itsaessak.tistory.com/171
https://linux.systemv.pe.kr/ssh-%ED%8F%AC%ED%8A%B8-%ED%8F%AC%EC%9B%8C%EB%94%A9/
https://johnliu55.tw/ssh-tunnel.html
'HACKING > Bandit+' 카테고리의 다른 글
Socket 통신 절차 간략히 정리 (TCP) (0) | 2023.04.15 |
---|---|
PPP(Point-to-Point Protocol) (0) | 2023.04.15 |
sshd_config 파일 수정하여 포트 변경하기 (0) | 2023.04.07 |
Bash 취약점에 대하여 (0) | 2023.04.07 |
install 명령어로 파일 권한 변경 하는 법 (0) | 2023.04.06 |