우분투 프록시 서버 구축


우분투 프록시 서버 구축 우분투 환경에서 프록시(Proxy) 서버 구축 방법에 대해 설명드립니다. Forward Proxy 서버와 Reverse Proxy 서버 개념에 대해서 설명 드리며, Apache를 이용하여 프록시 서버 설정 방법에 대해서 함께 설명드립니다.

우분투 프록시 서버 구축

프록시 서버 종류

Proxy 서버는 Forward Proxy 와 Reverse Proxy 서버로 2가지 서버가 존재합니다.

정방향 프록시(Forward Proxy)

일반적인 프록시 서비스를 이용하고자 하는 경우가 이 형태가 됩니다. 클라이언트이 요청은 직접 웹서버로 요청하는 것이 아니라, Proxy 서버로 요청하고 Proxy 서버는 요청을 원래 서버에게 전달합니다. 데이터를 수신할 때에도 실제 웹서버로부터 수신하는 것이 아니로 Proxy 서버를 거처셔서 수신하게 됩니다.

우분투 프록시 설정 방법

역방향 프록시(Reverse Proxy)

일반적으로 프록시 서버를 이용하는 것이 아니고, 서비스를 구축할 때 내부적으로 사용되는 방법입니다.

사용자는 서버에 Reverse Proxy가 적용된 것을 알 수 없습니다. 클라이언트는 ReverseProxy 서버로 설정된 주소로 요청을 하게 되고, Proxy 서버가 받아서 다시 웹서버에게 요청되는 방식입니다. 부하 분산(Load Balancing) 목적 또는 보안 문제가 있을 경우, 서버내에 내부 서비스가 존재할 경우 등에 사용됩니다.

우분투 프록시 설정 방법

우분투 프록시 설정 방법

Proxy 서버 설정

우분투 리눅스 환경에서 위의 2가지 프록시 서버 설정 방법에 대해서 설명드리도록 하겠습니다. 웹 서버는 Apache 기준으로 설명드리며, 시스템에 설치되었다는 가정 하에서 설정 방법만을 설명드리도록 하겠습니다.

Proxy 모듈 활성화

가장 먼저 아래의 명령어로 Proxy 모듈을 활성화 해주시기 바랍니다. 그리고 Forward Proxy와 Reverse Proxy 설정에 따라 나눠서 가각 설정해 주시면 됩니다.

$ sudo a2enmod ssl
$ sudo a2enmod proxy
$ sudo a2enmod proxy_connect
$ sudo a2enmod proxy_ajp
$ sudo a2enmod proxy_balancer
$ sudo a2enmod proxy_html
$ sudo a2enmod proxy_http
$ sudo a2enmod headers
$ sudo a2enmod proxy_fcgi
$ sudo a2enmod rewrite

Forward Proxy 설정

Forward 프록시 서버는 Reverse Proxy 서버에 비해 간단하게 설정할 수 있습니다.
/etc/apache2/sites-enabled 디렉터리에서 설정하고자 하는 서버파일을 열고, 아래 내용과 같은 설정내용을 추가 하면됩니다.


<VirtualHost *:8080>
    ProxyRequests On
    ProxyVia On

    AllowCONNECT 80 443 563

    <Proxy "*">
     	AllowOverride All
        Options All -Indexes
        Require all granted
    </Proxy>

    ErrorLog ${APACHE_LOG_DIR}/error_forward_proxy.log
    CustomLog ${APACHE_LOG_DIR}/access_forward_proxy.log combined
</VirtualHost>

특정 클라이언트 IP로 Proxy 서버 이용에 제한을 두기 위해서는 Require 값을 지정하시면 됩니다.
HTTPS 연결 또한 그대로 Proxy 서버에서 그대로 전달하기 때문에 인증서 없이 Forward 프록시 설정이 가능합니다.

위의 설정에서는 8080으로 포트를 지정하여 설정하였습니다. 아파치 설정에서 Listen 하지 않는 포트일 경우 /etc/apache2/ports.conf 설정 파일에 아래의 내용을 함께 추가해 주셔야 합니다.

Listen 8080

Reverse Proxy 설정

아래의 내용은 웹서버로 들어오는 클라이언트의 접속을 내부 네트워크로 전달하는 Revserse Proxy 서버 설정 방법입니다. 그리고 HTTPS 연결을 처리가기 위한 설정입니다. Apache 웹서버에 SSL 적용 방법에 대해서는 아래의 글을 참고해 주시기 바랍니다.

SSL인증서를 Apache 서버에 설정하는 방법

<VirtualHost *:443>
	ServerName  hiseon.me

	SSLEngine on
	SSLCertificateKeyFile /etc/ssl/hiseon.me/privkey.pem
	SSLCertificateFile /etc/ssl/hiseon.me/cert.pem
	SSLCertificateChainFile /etc/ssl/hiseon.me/fullchain.pem

	SSLProxyEngine On
	SSLProxyCACertificateFile /etc/ssl/hiseon.me/fullchain.pem

	ProxyPreserveHost On
	ProxyRequests Off
	ProxyPass / https://172.17.0.2:443/
	ProxyPassReverse / https://172.17.0.2:443/

	ErrorLog ${APACHE_LOG_DIR}/hiseon.me.error.log
	CustomLog ${APACHE_LOG_DIR}/hiseon.me.access.log combined

	<Directory />
		AllowOverride All
		Options All 
		Require all granted
	</Directory>
</VirtualHost>

위의 웹 서버 설정은 https://hiseon.me 의 요청을 내부망 (172.17.0.2)으로 전달하여 처리하는 내용입니다. Forward Proxy 설정은 SSL 연결을 그대로 전달하여 인증서가 없지만 Reverse Proxy 의 경우 내부적으로 요청을 처리해야 하기 때문에 SSL 인증서가 필요합니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)