1. 시나리오
[아이폰 LTE] → [공인 IP:8080 (공유기)] → [사설 IP:8080 (Ubuntu 서버)]
- 클라이언트 접속 환경
- iOS 기기에서 LTE 네트워크를 통해 외부에서 내부 우분투 서버로 접속 시도
- 공유기 포트 포워딩 설정
- 공유기에서 외부 포트 8080을 내부 우분투 서버의 포트 8080으로 포워딩
- NAT (DNAT) 설정을 통해 외부 요청을 내부 사설 IP 주소(우분투 서버)로 리다이렉트
- 내부 서버 응답 처리
- 포트포워딩된 요청을 우분투 서버에서 리스닝 중인 애플리케이션이 수신
- 애플리케이션은 포트 8080에서 HTTP 요청을 처리 중
- 방화벽 설정
- 우분투 서버에서 iOS LTE 네트워크의 공인 IP에 대해 인바운드 접속 허용
2. 보안 이슈 – 가장 먼저 고려해야 할 점
그리고 외부에서 접속 가능하게 하기 전에 가장 알아야 할 점이 보안 이슈다 안그래도 우리집 SKT 사용해서 이미 다 털어갔지만 이런식으로 또 털어가게 만들 순 없다.
그래서 일단 절대 하지 말아야 할 행동은
절대 금지
- 0.0.0.0/0 전체 IP 포트포워딩 -> 전 세계에서 접속 가능해진다.
- 방화벽 미적용 상태
- 모든 포트 오픈 실험
권장 방식
- 테스트 목적 IP만 화이트리스트로 등
- 포트 제한 (예: 8080만 허용)
- 방화벽과 공유기에서 이중 필터링 적용
3. 공인 IP 확인하기
What Is My IP?
Instantly check your public IP address, location, and ISP with our free tool. Supports IPv4 and IPv6. Get fast and accurate results.
www.whatismyip.com
여기 가시거나
네이버에 내 IP 검색하시면 내 공인IP 나옵니당.
그래서 저는 제 LTE, 공유기 공인 IP를 확인해줬습니다.
4. Ubuntu 방화벽 설정 (UFW)
sudo ufw allow from [iOS LTE의 공인 IP] to any port 8080 proto tcp
일단 저는 지금 제 핸드폰 (LTE로 접속하는 외부망의 폰)만 8080 열어줄 거에요
구성 요소 의미를 보자면 다음과 같습니당.
sudo ufw | UFW 방화벽 명령어 실행 |
allow | 허용할 거야 |
from [아이폰IP] | 오직 이 IP에서 들어오는 요청만 허용할 거야 |
to any | "내 서버의 어떤 IP 주소로 오든" 허용하겠다는 뜻 |
port 8080 | 단, 포트 8080으로 오는 요청만 허용함 |
proto tcp | TCP 프로토콜에 대해서만 허용 (HTTP는 TCP 기반임) |
저 any가 뭔가 불안해서 찾아보니까
외부의 any가 아니라
제 ubuntu 서버가 지금 사설 IP라서 어떤 IP가 할당 될 지 모르지만, 그 어떤IP든지 간에
제 아이폰의 공인 IP에서 요청하는 8080 포트의 TCP 요청은 허용한단 뜻입니답.
굳 안전해
그럼 이제 제 우분투 온프레미스 서버에 LTE 아이폰 같은 외부에서 접속할 수 있도록
공인IP -> 사설 IP(우분투 서버)로 트래픽 포트포워딩 해주는 걸 진행해보겠습니당.
일단 개요부터 이해해야 하는 게
현재 상태
[아이폰(LTE)] ─(인터넷)→ [공인IP: SK 공유기] ─(포트포워딩)→ [사설IP: 우분투 서버]
현재 저희집 공유기는 SK 브로드밴드에서 공인 IP 하나를 받아와서 사용 중이고,
그 공유기 설정에서
1. 외부에서 공인IP:8080으로 요청이 들어오면,
2. 우분투 서버의 사설IP:8080으로 포워딩하라고 명령할 예정
5. 공유기 포트포워딩 설정 (SK 브로드밴드 기준)
5_1. 우분투 서버의 사설IP 확인하기
hostname -I 하면 사설IP 나옵니다 이걸 저장해두고요
5_2. 홈 공유기 접속하기
ip route | grep default
검색하면 공유기에 접속할 수 있는 게이트웨이 주소가 나옵니답.
그걸 인터넷에 검색하시면 공유기에 접속할 수가 있어요
이건 통신사 마다 화면이 다른데 SK 기준으로 설명할게영
포트포워딩 설정 하는 곳이 나왔습니다
항목 값
소스 IP | iOS 공인 IP (보안 위해 지정) 저로 치면 아이폰 공인 IP 입력하면 됩니당. 만약에 , 여러 기기로 테스트하려면 비워도 되는데 보안은 취약해지겠져 저는 안전하게 하고싶기 때문에 제 핸드폰 공인IP 입력 해줬구요 |
소스 포트 | 외부에서 접속을 시도하는 클라이언트가 사용하는 포트 번호 ( 따라서, 주로 비워두거나 1 ~ 65535으로 전체 허용) |
외부 포트 | 외부 사용자가 접속할 포트 번호 (위의 그림으로 치면 8080) 공인Ip:8080으로 접속할 거라서 8080으로 해놓을 건데 만약 8081 해놓고 내부 포트는 8080해놓으면 공인IP:8081으로 접속해서 우분투에 떠있는 제 8080서버에 접속 되는 거져 |
내부 IP | Ubuntu 서버의 사설 IP |
내부 포트 | 8080 (내부 우분투 서버에서 구동되는 서비스의 포트 번호) |
프로토콜 | TCP (HTTP 통신) |
설명 | 예: "iOS 테스트 HTTP" |
자잔 설정이 다 완료됐고
제 핸드폰으로 접속 잘 되는데
url은 공인 ip 이슈로 보여드릴 수 없습니답.
아무튼 핸드폰으로
우분투 공인ip:8080 들어가서 제 프로젝트 화면 잘 떴습니당 > - < 꺄
6. 외부 접속 가능한 온프레미스 서버 구성 학습 회고 ...
이번 실습으로는 LTE 네트워크 환경에서 사설망에 존재하는 Ubuntu 서버로의 안전한 접근을 목표로,
다음과 같은 주요 학습과 통찰을 얻게 되었다, ,, ,
6_1. 포트포워딩과 NAT 개념의 실전 내재화
"공인 IP로 들어온 요청을 사설 IP로 안전하게 전달한다는 개념이 처음엔 막연했지만,
NAT (특히 DNAT)의 실제 작동 흐름을 체험하면서 실감하게 됐다."
=> 공유기에서 외부 포트와 내부 포트를 매핑해주면, 외부 사용자(LTE 아이폰 등)가
공인 IP에 접근해도 실제 트래픽은 사설 IP에 있는 서버로 전달됨
6_2. 보안 없는 네트워크 실습은 꽤나 엄청나게 위험한
"단순히 작동만 되면 되는 줄 알았는데, 실제로 '모든 IP 허용 + 방화벽 없음'은 곧 시스템 탈취로 이어질 수 있다는
현실적 위협을 깨달았다."
- 실습 서버가 인터넷에 노출된 순간, 그건 테스트 서버가 아닌 공격 대상이 됨
- 특히 0.0.0.0/0 또는 소스 포트 전체 허용은 모든 국가의 모든 사람에게 내 서버를 공개하는 행위
- 실무에서 권장되는 최소 권한 원칙을 그대로 적용함으로써,
- 소스 IP 화이트리스트
- 포트 제한
- 이중 필터링 (공유기 + 서버 방화벽) 등의 실전 보안 설정을 경험할 수 있었음
6_3. UFW 방화벽 설정 – 클라이언트 단위 제어의 중요성
"서버에서 단순히 '8080 포트 허용'만 해도 될 줄 알았는데, 실제론 '누가 접속할 수 있느냐'를 정밀 제어하는 게 핵심이었다."
- from [공인IP]를 통해 특정 디바이스(LTE iPhone 등)의 IP에 한정된 인바운드 트래픽만 허용함으로써 공격 벡터를 최소화
- to any의 의미도, 외부의 "any IP"가 아닌 내부에서 서버가 어떤 IP를 할당받더라도 유효하다는 의미임을 정확히 이해함
개념 요약
- NAT와 포트포워딩은 굉장히 중요하다.
- 공인 IP → 공유기 포트포워딩 → 방화벽 허용 → 내부 서비스로 이어지는 흐름은 클라우드 보안 그룹/로드밸런서 설정과 동일한 구조이다. (이게 젤 신기함)
- “보안은 단순히 방화벽 ON이 아니라, 인바운드 트래픽을 '누가, 어떻게, 어느 포트로' 접근하는지를 제어하는 행위”임을 실전으로 체득함
외부에서 내부 서버로 접근하는 포트포워딩까지 진행했으니 이제는
이 외우기 어려운 공인IP를 접근하기 쉬운 도메인으로 연결하는 작업을 진행할 예정이당.
'OS' 카테고리의 다른 글
4. HTTPS 인증서 및 도메인 연결 (0) | 2025.06.20 |
---|---|
3. 온프레미스에서 FQDN 구축하기: 유동 IP 환경에서 DDNS + 도메인 네임 서비스 구성 실습 (1) | 2025.06.11 |
1. 집에서 온프레미스 구동하기 (0) | 2025.05.10 |
온프레미스를 내가 왜 해야 할까 (0) | 2025.05.10 |