[Linux] Port Forwarding - 포트 포워딩
- Operating System/Linux
- 2024. 8. 15.
■ 포트포워딩이란?
데이터베이스 서버는 보통 내부망이나 특수한 망에 설치가 됩니다. 그래서 외부에서 보통 접속되지 않고 특정한 앱서버나 접근제어 솔루션에 의해 접속이 됩니다.
이외 다른 방법으로 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 |
'Operating System > Linux' 카테고리의 다른 글
[Ubuntu] 우분투 의존성 패키지 한번에 다운로드 (0) | 2024.03.06 |
---|---|
[Shell Script] Environment[Shebang-ENV] (0) | 2020.11.29 |
[Linux] CentOS, RHEL - EPEL (0) | 2020.09.15 |
[Linux] history - 이전 명령어 실행 방법 (0) | 2020.08.31 |
[Linux] grep, egrep, fgrep (0) | 2020.05.17 |