๋ก๋๋ฐธ๋ฐ์(L4/L7) ํ๊ฒฝ์์ ์ค์ ํด๋ผ์ด์ธํธ IP๋ฅผ ์๋ณํ๊ธฐ ์ํด IBM HTTP Server(IHS) 9.0์
mod_remoteip๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค. ํนํ ๋ณด์ ๊ฐ์ฌ ๋ก๊ทธ์ ๋ฌด๊ฒฐ์ฑ์ ์ํด IHS 9.0.5.13 (APAR PH47286) ํจ์น๊ฐ ์ ์ค์ํ์ง, ๊ทธ๋ฆฌ๊ณ ๋ฒ์ ๋ณ ๋ก๊ทธ ํฌ๋งท ์ค์ ์ฐจ์ด์ ์ ์ค์ ์ ์ผ๋ก ์ ๋ฆฌํฉ๋๋ค.
0. ๋ฐฐ๊ฒฝ: ์ IP๊ฐ ๋ฐ๋๊น?
ํด๋ผ์ด์ธํธ๊ฐ ๋ก๋๋ฐธ๋ฐ์(Proxy)๋ฅผ ๊ฑฐ์ณ ์น ์๋ฒ์ ์ ์ํ๋ฉด, ์น ์๋ฒ ์ ์ฅ์์๋ ์ฐ๊ฒฐ์ ์์ฒญํ ์ฃผ์ฒด๊ฐ ๋ก๋๋ฐธ๋ฐ์์ด๋ฏ๋ก Source IP๊ฐ ๋ก๋๋ฐธ๋ฐ์ IP(์: 10.0.0.1)๋ก ๊ธฐ๋ก๋ฉ๋๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค.
- ์ ๊ทผ ์ ์ด ์คํจ: IP ๊ธฐ๋ฐ์ ACL(Access Control List) ์ ์ฉ ๋ถ๊ฐ
- ๊ฐ์ฌ ์ถ์ ๋ถ๊ฐ: ์ฌ๊ณ ๋ฐ์ ์ ์ค์ ๊ณต๊ฒฉ์์ IP๋ฅผ ๋ก๊ทธ์์ ์ฐพ์ ์ ์์
1. ๋ฒ์ ๋ณ ํจ์น ๋ฐ ๋ก๊ทธ ํฌ๋งท ์ฃผ์์ฌํญ (Version History)
IHS ์ค์ ์ ์์, ์ฌ์ฉ ์ค์ธ IHS ๋ฒ์ ์ ๋ฐ๋ผ ๋ก๊ทธ ํฌ๋งท ๋ณ์๋ฅผ ๋ค๋ฅด๊ฒ ์จ์ผ ํ๋ฏ๋ก ๋ฒ์ ํ์ธ์ด ํ์์ ์ ๋๋ค.
๐ข ํต์ฌ ํจ์น ์ ๋ณด: APAR PH47286
์ ์ฉ ๋ฒ์ : IBM HTTP Server 9.0.5.13 ์ด์
๋ด์ฉ: ์ด์ ๋ฒ์ ์์๋ mod_remoteip๊ฐ ์ ์ ์๋ํด๋, ๊ธฐ๋ณธ ๋ก๊ทธ ๋ณ์์ธ %h๊ฐ ์ฌ์ ํ ํ๋ก์ IP๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. 9.0.5.13๋ถํฐ๋ %h๊ฐ mod_remoteip์ ์ํด ๋ณ๊ฒฝ๋ ์ค์ IP๋ฅผ ๋ฐ์ํ๋๋ก ์์ ๋์์ต๋๋ค.
๋ฒ์ ๋ณ ๊ถ์ฅ ๋ก๊ทธ ํฌ๋งท
| IHS ๋ฒ์ | Access Log ๊ถ์ฅ ๋ณ์ | ์ค๋ช |
|---|---|---|
| 9.0.5.12 ์ดํ | %a (Client IP) |
%h๋ ํ๋ก์ IP๋ฅผ ์ฐ์ผ๋ฏ๋ก ์ฌ์ฉ ๊ธ์ง. ๋ฐ๋์ %a ์ฌ์ฉ. |
| 9.0.5.13 ์ด์ | %h ๋๋ %a |
ํจ์น ์ ์ฉ๋จ. %h๋ฅผ ์จ๋ ์ค์ IP๊ฐ ๊ธฐ๋ก๋จ (๊ธฐ์กด ์ค์ ์ ์ง ๊ฐ๋ฅ). |
2. IHS ์ค์ ๊ฐ์ด๋ (httpd.conf)
Step 1: ๋ชจ๋ ํ์ฑํ
# mod_remoteip ๋ชจ๋ ์ฃผ์ ํด์
LoadModule remoteip_module modules/mod_remoteip.so
Step 2: ์ ๋ขฐํ ํ๋ก์ ๋ฑ๋ก
๋ณด์์ ์ํด "๋๊ฐ ๋ณด๋ด์ค ํค๋๋ฅผ ๋ฏฟ์ ๊ฒ์ธ๊ฐ"๋ฅผ ๋ช ์ํด์ผ ํฉ๋๋ค. ์๋ฌด ํค๋๋ ๋ฏฟ์ผ๋ฉด IP ์คํธํ ๊ณต๊ฒฉ์ ๋นํ ์ ์์ต๋๋ค.
<IfModule mod_remoteip.c>
# 1. ์ค์ IP๊ฐ ๋ด๊ธด ํค๋๋ช
์ง์ (ํ์ค: X-Forwarded-For)
RemoteIPHeader X-Forwarded-For
# 2. ์ ๋ขฐํ ๋ก๋๋ฐธ๋ฐ์(L4/L7) IP ๋ฑ๋ก
# ์ฌ์ค IP ๋์ญ์ ํ๋ก์์ธ ๊ฒฝ์ฐ (10.x, 192.168.x ๋ฑ)
RemoteIPInternalProxy 10.0.0.1 10.0.0.2
# ๊ณต์ธ IP ๋์ญ์ ํ๋ก์์ธ ๊ฒฝ์ฐ
# RemoteIPTrustedProxy 203.0.113.5
</IfModule>
Step 3: ๋ก๊ทธ ํฌ๋งท ๋ณ๊ฒฝ (Access Log)
๋ฒ์ ์ ๊ด๊ณ์์ด ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ %a ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
# [๊ธฐ์กด] common ํฌ๋งท (9.0.5.12 ์ดํ์์ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ)
# LogFormat "%h %l %u %t \"%r\" %>s %b" common
# [๋ณ๊ฒฝ] %h -> %a ๋ก ๋ณ๊ฒฝ (๊ถ์ฅ)
LogFormat "%a %l %u %t \"%r\" %>s %b" common
3. ๊ฒ์ฆ ๋ฐ ๋๋ฒ๊น (Validation)
์ค์ ์ ์ฉ ํ ์ค์ ๋ก ํค๋๊ฐ ์ ๋ณํ๋๋์ง ํ์ธํ๊ธฐ ์ํด ์์๋ก ๋ก๊ทธ๋ฅผ ์์ธํ๊ฒ ์ฐ์ด๋ด ๋๋ค.
# ๋๋ฒ๊น
์ฉ ๋ก๊ทธ ํฌ๋งท ์ ์ (์์
ํ ์ฃผ์ ์ฒ๋ฆฌ ๊ถ์ฅ)
# %{c}a : Connection IP (L4 IP)
# %a : Client IP (๋ณํ๋ ์ค์ IP)
GlobalLog logs/remoteip_debug.log "L4-IP=%{c}a Real-IP=%a XFF-Header=%{X-Forwarded-For}i"
์ ์ ๊ฒฐ๊ณผ ์์:
L4-IP=10.0.0.1 Real-IP=203.0.113.2 XFF-Header=203.0.113.2
L4-IP์๋ ๋ก๋๋ฐธ๋ฐ์ IP๊ฐ ๋์์ผ ํจReal-IP์๋ ์ค์ ์ฌ์ฉ์ PC์ IP๊ฐ ๋์์ผ ํจ (์ฑ๊ณต)
4. WAS(WebSphere) ์ถ๊ฐ ์ค์ ํ์ ์ฌ๋ถ
IHS์์ mod_remoteip๊ฐ ์ ์ ์๋ํ๋ฉด, WAS ํ๋ฌ๊ทธ์ธ(Plugin)์ผ๋ก ๋์ด๊ฐ ๋ ์ด๋ฏธ Source IP๊ฐ ๋ณต์๋ ์ํ๋ก ๋์ด๊ฐ๋๋ค. ๋ฐ๋ผ์ WAS ์ชฝ์์๋ ๋ณ๋์ ์ถ๊ฐ ์ค์ ์์ด request.getRemoteAddr() ํธ์ถ ์ ์ค์ IP๋ฅผ ํ๋ํ ์ ์์ต๋๋ค.
(๋จ, Plugin ์ค์ ์ TrustedProxyEnable ์์ฑ์ ์ํฉ์ ๋ฐ๋ผ ๊ฒํ ๊ฐ ํ์ํ ์ ์์ต๋๋ค.)