커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 네트워크(network) > 프락시 서버(프록시, proxy server) 도움말
검색 : 사이트 WHOIS 웹서버 종류


  squid설치(투명 프락시와 웹가속모드) 작성일 : 2003/11/18 14:28
 
  • 글쓴이 : 비츠로 ( http://vitro.pe.kr/ )
  • 조회수 : 11983
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      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을 통하여 인터넷을
    사용하는 컴터는 모두 웹캐싱을 하여 인터넷을 하게 된다.
      커피닉스 카페 최근 글
    [08/07] Игровые автоматы
    [08/05] ничего особенного
    [08/04] Супер давно искал
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~