Apache(IHS) ์น ์๋ฒ์์ ๋๋ฉ์ธ๋ช ์ด ์๋ IP ์ฃผ์๋ก ์ ์ํ๊ฑฐ๋, ServerName์ ์ ์๋์ง ์์ ์์ฒญ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฐจ๋จํ๊ฑฐ๋ ์๋ฌ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. ๊ฐ์ฅ ๋จผ์ ๋ก๋ฉ๋๋ Dummy VirtualHost๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
0. ๋ฐฐ๊ฒฝ ์ง์ (Context)
Apache๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ Host ํค๋์ ์ผ์นํ๋ ServerName(๋๋ ServerAlias)์ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ, ์ค์ ํ์ผ์์ ๊ฐ์ฅ ๋จผ์ ์ ์๋ VirtualHost๋ฅผ ๊ธฐ๋ณธ๊ฐ(Default)์ผ๋ก ์ฌ์ฉํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
์ด ์๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ, ์ต์๋จ์ ์๋ฌด๋ฐ ServerName์ ๊ฐ์ง ์๋(ํน์ ๋๋ฏธ ๊ฐ์ ๊ฐ์ง) VirtualHost๋ฅผ ๋ฐฐ์นํ๊ณ 403 Forbidden ๋ฑ์ ๋ฐํํ๊ฒ ํ๋ฉด, ์ง์ ๋ ๋๋ฉ์ธ ์ธ์ ๋ชจ๋ ์ ๊ทผ์ ์ฐจ๋จํ ์ ์์ต๋๋ค.
Test Environment
- OS: CentOS 7.2
- Web Server: IBM HTTPServer v8.5 (Apache 2.2 Base)
1. httpd.conf ์ค์ (VirtualHost ๊ตฌ์ฑ)
ํต์ฌ์ ์์์ ๋๋ค. ์ฐจ๋จ์ฉ(Dummy) ์ค์ ์ ์ ์ ์๋น์ค ์ค์ ๋ณด๋ค ๋ฐ๋์ ์์ชฝ์ ์์ฑํด์ผ ํฉ๋๋ค.
1) ๊ธฐ๋ณธ ์ค์ ๋ฐ ํฌํธ ๋ฆฌ์จ
Listen 80
Listen 4958
# Apache 2.2 / IHS 8.5 ์ดํ ํ์ (IP ๊ธฐ๋ฐ ๊ฐ์ํธ์คํธ ํ์ฑํ)
NameVirtualHost *:80
NameVirtualHost *:4958
2) ์ฐจ๋จ์ฉ Dummy VirtualHost (์ต์๋จ ๋ฐฐ์น)
์ด ๋ธ๋ก์๋ ServerName์ ์ง์ ํ์ง ์๊ฑฐ๋ ์๋ฏธ ์๋ ๊ฐ์ ๋ฃ์ต๋๋ค. ์ด๊ณณ์ผ๋ก ๋ค์ด์ค๋ ์์ฒญ์ ๋ชจ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
# [80 ํฌํธ] ๋ฏธ๋ฑ๋ก ๋๋ฉ์ธ/IP ์ ์ ์ฐจ๋จ
<VirtualHost *:80>
DocumentRoot /app/was/htdocs
# ์ ๊ทผ ๊ฑฐ๋ถ ๋ฉ์์ง ์ค์ (๋ณด์์ ์์ธ ์ ๋ณด ์จ๊น ๊ถ์ฅ)
ErrorDocument 403 "Forbidden: Access is denied."
ErrorDocument 404 "Not Found."
ErrorDocument 500 "Internal Server Error."
# ๋ชจ๋ ์์ฒญ์ ๋ํด 403 Forbidden ๊ฐ์ ๋ฐํ (mod_rewrite ์ฌ์ฉ ์)
# RewriteEngine On
# RewriteRule .* - [R=403,L]
# ๋๋ ๋๋ ํ ๋ฆฌ ์ ๊ทผ ๊ถํ ์ ์ด
<Directory "/app/was/htdocs">
Order allow,deny
Deny from all
</Directory>
</VirtualHost>
# [4958 ํฌํธ] ๋ฏธ๋ฑ๋ก ๋๋ฉ์ธ/IP ์ ์ ์ฐจ๋จ
<VirtualHost *:4958>
DocumentRoot /app/was/htdocs
ErrorDocument 403 "Forbidden: Access is denied."
# ... (์๋)
</VirtualHost>
3) ์ค์ ์๋น์ค VirtualHost
์ ์์ ์ธ ๋๋ฉ์ธ(ServerName)์ ๊ฐ์ง ์์ฒญ๋ง ์ฒ๋ฆฌํ๋ ๋ธ๋ก์
๋๋ค. Proxy ์ค์ ์ ํฌํจํฉ๋๋ค.
# Reverse Proxy ์ฌ์ฉ ์ Open Relay ๋ฐฉ์ง
ProxyRequests Off
# [80 ํฌํธ] ์ ์ ์๋น์ค
<VirtualHost *:80>
ServerName test.apache.com
# WAS ๋๋ ๋ฐฑ์๋ ์๋ฒ๋ก ํ๋ก์
ProxyPass / http://172.31.98.155/ Keepalive=on
ProxyPassReverse / http://172.31.98.155/
# Host ํค๋ ์ ์ง (WAS๊ฐ ๋๋ฉ์ธ์ ์ธ์ํ๋๋ก ํจ)
ProxyPreserveHost On
ErrorLog /app/was/HTTPServer/logs/test_proxy_error.log
CustomLog /app/was/HTTPServer/logs/test_proxy_access.log combined
</VirtualHost>
# [4958 ํฌํธ] ์ ์ ์๋น์ค
<VirtualHost *:4958>
ServerName test.httpserver.com
ProxyPass / http://172.31.98.209/ Keepalive=on
ProxyPassReverse / http://172.31.98.209/
ProxyPreserveHost On
ErrorLog /app/was/HTTPServer/logs/http_proxy_error.log
CustomLog /app/was/HTTPServer/logs/http_proxy_access.log combined
</VirtualHost>
ProxyPreserveHost On ์ต์
์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋๋ฉ์ธ ์ ๋ณด(Host Header)๋ฅผ ๋ฐฑ์๋ ์๋ฒ(WAS)๊น์ง ๊ทธ๋๋ก ์ ๋ฌํฉ๋๋ค. WAS์์ ๊ฐ์ ํธ์คํธ๋ฅผ ๊ตฌ๋ถํด์ผ ํ๋ค๋ฉด ํ์ ์ต์
์
๋๋ค.
2. ๊ฒ์ฆ (Verification)
์ค์ ์ ์ฉ ํ ์น ์๋ฒ๋ฅผ ์ฌ๊ธฐ๋ํ๊ณ curl์ ์ด์ฉํ์ฌ ํ
์คํธํฉ๋๋ค.
1) ์ ์ ๋๋ฉ์ธ ์ ์ ํ ์คํธ
# ์ ์ ์๋ต(200 OK)์ด ์์ผ ํจ
curl -v -H "Host: test.apache.com" http://localhost:80/
2) IP ์ ์ ๋ฐ ๋ฏธ๋ฑ๋ก ๋๋ฉ์ธ ํ ์คํธ
# 1. IP๋ก ์ง์ ์์ฒญ -> 403 ๋๋ ์ค์ ํ ์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ๋์ด์ผ ํจ
curl -v http://localhost:80/
# 2. ์๋ฑํ ๋๋ฉ์ธ ์์ฒญ -> 403 ์ถ๋ ฅ๋์ด์ผ ํจ
curl -v -H "Host: unknown.com" http://localhost:80/
Next Step:
Apache 2.4 (IHS 9.0 ์ด์)๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด, NameVirtualHost ์ง์์ด๋ ๋ ์ด์ ํ์ํ์ง ์์ผ๋ฏ๋ก ์ญ์ ํ๊ณ , ์ ๊ทผ ์ ์ด ๊ตฌ๋ฌธ์ Require all denied ๋ฑ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.