| squid설치(투명 프락시와 웹가속모드) | 작성일 : 2003/11/18 14:28 |
| 조회수 : 15287 |
|
squid http가속 모드와 프락시 캐싱 모드 이 두가지 모드로 동작할 수 있는데 http가속 모드는 특정 몇몇 사이트의 웹페이지를 자신의 캐시 디렉토리에 저장해두고 요청하는 클라이언트에 자신의 캐시 정보를 빠르게 보여주는 역활을 하는것이다. 즉 실제 웹서버는 81번 포트로 서비스를 하고 http가속 모드로 동작하는 squid는 80포트로 서비를 하게 된다. 즉 웹서버와 프락시를 하나의 서버에 설치할 경우 이다. 나는 이 경우에 대한 설정만 다루도록 한다. 별도의 http 가속 모드로 서버를 하나 마련할경우는 아마도 사원들만 사용할 수 있는 빠르게 접근해야 할 페이지가 있을경우에 하면 적당할 듯하다. 사실 프락시 캐싱 서버라는 개념은 아는 사람은 알것이지만 잘 사용을 안하는것 같다. 그러나 http 가속 모드는 꽤나 유용할 수도 있을거 같다. 실무에서는 프락시 서버와 방화벽기능을 상용 소프트웨어를 사용하고 리눅스 말고 freebsd를 사용하더라. 그러나 그렇다하더라도 개념은 리눅스의 iptable과 squid를 이용한 프락시와 같다. 그러므로 나중에 상용 프락시나 방화벽을 이용할시에 분명히 개념을 이해하는데 많은 도움이 된다. 그래서 공부겸 해서 한번 설치해보고 실제 웹서버에 http 가속 모드로 설치하니 상황에 따라 나은 성능을 발휘하기도 했다. 그렇지만 솔직히 실제 서비스시에는 사용을 안하는게 더 나을지도 모르겟다. squid를 이용하여 http가속 모드와 프락시 캐싱 모드 설치시 둘다 설치는 똑같으나 설정파일을 설정하는것만 다르다. squid서버를 설치하기 전에 malloc이라는 소스를 먼저 설치를 하는데. 이놈을 설치하는 이유는 squid를 돌릴때 조금더 성능이 낫다고 한다. 정확히는 나도 잘모르지만 메모리가 부족할 경우등에 gnu malloc을 설치하면 해결된다고 한다. 먼저 각 소스를 다운 받는다. gnu malloc을 아래 사이트에서 다운 받는다. ftp://ftp.linux.sarang.net/mirror/gnu/gnu/malloc.tar.gz squid를 아래 사이트에서 다운 받는다. http://www.squid-cache.org/Versions/v2/2.5/ echo "########################" echo "### malloc install ###" echo "########################" 소스 파일의 압축을 해제 tar xpzf malloc.tar.gz -C /var/tmp 압축해제 경로로 이동 cd /var/tmp/malloc 컴파일 옵션 설정 export CC=gcc;export CFLAGS="-O2 -march=i686 -funroll-loops -fomit-frame-pointer" 컴파일 make 컴파일한 파일 내 시스템 라이브러리로 복사 cp -f libmalloc.a /usr/lib/libgnumalloc.a cp -f malloc.h /usr/include/gnumalloc.h echo "### squid 서버 설치 ###" 받은 소스의 압축을 해제 한다. tar xpzf squid-2.5.STABLE1.tar.gz -C /var/tmp 소스 경로로 이동 cd /var/tmp/squid-2.5.STABLE1 이제 소스의 설정파일들을 수정해서 프리픽스를 레드햇 기준으로 고치겠다. src/Makefile.in 파일을 수정 (로그 경로 /var/log/squid로 변경) DEFAULT_LOG_PREFIX = $(localstatedir)/logs 라인을 DEFAULT_LOG_PREFIX = $(localstatedir)/log/squid 로 수정 src/Makefile.in 파일을 수정 (캐쉬 저장 경로 /var/log/squid로 변경) DEFAULT_SWAP_DIR = $(localstatedir)\/cache DEFAULT_SWAP_DIR = $(localstatedir)\/spool\/squid squid 데몬 유저 추가 useradd -r -d /var/spool/squid -s /bin/false -c "squid Server" -u 23 squid 컴피그 하기 CFLAGS="-O2 -march=i686 -funroll-loops" \ ./configure \ --prefix=/usr \ --bindir=/usr/sbin \ --libexecdir=/usr/lib/squid \ --localstatedir=/var \ --sysconfdir=/etc/squid \ --mandir=/usr/share/man \ --enable-dlmalloc \ --enable-gnuregex \ --enable-xmalloc-statistics \ --with-pthreads \ --enable-removal-policies="heap" \ --enable-cachemgr-hostname=`hostname` \ --enable-storeio=diskd,ufs \ --enable-delay-pools \ --enable-cache-digests \ --enable-default-err-language=Korean \ --enable-err-language=Korean \ --enable-poll \ --enable-linux-netfilter \ --enable-truncate 위에서 --enable-cachemgr-hostname=`hostname` 이 옵션은 자신의 캐시 매니저로 접속할 호스트를 지정할 수 있는것인데.... 위처럼 `hostname`이라고 되어있는건 기본적으로 자신의 localhost를 이야기하는것이다. 다른 웹서버에서 cachemgr.cgi를 사용해서 내 squid서버의 캐싱 상태를 보고자 한다면 다른 웹서버의 호스트명을 적어주면 된다. 컴파일 make find /* > /root/"$PACKAGE"1 실제 설치 make install 로그와 캐쉬 디렉토리 생성 및 퍼미션 조정 mkdir -p /var/spool/squid mkdir -p /var/log/squid chown squid.squid /var/spool/squid/ chown squid.squid /var/log/squid/ chmod 750 /var/spool/squid/ chmod 750 /var/log/squid/ 설치시 만들어지는 로그 경로 삭제 rm -rf /var/logs/ 실행 바이너리(실행파일) 링크 제거 strip /usr/sbin/RunCache strip /usr/sbin/squid strip /usr/sbin/squidclient strip /usr/lib/squid/* 라이브러리 경로 재설정 ldconfig 첨부파일을 다운 받아서 팸과 시작스크립로 복사 \cp -f sysconfig/squid /etc/sysconfig/ \cp -f pam.d/squid /etc/pam.d/ \cp -f logrotate.d/squid /etc/logrotate.d/ \cp -f init.d/squid /etc/rc.d/init.d/ find /* > /root/"$PACKAGE"2 시작 스크립트 등록 chmod 700 /etc/rc.d/init.d/squid chown 0.0 /etc/rc.d/init.d/squid chkconfig --add squid chkconfig --level 345 squid on squid서버의 캐싱 상태를 볼수 있는 cgi스크립트가 소스에 포함되어있는데. cachemgr.cgi라는 파일이다.(만약 다른곳에 있는 웹서버를 이용시는 그 웹서버로 아래 파일을 복사) 캐시 매니저를 자신의 웹서버의 cgi를 실행할수 있는 곳에 복사한다. install -m755 -owww -gwww /usr/lib/squid/cachemgr.cgi /home/httpd/cgi-bin/ 나의 경우는 아파치의 cgi루트가 /home/httpd/cgi-bin이므로 위처럼 복사했다. ------------ httpd accelerator mode 로 사용시 설정 시작 ----------------------------- 아래처럼 squid설정 파일 생성 echo "http_port 80 icp_port 0 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 128 MB #redirect_rewrites_host_header off cache_replacement_policy heap GDSF memory_replacement_policy heap GDSF cache_dir diskd /var/spool/squid 1000 16 256 cache_store_log none emulate_httpd_log on acl all src 0.0.0.0/0.0.0.0 http_access allow all cache_mgr vitro@vitro.pe.kr cache_effective_user squid cache_effective_group squid httpd_accel_uses_host_header on httpd_accel_host $HOSTNAME httpd_accel_host mail.$HOSTNAME httpd_accel_host www.$HOSTNAME httpd_accel_host jsp.$HOSTNAME httpd_accel_host smtp.$HOSTNAME httpd_accel_port 81 logfile_rotate 0 log_icp_queries off cachemgr_passwd 9192 all buffered_logs on #httpd_accel_with_proxy on" > /etc/squid/squid.conf 위의 설정에서 http_port 80는 squid가 서비스할 포트고 httpd_accel_port 81 는 아파치의 포트다. virtual hostname = $HOSTNAME virtual hostname = www.$HOSTNAME virtual hostname = jsp.$HOSTNAME virtual hostname = mail.$HOSTNAME virtual hostname = smtp.$HOSTNAME 의 $HOSTNAME을 자신이 사용하고 있는 버추얼 호스팅 서버명으로 고치면 된다. 그리고 아파치가 80번으로 돌아가고 있는것을 아파치설정파일(httpd.conf)를 열어서 80포트로 된것을 81번 포트로 다 고쳐준다. ------------ httpd accelerator mode 로 사용시 설정 끝 ----------------------------- ------------ Proxy mode 로 사용시 설정 시작 ----------------------------- echo "icp_port 0 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 128 MB cache_replacement_policy heap GDSF memory_replacement_policy heap GDSF cache_dir diskd /var/spool/squid 2000 16 256 cache_store_log none #acl localnet src 192.168.1.0/255.255.255.0 acl localhost src 127.0.0.1/255.255.255.255 acl Safe_ports port 80 443 210 70 21 1025-65535 acl CONNECT method CONNECT acl all src 0.0.0.0/0.0.0.0 #http_access allow localnet http_access allow localhost http_access allow all http_access deny !Safe_ports http_access deny CONNECT #http_access deny all cache_mgr vitro@vitro.pe.kr cache_effective_user squid cache_effective_group squid logfile_rotate 0 log_icp_queries off cachemgr_passwd 9192 all buffered_logs on #httpd_accel_with_proxy on" > /etc/squid/squid.conf 위의 설정에서 squid가 서비스할 포트를 지정하지 않았는데 지정하지 않을경우 기본으로 3128포트를 사용한다. 이제 웹브라우저의 도구 -> 인터넷 옵션 -> 연결 -> 랜설정 -> 사용자랜에 프록시 사용을 체크한뒤 자신의 리눅스 프락시로 ip주소를 적고 포트를 3128로 지정해주고 인터넷을 하면 이제부터 보이는 웹 사이트 화면은 먼저 프락시에서 페이지를 읽어온뒤에 윈도우 웹브라우저로 보여지는것이다. 이와 같은 브라우저에서의 프락시 설정을 하지 않고 사용하고 싶을때 패킷필터 방화벽설정을 하여서 80포트로 가는 패킷을 3128번 포트로 리다이렉트하는 방법이 있다. 이것을 Transparent Proxy(투명 프락시)라고 하는데 이것을 설정하는 것은 쉬우며 젤 아래에 설정을 추가할 부분을 추가한다. ------------ Proxy mode 로 사용시 설정 끝 ----------------------------- squid데몬 스타트 /etc/rc.d/init.d/squid start --------------------- 투명 프락시 사용할시 --------------------------- 투명 프락시를 사용할 경우에는 내부 네트워크(192.168.0.0)가 필요하고 공인 아피를 가진 리눅스가 한대 있다고 가정하고 이 리눅스에는 랜카드가 두개 있어야한다. 즉 리눅스 gateway서버로 돌아가는 리눅스가 한대 필요하다. gateway설정은 kldp를 참조하라. gateway설정은 잘 되어있다고 보고 아래와 같은 설정을 게이트웨이의 iptables룰에 추가한다. 혹시 모르므로 아래같은 마스크레이드 룰이 적용 안되었다면 적용해라 iptables -t nat -A POSTROUTING -p TCP -s 0/0 --dport 21 -j MASQUERADE iptables -t nat -A POSTROUTING -p TCP -d 0/0 --dport 20 -j MASQUERADE iptables -t nat -A POSTROUTING -p TCP --dport 25 -j MASQUERADE iptables -t nat -A POSTROUTING -p TCP --dport 110 -j MASQUERADE iptables -t nat -A POSTROUTING -p TCP --dport 22 -j MASQUERADE iptables -t nat -A POSTROUTING -p TCP --dport 23 -j MASQUERADE echo "###################################################################################" echo "### Transparent Proxy with Squid ###" echo "### iptables -t nat -A PREROUTING -p TCP --dport 80 -j REDIRECT --to-port 3128 ###" echo "###################################################################################" 그리고 squid.conf에 다음의 설정을 추가한다. httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on 이제 squid를 데몬을 재시작하면 이 리눅스 gateway을 통하여 인터넷을 사용하는 컴터는 모두 웹캐싱을 하여 인터넷을 하게 된다. |
|||||||||
|
|