Ubuntu + Squid를 이용한 프록시 구성하기

프록시(Proxy)란 보통 대리인을 뜻하는 영어 단어이다. 일반적으로 브라우저로 웹서핑을 하면 브라우저를 실행하고 있는 컴퓨터와 서버 컴퓨터간의 1 대 1 직접 연결이 이뤄진다. 프록시는 우선 그러한 1 대 1 접속이 이뤄질 수 없는 환경에서 또는 1 대 1 접속을 허용해서는 안되는 환경에서 유용하게 쓰인다. 주로 방화벽 장비에 프록시 서버를 설치하고, 방화벽 뒤에 있는 PC가 프록시를 경유해 웹서핑 또는 FTP 다운로드를 받는다. 여기서 프록시는 그야말로 대리인이다. PC의 브라우저가 보내는 요청을 받아 서버에게 전달하고, 서버에서 받는 내용을 다시 브라우저에도 보내준다. 현재 대부분의 회사나 관공서의 경우 대역폭의 절감과 보안강화 그리고 웹서핑 속도를 높이기 위한 노력을 끊임없이 하고 있다. 이런 기능이 구현된 몇몇 프록시 서버 프로그램이 시장에 선보였는데 이 프로그램들은 몇 가지 문제점을 가지고 있었다. 첫 번째는 오픈소스가 아니라는 점이고 두 번째는 ICP를 지원하지 않는다는 것이다. ICP는 이웃하는 캐시에 특정요청 정보가 존재하는지 정보를 교환하는데 사용되며 인접해 있는 다른 캐시서버에 먼저 저장돼 있는 캐시정보를 전송받아 사용할 수 있도록 하는 것이다.

그러나 이러한 것을 Squid는 두 가지 모두를 충족해주고 오히려 그 이상의 효과를 기대할 수 있게 해주었다. 또한 프록시의 부가적인 이익이로는 대역폭을 경제적으로 사용할 수 있게 해 준다는 것이다. 프록시는 최근 사람들이 공통적으로 방문한 사이트를 디렉토리에 저장해 두었다가 같은 URL에 대한 요청이 들어오면 서버에 연결하지 않고도 디렉토리에서 읽어 즉시 브라우저에게 보내준다.

첫 번째 웹서버 성능을 극대화하고 httpd 가속서버로 구성하는 것이다. Squid가 가속서버로 동작할 때 상당한 효과를 얻을 수 있다.

두 번째는 일반적인 프록시 캐싱서버로 구성하는 것이다. 이렇게 구성함으로써 회사 또는 조직내의 모든 사용자들로 하여금 Squid를 통해서만 인터넷에 접근하도록 할 수 있다. 이것은 상당한 보안효과와 시스템 자체의 속도를 향상 시킬 수 있다. 또한 Squid 자체 설정을 통해 인터넷의 접속제한 여부를 설정할 수도 있다. 이렇게 구성함으로써 유해사이트도 간단히 접근제어할 수 있는 것이다.

설치

squid 와 프록시테스트 프로그램 설치하기

  sudo apt-get install squid 
다음 패키지를 더 설치할 것입니다:
  libltdl7 squid-langpack squid3 squid3-common
제안하는 패키지:
  squidclient squid-cgi
다음 새 패키지를 설치할 것입니다:
  libltdl7 squid squid-langpack squid3 squid3-common

squid 설치결과 확인하기

    dpkg -l squid*

squid 설정하기

   sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original   # 일단 설정백업
   sudo nano /etc/squid/squid.conf                                 # 설정
   sudo service squid3 restart                                      # 재시작

설정 테스트

    squid3 -z ( 캐쉬 디렉토리를 만든다. 이렇게 하였을때 에러 메시지가 없어야 한다 )

전체 허용 설정

visible_hostname VASLOR
# 서버이름
http_port 3128 
#   (프락시 서버의 서비스 포트)
# cache_mem 8MB 
#    (캐시메모리설정)
# Maximum_object_size 4096 
# (캐시에 저장되는 파일 크기 제한-4메가 넘는 파일은 저장하지 않음)
# cache_dir /var/spool/squid 100 16 256
#캐시저장 디렉토리에 100메가까지 저장, 1차 디렉토리는 16개이고 2차 하위디렉토리는 256개
# access_log /var/log/squid3/access.log squid
# cache_log /var/log/squid3/cache.log
# cache_store_log /var/log/squid3/store.log
# 로그 저장 디렉토리 설정.. 자동으로 이렇게 됨. 나중에 찾아보기..
# cache_mgr root
# cache_effective_user
# cache_effective_user
#(캐시서버의 관리자 계정관 squid 서버를 작동시킬 유저와 그룹 지정 기본은 proxy:proxy
acl all src all
# (기본적인 squid acl. 웹가속모드(전체허용)이면 따로  설정하지않아도 됨. 
http_accesss allow all
# 프록시 서버에 접근허용할 클라이언트 설정. 
# 윗줄에서 설정한 all 이라는 그룹을 허용한다는 뜻.

인증 (Digest)모드

아이디와 암호를 따로 관리!

auth_param digest program /usr/lib/squid3/digest_pw_auth /etc/squid3.passwd
~auth_param digest nonce_max_count 50 까지 주석을 제거
#(디렉토리지정외에 따로 설정해줘야할건 없다. 
# 저 의미는 digest_pw_auth 인증을 /etc/squid3.passwd에서 참고해라. 이말씀)
 
#이런다음 digest를 허용.
acl digest proxy_auth REQUIRED (acl 부분 마지막에 추가)
http_access allow digest
# (http_access allow all 윗부분에 추가, allow all과 deny all 주석제거)
 
# 그후 vi /etc/squd3.passwd 파일을 만들어서 계정과 패스워드를 추가하자
# (계정:패스워드) 써주면된다.
# squid 재시작 하면 끝.

basic 모드

리눅스 유저 계정으로 접근!

auth_param basic program /usr/lib/squid3/pam_auth
auth_param casesensitive off 까지 주석제거
# digest와 달리 참고하는 패스워드 파일이 없다. 
# 이는 즉 리눅스 유저 계정으로 접근을 하면된다 이말씀.)
# 그 다음 역시 basic 허용
acl pam proxy_auth REQUIRED
# (왜 basic이 아닌 pam을 썼냐하면, 그건 내맘)
http_access allow pam 
# (위에서 pam으로 썼기 때문에 pam을 허용해야 basic인증이 된다.basic으로 
# 쓰고싶다면 acl 에서 basic proxy_auth REQUIRED로 쓰면됨)
# pam_auth 파일 권한을 바꿔줘야한다.
# chmod u+s /usr/lib/squid3/pam_auth 요러케
# 이제 squid를 재시작 하면 끝.
누구나 수정하실 수 있습니다. 위키 사용법 참고하세요.