[Linux] Port Forwarding - 포트 포워딩

포트포워딩이란?

데이터베이스 서버는 보통 내부망이나 특수한 망에 설치가 됩니다. 그래서 외부에서 보통 접속되지 않고 특정한 앱서버나 접근제어 솔루션에 의해 접속이 됩니다.

이외 다른 방법으로 ssh 터널링이나 Port Forwarding방식으로 접속을 하게 됩니다. 이중에서 포트 포워딩에 대해 알아보겠습니다.

( 디비가 아니더라도 웹서버나 어플리케이션 서버에서도 방법을 통해 접속이 가능합니다.)

 

■ Port Fowwarding 환경

아래와 같은 환경으로 되어 있다고 가정해보겠습니다.

 

 

▶︎ 접속 방법

사용자는 10.15.11.15 IP 가지고 있다고 가정해 보겠습니다. 그리고 6.6.6.6 퍼블릭 IP 가지는 서버에 접속을 할때 4306이라는 포트로 접속을 시도합니다. 그럼 중간 서버에서 내부 규칙에 의해 설정된 경로로 따라가서 어플리케이션(여기서는 Managed DB) 접속을 하게 됩니다. 방식이 포트 포워딩입니다.

 

 ▶︎ NAT 방식을 이용한 포트 포워딩

위의 방식은 NAT 이용한 포트포워딩 방식입니다. IPTABLES 라는 리눅스의 내부 방화벽 프로그램을 이용해서 포트 포워딩을 합니다.

 

▶︎ 유의 사항

사용자 - VM - MANAGED DB 사이는 당연히 통신이 가능해야 합니다. 접속하고자 하는 포트들이 허용되어 있는지 확인합니다.

특히 클라우드의 경우 SG 오픈되어 있는지 확인합니다. 접속시도를 할때 커서가 깜빡거리면서 멈춰있다면 통신이 제대로 열려있지 않은 것이니 먼저 확인을 합니다.

적어도 접속이 안된다는 오류가 떨어져야 통신경로가 열려있다는 의미가 됩니다.

 

 

컴퓨팅 서버(VM) 환경 설정

서버가 중간에 데이터를 넘겨줘서 원하는 어플리케이션에 전송을 하게 됩니다. 그래서 중간서버의 설정이 매우 중요합니다.

먼저 SSH 설정, kernel port forwarding 먼저 합니다.

* ssh 설정
shell> vi /etc/ssh/sshd_config
AllowTcpForwarding yes
GatewayPorts yes
shell> /etc/init.d/ssh restart
위의 2가지를 yes 변경 재시작합니다.
 
* kernel port forwarding 설정
shell> vi /etc/sysctl.conf
net.ipv4.ip_forward=1
0에서 1 변경
shell>sysctl -p /etc/sysctl.conf

 

IPTABLES 패키지를 설치합니다.

shell> apt install iptables-persistent
- CentOS, Rocky 리눅스의 경우 yum으로 설치합니다.
shell> systemctl start iptables
shell> systemctl status iptables
active 상태가 나오는지 확인

 

 

포트포워딩 환경 설정

가장 중요한 Pord forwarding 설정방법입니다. 자신의 환경을 정확히 이해한 상태에서 설정을 합니다.

* nat portforwarding 설정
# 192.168.10.100:3306 - RDS 기타 Managed DB 경우 Endpoint 제공되는데 nslookup 통하여 실제 IP 변경을 합니다. 변경한 IP 입력합니다,
# 4306 - 외부에서 접속될 포트입니다. 여기서는 4306 이용합니다. 접속을 원하는 포트로 설정을 하셔도 됩니다.
shell> iptables -t nat -A PREROUTING -p TCP --dport 4306 -j DNAT --to-destination 192.168.10.100:3306
 
# 192.168.10.10 - VM Internal IP입니다. MySQL에서 접속 응답을 보내줄 곳을 지정해야 합니다.
# 192.168.10.100 - 위에서 접속할 대상의 어플리케이션 IP입니다.
iptables -t nat -A POSTROUTING -p tcp -d 192.168.10.100 --dport 3306 -j SNAT --to-source 192.168.10.10
 
* nat portforwarding 설정 확인
shell> iptables -t nat -nL --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:4306 to:192.168.10.100:3306 <-- 확인
 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
 
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
 
Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    SNAT       tcp  --  0.0.0.0/0            172.16.0.91          tcp dpt:3306 to:192.168.10.10 <-- 확인
 
* Rule 삭제 명령
iptables -t nat -F

 

Designed by JB FACTORY