Aller au contenu principal

33. Port Redirection and Network Address Translation (NAT)


포트 리디렉션 이해​

사설 내부 네트워크에서 서버가 운영될 때, 공개 서버가 중간 역할을 합니다. 포트 리디렉션을 통해 들어오는 연결을 적절한 사설 서버로 전달하는 규칙을 만들 수 있습니다.

예시:

  • 포트 80 → 서버 1
  • 포트 993 → 서버 2
  • 포트 3306 → 서버 3

NAT (Network Address Translation) 이해​

네트워크 패킷에는 출발지/목적지 IP 주소 정보가 포함됩니다. 외부 장치(IP: 203.0.0.113)가 공개 서버(IP: 123.4)의 포트 80으로 데이터를 전송하면, 서버는 내부 서버(10.0.0.5)로 전달합니다. 그러나 내부 서버의 응답은 공개 서버를 거치지 않고 외부 IP로 직접 연결하려 합니다.

마스커레이딩(Masquerading): 공개 서버가 출발지 IP를 자신의 공개 주소로 교체합니다. 이는 가정용 라우터가 여러 장치가 단일 공개 IP를 공유하게 하는 방식과 동일합니다.

Linux에서 포트 리디렉션 설정​

IP 포워딩 활성화​

인터페이스 간 패킷 전달을 허용하려면 IP 포워딩을 활성화해야 합니다. Ubuntu에서 /etc/sysctl.d/99-sysctl.conf 편집 후 주석 해제:

net.ipv4.ip_forward=1

설정 재로드:

sudo sysctl --system

iptables로 설정​

포트 8080으로 들어오는 TCP 연결을 내부 주소 192.168.0.5의 포트 80으로 전달:

sudo iptables -t nat -A PREROUTING -i enp1s0 -s 10.0.0.0/24 -p tcp --dport 8080 -j DNAT --to-destination 192.168.0.5:80

반환 패킷이 공개 서버를 통해 라우팅되도록 마스커레이딩 설정:

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp6s0 -j MASQUERADE

nftables 대안​

최신 시스템에서는 iptables 대신 nftables를 사용할 수 있습니다. 활성 규칙 확인:

sudo nft list ruleset

많은 배포판이 iptables 규칙을 자동으로 nftables로 변환합니다.

영구 규칙 유지​

iptables 규칙은 임시적이며 재부팅 후 사라집니다. iptables-persistent 설치:

sudo apt install iptables-persistent

이후 수정 시:

sudo netfilter-persistent save

보안 고려사항​

항상 규칙을 특정 인터페이스와 IP 범위로 제한합니다. UFW를 사용한 예시:

sudo ufw allow 22
sudo ufw enable
sudo ufw route allow from 10.0.0.0/24 to 192.168.0.5

빠른 참조 명령어​

동작명령어
IP 포워딩 활성화/etc/sysctl.d/99-sysctl.conf 편집 후 sudo sysctl --system
iptables NAT 규칙 확인sudo iptables -L -t nat
iptables NAT 테이블 초기화sudo iptables --flush --table nat
nftables 규칙 확인sudo nft list ruleset
규칙 저장sudo netfilter-persistent save