본문 바로가기
IT/리눅스

리눅스에서 포트 포워딩 설정 방법

by JGSHIN 2025. 2. 15.
SMALL

리눅스에서 포트 포워딩(Port Forwarding) 을 설정하면 외부에서 특정 포트로 접속 시 내부 네트워크의 특정 서버나 포트로 연결할 수 있습니다.
예를 들어, 외부에서 5432 포트로 접근하면 내부 서버 10.0.1.7의 5432 포트로 전달하는 방식입니다.

 

1️⃣ 포트 포워딩 기능 활성화

기본적으로 리눅스에서는 IP 포워딩 기능이 비활성화되어 있습니다.
포트 포워딩을 설정하려면 먼저 IP 포워딩이 활성화되어 있는지 확인해야 합니다.

🔹 현재 설정 확인

 
# sysctl net.ipv4.ip_forward

출력 예시:

 
net.ipv4.ip_forward = 1

1이면 포트 포워딩이 활성화된 상태
0이면 비활성화 상태이므로 아래 명령으로 활성화해야 함


2️⃣ IP 포워딩 활성화

비활성화(0) 상태라면 아래 명령을 실행하여 활성화합니다.

 
# echo 1 > /proc/sys/net/ipv4/ip_forward

또는, 설정을 영구적으로 적용하려면:

 
# vi /etc/sysctl.conf

파일의 끝에 다음 내용을 추가:

 
net.ipv4.ip_forward = 1

변경 사항 적용:

 
# sysctl -p

3️⃣ 현재 네트워크 인터페이스 및 Zone 확인

리눅스의 방화벽(Firewalld)에서는 Zone 기반으로 포트 포워딩을 설정해야 합니다.
현재 활성화된 인터페이스의 Zone을 확인하는 명령어:

 
# firewall-cmd --get-active-zones

출력 예시:

 
public interfaces: eth0

eth0 인터페이스가 public Zone에 속해 있음
이 정보를 기반으로 이후 설정을 진행


4️⃣ 방화벽에서 허용할 포트 추가

외부에서 접근할 포트를 허용해야 합니다.
예를 들어, 외부에서 65535번 포트와 5432번 포트를 열고 싶다면:

 
# firewall-cmd --permanent --zone=public --add-port=65535/tcp
# firewall-cmd --permanent --zone=public --add-port=5432/tcp # firewall-cmd --reload

✅ --permanent → 설정을 영구적으로 저장
✅ --zone=public → 현재 활성화된 Zone을 지정

설정 확인:

 
# firewall-cmd --list-all

5️⃣ 포트 포워딩 설정

이제 외부에서 특정 포트로 접근하면 내부 서버로 전달하는 규칙을 추가합니다.

 
# firewall-cmd --permanent --zone=public --add-forward-port=port=65535:proto=tcp:toport=33890:toaddr=211.114.237.223

외부에서 65535 포트로 접근하면 내부 서버 211.114.237.223의 33890 포트로 전달

또는, 내부 네트워크에 있는 서버(10.0.1.7)로 5432 포트를 포워딩하려면:

 
# firewall-cmd --permanent --zone=public --add-forward-port=port=5432:proto=tcp:toport=5432:toaddr=10.0.1.7

외부에서 5432 포트로 접근하면 내부 서버 10.0.1.7의 5432 포트로 전달

설정 적용:

 
# firewall-cmd --reload

설정 확인:

 
# firewall-cmd --list-all

6️⃣ Masquerade(소스 NAT) 활성화

포트 포워딩이 정상적으로 작동하려면 Masquerade(소스 NAT) 기능을 활성화해야 합니다.

 
# firewall-cmd --permanent --zone=public --add-masquerade # firewall-cmd --reload

✅ Masquerade는 외부에서 내부 네트워크로 패킷을 전달할 때 IP 주소를 자동 변환하는 역할을 함


7️⃣ 포트 포워딩 설정 확인

위의 설정이 적용되었는지 확인하는 방법:

 
# firewall-cmd --list-all

출력 예시:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports: 5432/tcp
  forward-ports: 
      port=5432:proto=tcp:toport=5432:toaddr=10.0.1.7
  masquerade: yes
  source-ports:
  icmp-blocks:
  rich rules:

포트 5432가 10.0.1.7로 포워딩됨
Masquerade 활성화됨


8️⃣ 접속 테스트

설정이 완료되었으면, 외부에서 해당 포트로 접속이 가능한지 확인합니다.

 
# telnet <서버 공인 IP> 5432

또는, netcat(nc) 명령어를 사용하여 테스트:

 
# nc -zv <서버 공인 IP> 5432

출력 예시:

 
Connection to <서버 공인 IP> 5432 port [tcp/postgresql] succeeded!

"succeeded!" 메시지가 나오면 정상적으로 포트 포워딩이 적용된 것

LIST
📧 이메일 문의
by @ 2025 JGSHIN