2009년 8월 13일 목요일

Squid 프록시 서버

Squid 프록시 서버 ▦LInux
2005/09/12 13:23
http://blog.naver.com/darkstorm001/40017472839
Squid 프록시 서버

프록시(Proxy)란 보통 대리인을 뜻하는 영어 단어이다. 일반적으로 브라우저로 웹서핑을 하면 브라우저를 실행하고 있는 컴퓨터와 서버 컴퓨터간의 1 대 1 직접 연결이 이뤄진다. 프록시는 우선 그러한 1 대 1 접속이 이뤄질 수 없는 환경에서 또는 1 대 1 접속을 허용해서는 안되는 환경에서 유용하게 쓰인다. 주로 방화벽 장비에 프록시 서버를 설치하고, 방화벽 뒤에 있는 PC가 프록시를 경유해 웹서핑 또는 FTP 다운로드를 받는다. 여기서 프록시는 그야말로 대리인이다. PC의 브라우저가 보내는 요청을 받아 서버에게 전달하고, 서버에서 받는 내용을 다시 브라우저에도 보내준다.

현재 대두분의 회사나 관공서의 경우 대역폭의 절감과 보안강화 그리고 웹서핑 속도를 높이기 위한 노력을 끊임없이 하고 있다. 이런 기능이 구현된 몇몇 프록시 서버 프로그램이 시장에 선보였는데 이 프로그램들은 몇 가지 문제점을 가지고 있었다. 첫 번째는 오픈소스가 아니라는 점이고 두 번째는 ICP를 지원하지 않는다는 것이다. ICP는 이웃하는 캐시에 특정요청 정보가 존재하는지 정보를 교환하는데 사용되며 인접해 있는 다른 캐시서버에 먼저 저장돼 있는 캐시정보를 전송받아 사용할 수 있도록 하는 것이다.

그러나 이러한 것을 Squid는 두 가지 모두를 충족해주고 오히려 그 이상의 효과를 기대할 수 있게 해주었다. 또한 프록시의 부가적인 이익이로는 대역폭을 경제적으로 사용할 수 있게 해 준다는 것이다. 프록시는 최근 사람들이 공통적으로 방문한 사이트를 디렉토리에 저장해 두었다가 같은 URL에 대한 요청이 들어오면 서버에 연결하지 않고도 디렉토리에서 읽어 즉시 브라우저에게 보내준다.
여기서는 웹서버 성능의 최적화를 위해 두 가지 다른 방법으로 Squid 서버를 설치하고 설정하는 방법에 대해 알아본다.
첫 번째 웹서버 성능을 극대화하고 httpd 가속서버로 구성하는 것이다. Squid가 가속서버로 동작할 때 상당한 효과를 얻을 수 있다.
두 번째는 일반적인 프록시 캐싱서버로 구성하는 것이다. 이렇게 구성함으로써 회사 또는 조직내의 모든 사용자들로 하여금 Squid를 통해서만 인터넷에 접근하도록 할 수 있다. 이것은 상당한 보안효과와 시스템 자체의 속도를 향상 시킬 수 있다. 또한 Suqid 자체 설정을 통해 인터넷의 접속제한 여부를 설정할 수도 있다. 이렇게 구성함으로써 유해사이트도 간단히 접근제어할 수 있는 것이다.

Squie 사이트 :
http://www.squid-cache.org

Squid 컴파일, 최적화 및 설치

Squid 사이트에서 소스를 다운로드한 후 적절한 디렉토리에 복사한다. 그 다음 필요한 디렉토리에 옮겨 압축을 해제한다.

#cp squid-2.5.STABLE1.tar.gz /usr/local/src#cd /usr/local/src#tar xvzf squid-2.5.STABLE1.tar.gz

압축을 풀어 Squid 디렉토리로 이동한 후 컴파일한다. Squid 자체를 컴파일하기 전에 아래와 같은 컴파일 옵션을 사용해 최적화한다.

#./configure --prefix=/usr/local/squid --libexecdir=/usr/lib/squid --localstatedir=/var --sysconfdir=/etc/squid --enable-auth-modules="PAM" --enable-linux-netfilter#make#make install

이러한 것처럼 Squid의 컴파일 및 설치는 매우 간단하다. 일단 프록시 서버의 설정 및 컴파일이 끝난 후에는 더 이상 관련 프로그램들이 필요없으므로 삭제하도록 한다.

