๐ฉ๊ฐ์
์ฌ๋ด์์ ์
์ฑ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฐจ๋จํ๊ธฐ ์ํด, IP ์ฐจ๋จ์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง, ์ฐจ๋จํ IP์ ํด๋ผ์ด์ธํธ๊ฐ ์ฐจ๋จ๋์ง ์๊ณ ๊ณ์ํด์ ์ฌ๋ด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๋ชจ์ต์ด ๋ชจ๋ํฐ๋ง ๋์ต๋๋ค.
์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋น์ฆ๋์ค ๋ก์ง ์๋จ ๋ฏธ๋ค์จ์ด์ UrlFilter ๊ฐ ์์ง๋ง, ์ ์์ ์ผ๋ก ์
์ฑ IP๋ฅผ ๊ฑธ๋ฌ๋ด์ง ๋ชปํด ๋ฐ์ํ ๋ฌธ์ ์๋๋ฐ์. ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์์ธ๊ณผ ๋ฌธ์ ์ ํต์ฌ X-Forwarded-For ํค๋์ ๋ํด ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
๐ฆนโ๏ธ์คํธํ์ด๋
์คํธํ(Spoofing)์ ์์ด๊ธฐ(spoof)๋ผ๋ ๋จ์ด์์ ๋์จ ๋ง๋ก,
์ปดํจํฐ ๋ณด์์์ ‘์์ ์ ์ ์์ ์์ด๊ฑฐ๋ ์์กฐํ์ฌ ์๋๋ฐฉ์ ์์ด๋ ํ์’๋ฅผ ๋ปํฉ๋๋ค.
์ฆ, “์ ๋ขฐ๋ฐ๋ ๋์์ธ ์ฒ ์์ฅํด์ ์ ๊ทผํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ํ์” ๋ก์ “๋ ์ฌ์ค ์๋ฒ์ผ”, “๋ ์ง์ง ์ฌ์ฉ์์ผ” ๋ผ๊ณ ๊ฑฐ์ง๋งํ๋ ๊ฒ๋๋ค.
IP ์คํธํ, Email ์คํธํ, DNS ์คํธํ ๋ฑ ๋ค์ํ ์คํธํ ๊ณต๊ฒฉ๋ฒ์ด ์์ต๋๋ค.
์๋ฒ๊ฐ ์์กฐ๋ IP๋ ๋๋ฉ์ธ์ ์ ๋ขฐํ๋ฉด, ์ธ์ฆ ์ฐํ, ์ธ์
ํ์ทจ, ๋ด๋ถ๋ง ์นจํฌ ๊ฐ๋ฅํด์ง๊ณ ,
์ด๋ฉ์ผ/๋ฌธ์ ์คํธํ์ ํผ์ฑ(Phishing)๊ณผ ๊ฒฐํฉํด ๊ฐ์ธ์ ๋ณด ์ ์ถํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ์ ๋งค์ฐ ์ํํฉ๋๋ค.
์ฌ๋ด์์๋ X-Forwarded-For ํค๋๋ฅผ ์ด์ฉํ IP ์คํธํ ๊ณต๊ฒฉ์ ๋ฐ์์ต๋๋ค.
๐งฉ X-Forwarded-For ํค๋๋
X-Forwarded-For ํค๋๋ ํด๋ผ์ด์ธํธ์ ์ค์ IP ์ฃผ์๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ํ๋ก์๋ ๋ก๋๋ฐธ๋ฐ์๊ฐ ์ถ๊ฐํ๋ HTTP ํค๋์
๋๋ค.
์ฝ๊ฒ ๋งํ๋ฉด, “์๋ ์์ฒญ์ ๋ณด๋ธ ์ฌ์ฉ์์ ์ง์ง IP๊ฐ ๋ญ์๋์ง ์๋ ค์ฃผ๋ ์ญํ ”์ ํฉ๋๋ค.
Client → Proxy1 → Proxy2 → WAS
X-Forwarded-For: <client ip>+ <proxy sever1 ip>+ <proxy sever2 ip>
//ํน์ ๊ตฌ๋ถ์(,/+)๋ฅผ ๊ธฐ์ค์ผ๋ก split ๊ฐ๋ฅ
์น ์๋ฒ ์๋จ์๋ ํ๋ก์ ์๋ฒ, ๋ก๋ ๋ฐธ๋ฐ์ (์: AWS ELB, Nginx, Cloudflare) ๋ฑ์ด ์กด์ฌํฉ๋๋ค.
๋ง์ฝ X-Forwarded-For ํค๋ ๊ธฐ๋ฅ์ด ์๋ค๋ฉด, ์ด๋ฐ ์ค๊ฐ ์๋ฒ๋ค์ด ๋์ ์์ฒญ์ ์ ๋ฌํ ๋, ์์ฒญ์ ๋ฐ์ ์๋ฒ ์
์ฅ์์๋ ์ค์ ์ฌ์ฉ์ IP ๋์ ํ๋ก์์ IP๋ง ๋ณด์ด๊ฒ ๋ฉ๋๋ค.
X-Forwarded-For๋ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
์์ฒญ์ ํ๋ฆ์ด ์ฌ์ฉ์ → Cloudflare → Nginx → WAS ๊ตฌ์กฐ๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

