안녕하세요 김현린입니다.
근 2년넘게 해딩해오던 exchange 리버스 프록시 구성이 완성되어..
공유 겸사겸사 해서 소개드립니다.
일단 리버스 프록시란...
필요한 443혹은 80 포트 갯수 이하로 공인 IP가 있는경우
해당 포트를 공유해서 쓸수 있게 해주는 놈입니다.
일반적인 프록시 서버의 반대되는 역방향 프록시입니다.
쉽게 일반 가정집에는 1개의 공인 IP가 있는것이 대부분이죠.
저의 경우에는 exchange와 VM Horizone view 그리고 베리즈 파일서버 등등을 사용하고 있습니다.
모두443 포트를 사용하는 서비스들 인데..
horizon의 경우에는 446포트로 파일서버의 경우에는 449 포트로 바꿔서 사용을 했습니다.
exchange의 경우엔 포트를 변경하는게 매우 심각하게 어렵더라구요...
저의 이전 구성을 그림으로 보면 대략 이렇습니다.
aaa.net 이라는 도매인을 보유하고있고
mail과 view, file의 서브 도매인으로 관리를 하고있습니다.
전부 443 https로 통신을 하지만 공유기에서 포트 포워딩을 해줄수 있는서버는 1대뿐이기에
포트를 변경해서 사용하고 있습니다.
리버스 프록시를 구성하고나면 443 포트 하나를 이용해 위의 모든 서비스를 서브 도매인으로만 관리가 가능해집니다.
대략 이런 그림이 되는거죠.
이 리버스 프록시도 만능은 아닙니다.
HTTP를 기반으로한 프로토콜만 프록싱이 가능하며
많은 커넥션을 처리할때에는 프록시 서버의 성능이 중요해집니다.
저는 Centos7과 아파치를 이용하여 구성 하였습니다.
Centos 설치 후
SELinux를 꺼주세요.
/etc/SELinux/config 을 vi로 까서 disabled 해주시고 리부팅 해주시면 됩니다.
yum install httpd -y
로 아파치를 설치해 주십니다.
그리고 SSL 인증을 위한 모듈을 설치합니다.
yum install mod_ssl -y
ssl 인증서 발급에 관련한 부분은 따로 찾아보세요.
저는 코모도 ssl 인증서를 구매해 사용중입니다.
/etc/httpd/httpd.conf 파일을 열어서
마지막 부분에 리버스 프록시에 필요한 모듈을 추가해 줍니다.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule headers_module modules/mod_headers.so
뭔가 잡다하게 많습니다.
안쓰이는것도 분명히 있을것 같네요..
그다음 /etc/httpd/conf.d 경로 밑에 컨피그 파일을 설정합니다.
#vi view.aaa.conf
#<VirtualHost *:443>
ServerName view.aaa.net
SSLEngine on
SSLCertificateFile /etc/httpd/cert/crt.crt
SSLCertificateKeyFile /etc/httpd/cert/private.key
SSLProxyEngine On
ProxyPass / https://aaa.local:446/
ProxyPassReverse / https://aaa.local:446/
#</VirtualHost>
인증서 파일 부분과 aaa.net 부분 aaa.local 부분만 수정해서 저장합니다.
service httpd restart 명령어로 컨피그 파일을 적용 시켜줍니다.
위 부분에서
ProxyPass / https://aaa.local:446/
ProxyPassReverse / https://aaa.local:446/
이부분을 http 경로로 사용하게되면 http도 https로 사용이 가능해 집니다.
#vi file.aaa.conf
ServerName file.aaa.net
ProxyRequests off
ProxyPreserveHost on
SSLEngine on
SSLCertificateFile /etc/httpd/cert/crt.crt
SSLCertificateKeyFile /etc/httpd/cert/private.key
ProxyPass / http://192.168.10.6:8609/
ProxyPassReverse / http://192.168.10.6:8609/
위와 같이 http도 사용할수 있으며 ip로 넣어도 상관 없습니다.
여기까지가 일반적인 리버스 프록시를 위한 내용입니다.
exchange가 없다면 여기까지만 보셔도 상관 없습니다.
외부에서 넘어오는 443 포트를 해당 리버스 프록시에 할당해 주시고
file.aaa.net이나 view.aaa.net으로 외부에서 접속해 보신다면 리버스 프록시를 경유하여 내부 웹서버들을 접속할수 있게됩니다.
여기서 부터가 제가 2년동안 짬짬히 찾아 해맨 exchage reverse proxy 입니다.
집에 exchage가 있는 저같은 변태가 아니시라면 위 까지만 보시면 될것 같습니다.
exchange를 위와 같이 구성하면 web을 통한 접속이나(owa)
핸드폰같은 모바일에서 붙을때(activesync)는 전혀 문제 없이 사용이 가능 하실껍니다.
하지만 외부에서 Outlook은 붙지 않습니다.
Outlook과 exchange는 MSRPC라는 RPC over http 를 이용하게 되는데..(outlookanywhere)
이게 프록시가 되지 않습니다.
이 MSRPC를 리버스 프록스 해주는 모듈을 설치하면 모든게 해결됩니다.
httpd와 mod_ssl 설치후 추가 패키지를 설치해 주십니다.
# yum install httpd-devel
# yum install git
# yum groupinstall 'Development tools'
# yum install check check-devel
# yum install libuuid-devel
그리고 적당한 임시 폴더를 하나 만들어서
#git clone git://github.com/bombadil/mod_proxy_msrpc
mod_proxy_msrpc를 받습니다.
받고나시면
#./configure
#make
하셔서 컴파일 해주세요.
그리고 나면 src/.libs 밑에 .so 라는 모듈이 하나 생겼을겁니다.
cp mod_proxy_msrpc.so /etc/httpd/modules
로 넘겨 주고 http.conf에
LoadModule proxy_msrpc_module modules/mod_proxy_msrpc.so
한줄 더 넣어주십니다.
vi /etc/httpd/conf.d/mail.aaa.conf로 exchange 용 컨피그파일을 만들어줍니다.
ServerName mail.aaa.net
SSLEngine on
# SSL Config
SSLCertificateFile /etc/httpd/cert/crt.crt
SSLCertificateKeyFile /etc/httpd/cert/private.key
SSLProxyEngine on
ProxyPreserveHost On
# Header Config
Header always set X-Frame-Options SAMEORIGIN
Header set Server Apache
Header unset X-AspNet-Version
Header unset X-OWA-Version
Header unset X-Powered-By
RequestHeader unset Expect early
SetEnvIf User-Agent ".*MSIE.*" value BrowserMSIE
Header unset WWW-Authenticate
Header add WWW-Authenticate "Basic realm=mail.aaa.net"
ProxyRequests Off
ProxyPreserveHost On
# Client SSL Config
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
# Outlook Web Access(OWA)
ProxyPass /owa https://mail.aaa.local/owa
ProxyPassReverse /owa https://mail.aaa.local/owa
# Outlook Anywhere / RPC over http(s)
OutlookAnywherePassthrough On
ProxyPass /rpc https://mail.aaa.local/rpc
ProxyPassReverse /rpc https://mail.aaa.local/rpc
# Microsoft ActiveSync
ProxyPass /Microsoft-Server-ActiveSync https://mail.aaa.local/Microsoft-Server-ActiveSync connectiontimeout=600
ProxyPassReverse /Microsoft-Server-ActiveSync https://mail.aaa.local/Microsoft-Server-ActiveSync
#AutoDiscover
ProxyPass /Microsoft-Server-ActiveSync https://mail.aaa.local/autodiscover connectiontimeout=600
ProxyPassReverse /Microsoft-Server-ActiveSync https://mail.aaa.local/autodiscover
SSLRenegBufferSize 31457280
ServerName autodiscover.aaa.net
SSLEngine on
SSLCertificateFile /etc/httpd/cert/crt.crt
SSLCertificateKeyFile /etc/httpd/cert/private.key
SSLProxyEngine on
ProxyPreserveHost On
Header always set X-Frame-Options SAMEORIGIN
Header set Server Apache
Header unset X-AspNet-Version
Header unset X-OWA-Version
Header unset X-Powered-By
RequestHeader unset Expect early
ProxyRequests Off
ProxyPreserveHost On
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPass /autodiscover https://mail.aaa.local/autodiscover
ProxyPassReverse /autodiscover https://mail.aaa.local/autodiscover
저장하고 httpd 서비스 재시작하여 문제가 없으면 정상 작동 합니다.
두서 없이 쓰다보니 내용이 엄청 길기만하고 정리가 안된듯 합니다만..
혹시나 필요하신 분께 도움 되시면 좋겠습니다 ㅎㅎ
참고 사이트 : https://rin-ka.net/outlookanywhere/
confÆÄÀÏ Ã³À½¿¡ <VirtualHost *:443> ¸¦ ³Ö¾îÁֽðí
conf ÆÄÀÏ ¸Ç ¸¶Áö¸·¿¡ </VirtualHost> ¸¦ ³Ö¾î ÁּžßÇÕ´Ï´Ù.
µð·ºÅ丮 ¼³Á¤µµ ¾Èµé¾î°¡´Â±º¿ä;;
Âü°í »çÀÌÆ® ¿¡¼ conf »ùÇà ȮÀÎ ÇÏ¼Å¾ß ÇÒµí ÇÕ´Ï´Ù..
80À̳ª 443 ó·³ Áߺ¹µÇ´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù »ý°¢ÇÏ½Ã¸é µÉ°Í°°½À´Ï´Ù ¤¾¤¾
¸®¹ö½º ÇÁ·Ï½ÃÀÇ °æ¿ì http ÇÁ·ÎÅäÄݸ¸ Áö¿øÇؼ ¹®Á¦ÀÔ´Ï´Ù.
443 Æ÷Æ®´Â ¸®¹ö½º ÇÁ·Ï½Ã°¡ ¾ÈµÇ¿ä..
CCRÀº CPU ¼º´Éµµ °·ÂÇѵ¥..
EdgeRouter´Â ¾î¶³±î¿ä? ÇÏÇÏ
https ¾ÈµÈ´Ù´Â°Å º¸°í ¹Ù·Î Á¢¾úÁö¸¸¿ä ¤¾¤¾
2013 ÀÌ»óºÎÅÍ´Â TCP 443 ¸¸À¸·Î Outlook ¿¬°áÀÌ µË´Ï´Ù.. arr À̳ª wap °°Àº ´Ü¼øÇÑ À¥ÆÛºí¸®½Ì¿ë ¸®¹ö½ºÇÁ·Ï½Ã·Î ¿ÜºÎÁ¢¼Ó ±¸¼ºÀÌ °¡´ÉÇϰŵç¿ä..
443 Æ÷Æ®¸¦ »ç¿ëÇÏÁö¸¸ RPC OVER HTTP ¶ó´Â³ð¶¡½Ã ´Ù µÇÁö¸¸ OUTLOOKÀº ºÙÁö ¾Ê½À´Ï´Ù.
RPC OVER HTTP´Â ¾ÆÆÄÄ¡ ¸ðµâ·Î¸¸ °¡´ÉÇÕ´Ï´Ù..
Ãßõ ²Ú ´©¸£°í °©´Ï´Ù.