exchange 리버스 프로시 구성기입니다.

김현린   
   조회 12069   추천 1    

안녕하세요 김현린입니다.

근 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/

김현린 03-23
쭉 보고나니 conf 파일에 VirtualHost 부분이 본문 안에 안들어가는군요..
conf파일 처음에 <VirtualHost *:443> 를 넣어주시고
conf 파일 맨 마지막에 </VirtualHost> 를 넣어 주셔야합니다.
디렉토리 설정도 안들어가는군요;;
     
김현린 03-23
http 코드 때문에 그런지 <명령어> 가 본문에 나오질 않는군요...
참고 사이트 에서 conf 샘플 확인 하셔야 할듯 합니다..
NGC 03-23
좋은 내용 감사합니다
     
김현린 03-23
읽어주셔서 감사합니다
통통9 03-23
공유기 아래의 내부 서버들이 각각 다른 포트를 사용하는 것을 공유기와 서버 중간에 '리버스 프록시' 를 연결해 하나의 포트로 내부 서버들을 운용할 수 있는 기술로 이해했습니다. 각각의 내부 서버마다 다른 포트를 사용할 생각만 했지. 하나의 포트로 관리할 생각도 못했습니다. 아니 안해봤습니다. 이런 기술도 필요에 의해서 만들어 졌다고 생각됩니다. 좋은 글 잘 봤습니다. 감사합니다.
     
김현린 03-23
공유기 밑단 서비스가 다른 포트를 사용한다면 굳치 리버스 프록시를 사용하지 않으셔도 상관없습니다.
80이나 443 처럼 중복되는 경우에 사용한다 생각하시면 될것같습니다 ㅎㅎ
빠시온 03-23
미크로틱도 이게 되면 좋은데
리버스 프록시의 경우 http 프로토콜만 지원해서 문제입니다.
443 포트는 리버스 프록시가 안되요..
     
송주환 03-23
+1
CCR은 CPU 성능도 강력한데..
EdgeRouter는 어떨까요? 하하
     
김현린 03-23
미크로틱 리버스프록시도 찾아봤습니다.
https 안된다는거 보고 바로 접었지만요 ㅎㅎ
닉세스 03-24
Exchange 서버 버전이 2010 이하이신가요??
2013 이상부터는 TCP 443 만으로 Outlook 연결이 됩니다.. arr 이나 wap 같은 단순한 웹퍼블리싱용 리버스프록시로 외부접속 구성이 가능하거든요..
     
김현린 03-24
2013입니다.
443 포트를 사용하지만 RPC OVER HTTP 라는놈땀시 다 되지만 OUTLOOK은 붙지 않습니다.
epowergate 03-26
혹시 HA-Proxy를 사용하지 않으신 이유가 있을까요?
     
김현린 03-26
본문이 난잡해서 그런가 내용 전달이 안되는군요...
RPC OVER HTTP는 아파치 모듈로만 가능합니다..
여가시간 03-27
좋은 정보 감사합니다.
추천 꾹 누르고 갑니다.




제목Page 1/14
07-13   760   2420
07-02   1505   읍내노는오빠
06-10   3667   MSmikoto
05-31   4951   TRUE
05-29   5255   채영진
05-24   5852   송주환
05-01   9898   빠시온
04-30   9117   RedEye
04-21   9636   송주환
04-16   10726   이종근
04-12   11386   황진우
04-05   11554   박문형
04-02   9970   isul
03-23   12070   김현린
03-07   14072   pain
03-01   14676   제온프로
02-20   16007   무아
02-13   18682   간장게장
01-01   25072   catstyle
2017-12   27631   차넷컴퓨터