์๋ฒ(WAS) ์ ์ฅ์์๋
- 192.168.0.5 : ์ง์ง ์ฌ์ฉ์ IP
- 162.158.200.1 : Cloudflare
- 10.0.0.3 : Nginx
์ด ์์๋ก ์ดํดํ ์ ์์ต๋๋ค.
๐จ์ฌ๋ด์์ ๋ฐ์ํ ๋ฌธ์ ์ฌ๋ก
X-Forwarded-For ํค๋๋ ๋จ์ํ HTTP ํค๋ ๋ฌธ์์ด์ ๋๋ค. ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ , ๊ณต๊ฒฉ์)๊ฐ ์ง์ ์์ฒญ์ ์ด ํค๋๋ฅผ ๋ฃ์ด ๋ณด๋ผ ์ ์๊ณ , ํ๋ก์๊ฐ ์ด๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ๋ฉด ์๋ฒ๋ ๊ทธ ๊ฐ์ ๋ณด๊ฒ ๋ฉ๋๋ค.
์ฆ, ํด๋ผ์ด์ธํธ๊ฐ ์์์ ๊ฐ์ ๋ฃ์ ์ ์์ผ๋ฏ๋ก ์ ๋์ ์ธ ์ ๋ขฐ๋ฅผ ํ ์ ์์ต๋๋ค.

์ฌ๋ด์์๋ ์ ์ฑ ํด๋ผ์ด์ธํธ๊ฐ X-Forwarded-For ํค๋์ 127.0.0.1๊ณผ ๊ฐ์ ๋ด๋ถ IP๋ฅผ ์์๋ก ์ฝ์ ํ์ฌ ์์ฒญ์ ์ ์กํ ์ฌ๋ก๊ฐ ์์ต๋๋ค.