#rm -rf squid-2.5.STABLE1rm -f squid-2.5.STABLE1.tar.gz

Squid 보안과 최적화

Squid에서의 보안과 최적화는 일단 다른 응용프로그램의 더 이상 추가가 필요없다는 점이다. 기본 설치된 프로그램만으로도 효율적으로 보안을 강화시킬 수 있고 Squid 자체의 최적화도 가능하다.

1. Squid 캐시 디렉토리 마운트 제어
Squid의 캐시정보가 기록되는 디렉토리를 설정함으로써 한층 강화된 보안성능을 구현할 수 있다. 시스템 내에서 어떠한 바이너리도 실행할 수 없고, 문자나 특별한 블록장치를 인식하지 않기 위해서 다음과 같이 설정한다. 여기서는 /var/spool 이라는 파티션이 기존에 정의되있는 것으로 가정하였다.

#vi /etc/fstab/var/spool /var/spool ext2 defaults,noexec,nodev 1 2#mount /var/spool -oremount

위와 같이 변경한 내용을 적용시키면 된다.
보안적인 측면을 더욱 강화하기 위해서 Squid의 설정 파일을 불변설정한다. 아래와 같이 한다면 관리자가 직접 해제하지 않는 이상 파일의 수정, 추가가 불가능하다.

#chattr +i /etc/squid/squid.conf

만약 수정, 추가가 필요할때는 -i 옵션을 사용하면 된다.

Squid의 성능을 강화하고 최적화하는 방법으로 가장 중요한 부분이 메모리이다. Squid 자체는 CPU보다는 메모리 자원에 의존한다. 그러므로 가능한 충분한 메모리를 확보하도록 한다. 또한 Squid가 사용하는 캐시의 읽고 쓰는 속도를 향상하기 위해 IDE보다는 스카시 하드디스크를 사용하는 것이 좋다.

다음 단계는 Squid 서버를 용도에 맞게 설정하는 일이다. Squid의 설정 파일은 /etc/squid/squid.conf에 위치하게 된다. squid.conf 파일을 어느 정도 용도에 맞게 설정하느냐에 따라 성능향상의 폭을 높일 수 있다. 처음으로 웹 가속모드를 설정하고 그 다음은 프로시 캐싱모드로 작동하도록 설정하겠다.
먼저 squid.conf는 앞서 언급한 Squid의 주 설정 파일이다. 파일의 내용을 자세히 보면 알겠지만 상당히 많은 옵션이 제공되고 있으나 실제로는 주요 몇 개의 옵션만 수정하면 된다. 또한 자세한 설명으로 별로 어렵지 않게 응용할 수도 있다. squid.conf 파일의 주요 내용은 다음과 같다.

http_port 80

icp_port 0
cache_mem 8 MB
cache_dir ufs /var/spool 100 16 256
emulate_httpd_log on
acl all src 0.0.0.0/0.0.0.0
http_access allow localhost
httpd_accel_host 201.111.132.32
httpd_accel_port 80
buffered_logs on

옵션별로 자세히 설명을 하자면,

http_port 80
'http_port' 80 옵션은 HTTP 클라이언트가 요청했을 경우 Squid가 응답할 소켓 주소이다. 디폴트 포트는 3128이고 만약 가속모드로 동작하는 Squid의 경우는 80번 포트를 사용해야 한다.

icp_port 0
'icp_port'는 Squid가 ICP 쿼리를 인접하는 캐시로부터 주고 받을 포트를 정의한다. 디폴트는 3103이며 사용하지 않을 경우는 0으로 설정한다. Squid 웹 가속모드로 사용할 경우에는 0으로 해 사용하지 않는 상태로 설정한다. 이유는 Squid가 웹 가속모드로 작동할 경우 ICP를 사용하면 그 만큼 Squid에 불필요한 자원을 낭비하기 때문이다.

cache_mem 8 MB
'cache_mem'옵션은 In-Transit objects, hot Objects, Negative-Cached objects을 캐싱하기 위해 지원되는 메모리를 지정하는 옵션이다. 기본은 8MB이다.