- ๋ก๋๋ฐธ๋ฐ์๊ฐ ์ค์ ํด๋ผ์ด์ธํธ์ IP๋ฅผ +๋ก ๊ตฌ๋ถํ์ฌ ์ถ๊ฐ.
- ์ด ์ค 127.0.0.1์ ๊ณต๊ฒฉ์๊ฐ ์กฐ์ํ ๊ฐ์ด๋ฉฐ, 3.229.101.27์ด ์ค์ ํด๋ผ์ด์ธํธ์ IP์.
๊ณต๊ฒฉ์ ๋ณด๋ธ ์์ฒญ
X-Forwarded-For: 127.0.0.1
๋ก๋๋ฐธ๋ฐ์(์ ๋ขฐ ๊ฐ๋ฅํ ํ๋ก์)๊ฐ ์ค์ ๋ก๋ ํด๋ผ์ด์ธํธ(์๊ฒฉ ์์ผ)๊ฐ 3.229.101.27์์ ์์์ ์๊ณ , ๊ธฐ์กด ํค๋ ๋ค์ ์์ ์ ์๊ฒฉ peer IP๋ฅผ ๋ง๋ถ์๋ค๋ฉด
X-Forwarded-For: 127.0.0.1+ 3.229.101.27
- 127.0.0.1 : ๊ณต๊ฒฉ์๊ฐ ์ง์ ๋ฃ์ ๊ฐ(์คํธํ)
- 3.229.101.27 : ๋ก๋๋ฐธ๋ฐ์๊ฐ ์ถ๊ฐํ ์ค์ ์ฐ๊ฒฐ IP(์ฆ ์ง์ง ํด๋ผ์ด์ธํธ IP)
์ด๋, ๋ฐฑ์๋์๋ฒ๊ฐ “์ฒซ ๋ฒ์งธ ๊ฐ(=๋งจ ์ผ์ชฝ)”์ ์ ๋ขฐํด์ ์ฌ์ฉํ๋ฉด ๊ณต๊ฒฉ์ ๋นํฉ๋๋ค. ๋ฐ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ฉด ์ค์ IP(3.229.101.27)๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๐ก๋ฌธ์ ํด๊ฒฐ
์์์ ๋ณธ ๋ฐ์ ๊ฐ์ด ์ค๋ฅธ์ชฝ์ด ์ค์ ํด๋ผ์ด์ธํธ IP ๋ผ๊ณ ์๊ฐํด, ๋งจ ์ค๋ฅธ์ชฝ IP ๋ฅผ ์ค์ ํด๋ผ์ด์ธํธ IP ๋ก ํ๋จํ๋ฉด ์ ๋ฉ๋๋ค. ์ ์ผ ์ฒ์์ ๋งํ๋ค์ํผ ๊ฑฐ์ณ์จ ์๋ฒ๋ค์ IP ๊ฐ ๊ณ์ ๋จ๊ธฐ์ ๋งจ ์ค๋ฅธ์ชฝ์๋ ์ฌ๋ด ๋ก๋๋ฐธ๋ฐ์/ํ๋ก์ ์๋ฒ์ IP ๊ฐ ๋จ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฌํ ์๋ณ์กฐ ๊ฐ๋ฅ์ฑ์ ๋์ํ๊ธฐ ์ํด, ์น์๋ฒ์์๋ ์ต์ข ์ ์ผ๋ก ๋ฐ์ X-Forwarded-For ํค๋์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์์นํ IP๋ถํฐ ํ์ํ์ฌ ํด๋ผ์ด์ธํธ IP๋ก ์๋ณํ๊ณ , 407์ค๋ฅ ๋ฐ์ ์ ์ฐจ๋จํ๊ณ ์์ต๋๋ค.
config ํ์ผ์ allowProxyIPs๋ผ๋ ํ๋กํผํฐ๋ก, ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ํ๋ก์(๋ก๋๋ฐธ๋ฐ์, CDN ๋ฑ) ์ฃผ์๋ค์ ๊ด๋ฆฌํ๊ณ ,
ํค๋๋ฅผ ๊ตฌ๋ถ์๋ก ๋ถ๋ฆฌ ํ, ์ค๋ฅธ์ชฝ(๋)๋ถํฐ ์ผ์ชฝ์ผ๋ก ์ํํ๋ฉด์ allowProxyIPs ์ ์ํ์ง ์๋ ์ฒซ IP๊ฐ “์ค์ ํด๋ผ์ด์ธํธ” ๋ผ๊ณ ํ๋จํ์ต๋๋ค.
๋๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ๋ก์๊ฐ X-Forwarded-For๋ฅผ ๋ฎ์ด์ฐ๋๋ก ์ค์ ํ๋ฉด(append ๋์ replace) ์คํธํ ์ํ์ ๋ ์ค์ผ ์ ์์ต๋๋ค.
1๏ธโฃ ๊ธฐ๋ณธ ๋์ (append ๋ฐฉ์)
์ผ๋ฐ์ ์ผ๋ก ๋ก๋๋ฐธ๋ฐ์๋ ํ๋ก์๋
์์ฒญ์ ์ ๋ฌํ ๋ ๊ธฐ์กด์ X-Forwarded-For ํค๋๊ฐ ์์ผ๋ฉด ๊ทธ ๋ค์ ์๊ธฐ IP๋ฅผ ์ถ๊ฐ(append) ํฉ๋๋ค.
๊ณต๊ฒฉ์ → (header ์กฐ์)
X-Forwarded-For: 127.0.0.1
↓ (ํ๋ก์๊ฐ ์ถ๊ฐ)
X-Forwarded-For: 127.0.0.1, 203.0.113.10
- 127.0.0.1 → ๊ณต๊ฒฉ์๊ฐ ์กฐ์ํ ๊ฐ
- 203.0.113.10 → ์ค์ ํ๋ก์๊ฐ ๋ณธ ํด๋ผ์ด์ธํธ IP
โก๏ธ ์ด๋ ๊ฒ ๋๋ฉด ํค๋์ ๊ฐ์ง IP(127.0.0.1) ๊ฐ ๋จ๊ฒ ๋ฉ๋๋ค.
2๏ธโฃ ๋ฎ์ด์ฐ๊ธฐ(Replace) ๋ฐฉ์
์ด๋ ํ๋ก์ ์ค์ ์ append(์ถ๊ฐ) ๊ฐ ์๋๋ผ replace(๋ฎ์ด์ฐ๊ธฐ) ๋ก ๋ฐ๊พธ๋ฉด, ๊ธฐ์กด ํค๋๊ฐ ์กด์ฌํด๋ ์์ ํ ์๋ก ์ฐ๊ฒ ๋ฉ๋๋ค.
๊ณต๊ฒฉ์ ์์ฒญ:
X-Forwarded-For: 127.0.0.1
↓ ํ๋ก์๊ฐ ๋ฎ์ด์ (replace)
X-Forwarded-For: 203.0.113.10
๊ฒฐ๊ณผ์ ์ผ๋ก,๊ณต๊ฒฉ์๊ฐ ๊ฐ์ง๋ก ๋ฃ์ 127.0.0.1 ๊ฐ์ ๊ฐ์ ๋ฌด์๋๊ณ ,์ง์ง ํด๋ผ์ด์ธํธ IP๋ง ๋จ๊ฒ ๋์ด ์คํธํ ๊ณต๊ฒฉ์ด ๋งํ๋๋ค.
ํ๋ก์๊ฐ X-Forwarded-For๋ฅผ ๋งค๋ฒ ์๋ก ์จ์(๊ธฐ์กด ๊ฐ ๋ฌด์) ์ ๋ฌํ๋๋ก ํ๋ฉด, ๊ณต๊ฒฉ์๊ฐ ํค๋๋ฅผ ์กฐ์ํ๋๋ผ๋ ์๋ฒ๊ฐ ์์ง ์๊ฒ ๋ฉ๋๋ค.
โ์ฃผ์์
๋์ ํ๋ก์๊ฐ ์ฌ๋ฌ ๋ ์์ผ๋ฉด, ๋ ๋ฒ์งธ ํ๋ก์์์ ์ฒซ ๋ฒ์งธ ํ๋ก์์ IP๋ฅผ ๋ฎ์ด์จ ๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค. ์ค์ ์ด์์์๋ ๊ทธ๋ ๊ฒ ๋์ง ์๋๋ก, ํ๋ก์๊ฐ ์ฌ๋ฌ ๋ ์์ผ๋ฉด ๊ฐ์ฅ ๋ฐ๊นฅ์ ์๋(์ฃ์ง) ํ๋ก์์์๋ง replace ํ๋๋ก ์ค๊ณํด์ผ ํฉ๋๋ค.
→ ๋ด๋ถ ํ๋ก์์์๋ ์ ๋ replace ํ๋ฉด ์ ๋จ
→ ๋ด๋ถ ํ๋ก์๋ค์ append ๋๋ pass-through ๋ก ์ค์ ํด์ผ ํจ
Proxy1 (์ฃ์ง ํ๋ก์)
- ํด๋ผ์ด์ธํธ IP: 1.1.1.1
- replace ์ ์ฉ → XFF: 1.1.1.1
Proxy2 (๋ด๋ถ ํ๋ก์)
- Proxy1์ด ๋ณด๋ธ XFF ์ ์ง
- ์๊ธฐ IP๋ง append
→ XFF: 1.1.1.1, 10.0.0.5 //์ฌ๊ธฐ์ append ํ์ง ์๊ณ , replace ํ๊ฒ ๋๋ฉด ์ค์ ํด๋ผ์ด์ธํธIP ๊ฐ ์์ด์ง๊ณ , ํ๋ก์1 IP๋ง ๋จ๊ฒ๋จ.
WAS
๊ฐ์ฅ ์ผ์ชฝ IP (1.1.1.1) ์ ์ค์ client IP๋ก ํ์ฑ
'Web programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| OAuth 2.0 ์ดํด์ TikTok Shop API ์ฐ๋ํ๊ธฐ (0) | 2025.09.07 |
|---|---|
| ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ(Authorization) ๊ทธ๋ฆฌ๊ณ ์๋น์ค ๊ท๋ชจ์ ๋ฐ๋ฅธ ์ธ์ฆ์ธ๊ฐ ๋ณ์ฒ์ฌ (0) | 2025.08.27 |
| ์ํ์น vs ์์ง์์ค (0) | 2024.03.29 |
| NGINX ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ ์ค์ ํธ๋ฌ๋ธ ์ํ (0) | 2024.02.27 |
| SSL Termination ์ ์ํด NginX ๋ก ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ ๊ตฌ์ถํ๊ธฐ (0) | 2024.02.20 |
๋๊ธ