cache_dir ufs /var/spool 100 16 256
'cache_dir ufs /var/spool/squid 100 16 256'은 Squid가 사용할 캐시 디렉토리 정의와 디스크용량, 디렉토리 수를 정의한다. 기본적으로 /var/spool 디렉토리를 사용하지만 디스크 용량이 여의치 않다면 특정 디렉토리로 변경 사용할 수 있다. 그 다음에 열거되는 수는 첫 번째, 앞에서 정의한 디렉토리의 용량을 설정한다. 따라서 /var/spool 디렉토리가 사용할 디스크용량은 100MB이다. 16과 256은 각각 캐시 디렉토리에서 생성할 하위 디렉토리 수 16과 첫 번째 하위 디렉토리에서 생성될 두 번째 하위 디렉토리 수 256이다
.

emulate_httpd_log on
'emulate_httpd_log on'옵션은 Squid 자체가 많은 'httpd' 프로그램이 사용하는 로그포맷에 따라 로그를 남기도록 하는 설정이다. 따라서 Squid 자체도 별도의 웹로그 분석 툴로 로그 분석 보고서를 만들 수 있다.

acl all src 0.0.0.0/0.0.0.0

http_access allow
위의 두 옵션은 Squid 서버에 접근제어 설정에 사용하는 옵션이다. 현재는 웹 가속모드로 설정하기 때문에 따른 접근제한을 두지 않았다. 물론 다른 목적으로 Squid 서버를 구성할 때에는 이옵션을 적절히 제한해야만 한다.

httpd_accel_host 201.111.132.32

httpd_accel_port 80
'httpd_accel_host'는 실제 웹서버의 가속을 위하여 사용된다. 201.111.132.32로 Squid 서버가 웹가속 해주게 된다. 'httpd_accel_port 80'은 설명할 필요 없이 해당 포트를 정의한 것이다.


buffered_logs on
실제로 중요한 작동을 하는 옵션은 아니다. 로그 기록시 사용되는 시스템 자원을 절약함으로써 약간의 속도 향상을 기대할 수 있는 옵션이다.

프록시 캐싱모드로 Squid 설정

프록시 캐싱모드는 앞서 말한 웹 가속모드와는 완전히 다른 개념이다. Squid를 프록시 캐싱모드로 사용한다면 해당 네트워크의 모든 가입자가 Squid를 통해야만 인터넷 및 다른 네트워크로 접근할 수 있는 것이다. 또한 별도의 설정으로 내부 사용자들의 사이트 방문지나 연결시간 등을 제어할 수 있다.
앞서 설정한 웹 가속모드와 비슷하게 squid.conf를 수정하면 된다. 다만 접근제어 옵션부분만 자신의 네트워크 상황에 맞게 수정하면 된다. 프록시 캐싱모드에서는 접근제어목록(ACL)을 사용한다. 이 옵션으로 원본주소, 목적지주소, 원본도메인, 목적지도메인, 시간등을 제한 설정할 수 있고 자세한 내용은 squid.conf의 내용을 참조바란다.
접근제어 목록에 대해 간단히 살펴보면 다음과 같다.

acl aclname acltype string1 .....acl aclname acltype "file' .....

예를 들자면,

acl localhost src 172.19.210.0/255.255.255.0

사설 IP 172.19.210.0 내부 사용자에 대해 Squid에 접근 가능토록 설정한 것이다. 물론 목적지 기반으로 dst를 사용 목적지 IP를 가진 네트워크에 대해서는 접근을 제어할 수 있다. 그럼 다음 접근제어목록을 보면서 이해 바란다.

acl localhost src 127.0.0.1/255.255.255.255acl localhost src 172.19.210.0/255.255.255.0
acl Safe_ports port 80 443acl CONNECT method CONNECTacl all src 0.0.0.0/0.0.0.0http_access allow localhosthttp_access allow localnethttp_access deny !Safe_portshttp_access deny CONNECThttp_access deny all

acl 설정으로 로컬 및 사설 IP인 172.19.210.0을 사용하는 내부에게만 프록시 서버를 접근할 수 있도록 한 것이다. 또한 내부 포트 80, 443만 사용하도록 했고 명시되지 않은 어떠한 네트워크와 포트를 제한했다.
이와 같이 프록시 캐싱모드로 Squid를 활용한다면 적절한 설정으로 네트워크 및 포트등을 통제할 수 있다. 따라서 부적절한 사이트에 대해 근본적으로 차단할 수 있다. 이런 효과를 바탕으로 더 많은 부분에 대해서 활용될 수 있는 것도 Squid의 장점이다.
출처 :
Tong - ggypsy님의 배우자! 이것통

댓글 없음:

댓글 쓰기