3.1. 지연풀 특징을 갖는 스퀴드 설치하기
앞에 언급했듯이 스퀴드는 다운로드 대역폭을 제어할 수 있도록 하는 지연풀이라는 특징을 갖고 있다. 그러나 불행히도 대부분의 배포판에서 스퀴드는 이 특징없이 설치된다.
그래서 스퀴드가 이미 설치되어 있다면 이를 설치제거한 후 밑에 설명된 방식으로 지연풀 기능이 작동하도록 다시 설치해야 한다.
스퀴드 프록시에서 최대 성능을 얻기 위해서는 /cache/ 라는 캐시 전용 파티션을 생성하는 것이 가장 좋은데 그 크기는 필요에 따라 대략 300 MB 정도여야 한다.
독립된 파티션 생성 방법을 모른다면 주 파티션에 /cache/ 디렉토리를 생성할 수 있지만 스퀴드 성능은 약간 저하될 수 있다.
안전한 'squid' 사용자를 추가한다:
# useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1
루트를 포함해 어느 누구도 squid 로 로그인할 수 없다.
스퀴드 소스를 http://www.squid-cache.org 에서 다운로드받는다.
이 하우투 문서 작성할 때의 최신 버전은 Squid 2.4 stable 1 이었다:
http://www.squid-cache.org/Versions/v2/2.4/squid-2.4.STABLE1-src.tar.gz
/var/tmp 디렉토리에 압축을 푼다:
# tar xzpf squid-2.4.STABLE1-src.tar.gz
스퀴드 컴파일 (모든 옵션은 동일 라인) 및 설치를 한다:
# ./configure --prefix=/opt/squid --exec-prefix=/opt/squid --enable-delay-pools --enable-cache-digests --enable-poll --disable-ident-lookups --enable-truncate --enable-removal-policies
# make all
# make install
3.2. 지연풀 특징을 사용할 수 있도록 스퀴드 설정하기
squid.conf 파일을 설정해라 (/opt/squid/etc/ 디렉토리 (또는 다른 디렉토리) 에 위치할 수 있다):
#squid.conf
#이 파일의 각 옵션은 원본 squid.conf 파일 및
#http://www.visolve.com/squidman/Configuration%20Guide.html 에
#상세히 설명되어 있다
#
#스퀴드가 요청을 듣는 포트
http_port 8080
icp_port 3130
#cgi-bins 은 캐시되지 않을 것이다
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
#스퀴드가 사용할 메모리. 그렇지만 스퀴드는 이 이상을 사용할 것이다
cache_mem 16 MB
#250 은 스퀴드가 디스크 공간 중 250 MB 사용할 것임을 의미한다
cache_dir ufs /cache 250 16 256
redirect_rewrites_host_header off
cache_replacement_policy GDSF
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 119 70 20 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 deny !Safe_ports
http_access deny CONNECT
http_access deny all
maximum_object_size 3000 KB
store_avg_object_size 50 KB
#랜 사용자들은 모두 리눅스에서 Mozilla 를 사용하는 것처럼 외부 서버들에 보여질 것이다
anonymize_headers deny User-Agent
fake_user_agent Mozilla/5.0 (X11; U; Linux 2.4.4 i686)
#연결을 더욱 더 빠르게 하기 위해 밑의 라인과 비슷한 라인을 놓는다.
#가장 가까이 있는 서버를 변경하는 것을 잊지 마라.
#ping, traceroute 등을 비교 평가해라
#cache_peer w3cache.icm.edu.pl parent 8080 3130 no-digest default
#이는 캐시 관리자를 사용하길 원할 때 유용하다
#cachemgr.cgi 를 www 서버의 cgi-bin 디렉토리로 복사해라
cache_mgr your@email
cachemgr_passwd secret_password all
#스퀴드는 다음의 사용자 이름으로 작동한다
cache_effective_user squid
cache_effective_group squid
log_icp_queries off
buffered_logs on
#####DELAY POOLS
#이는 스퀴드를 이용해 들어오는 트래픽을 결정하는 가장 중요한 부분이다
#세부적인 설명은 squid.conf 파일 또는 http://www.squid-cache.org 의 문서들을 보라
#로컬 네트워크에서 다운로드를 제한하길 원하지 않는다
acl magic_words1 url_regex -i 192.168
#다음 유형 파일들의 다운로드를 제한하길 원한다
#한 라인에 모두 열거한다
acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav
#.html, .gif, .jpg 와 유사한 파일들은 일반적으로 대역폭을 많이 소비하지 않기 때문에
#다운로드에 제한을 두지 않는다
#2개의 다른 지연풀을 갖는다
delay_pools 2
#첫번째 지연풀
#로컬 트래픽을 지연하길 원하지 않는다
#3가지 풀 클래스가 있다; 여기서는 단지 두번째 클래스만 다룰 것이다
delay_class 1 2
#-1/-1 은 제한이 없음을 의미한다
delay_parameters 1 -1/-1 -1/-1
#magic_words1: 192.168
delay_access 1 allow magic_words1
#두번째 지연풀
#magic_words2 에 언급된 파일들의 다운로드를 제한하길 원한다
delay_class 2 2
#숫자들은 바이트 단위인데 스퀴드가 시작/중지 비트를 고려하지 않음을 유념해야 한다
#5000/150000 은 전체 네트워크에 대한 값들이다
#5000/120000 단일 IP 대한 값들이다
#다운로드된 파일들이 150000 바이트를 초과 (두배 또는 세배 이상이라도) 한 후에는
#대략 5000 bytes/s 속도로 계속해서 다운로드할 것이다
delay_parameters 2 5000/150000 5000/120000
delay_access 2 allow magic_words2
#EOF
모든 것을 설정한 후 /opt/squid 와 /cache 디렉토리내의 모든 것들이 사용자 'squid' 에 속하는지 확인해야 한다.
# chown -R squid:squid /opt/squid/
# chown -R squid:squid /cache/
or
# chown -R squid.squid /opt/squid/
# chown -R squid.squid /cache/
이제 스퀴드를 작동할 준비가 되어 있는데 처음 이를 구동할 때는 캐시 디렉토리를 생성해야 한다:
# /opt/squid/usr/bin/squid -z
스퀴드를 작동해서 모든 것이 작동하는지 검사하는데 이를 위한 좋은 도구는 IPTraf 이다; 이는 http://freshmeat.net 에서 찾을 수 있다. 웹 브라우저에 적절한 프록시를 설정했는지 확인해라 (예, 192.168.1.1, port 8080):
# /opt/squid/usr/bin/squid
모든 것이 작동하고 있다면 /opt/squid/usr/bin/squid 라인을 초기화 스크립트의 마지막에 추가하는데 보통 이 스크립트는 /etc/rc.d/rc.local 일 것이다.
스퀴드에서 다른 유용한 옵션들로는 다음이 있을 수 있다:
# /opt/squid/usr/bin/squid -k reconfigure (이는 squid.conf 파일을 변경한 경우 스퀴드를 재설정한다)
# /opt/squid/usr/bin/squid -help :) 자명하다
cachemgr.cgi 을 www 웹 서버의 cgi-bin 디렉토리에 복사할 수 있다.
3.3. 남아있는 문제 해결
스퀴드를 설치해 지연풀을 사용하도록 설정하였다. 틀림없이 어느 누구도 특히 영리한 랜 사용자들은 제한받기를 원하지 않는데 그들은 자신들이 좋아하는 mp3 파일들을 약간 더 빠르게 다운로드하기 위해 제한을 피할려고 할 것이다 (따라서 난처하게 한다).
저자는 사용자들이 IRC, ICQ, 이메일 등을 사용할 수 있도록 랜에 IP-매스쿼레이드를 사용하고 있다고 가정한다. 좋다 그러나 랜 사용자들이 웹 페이지에 접속해 ftp 를 사용하기 위해서 지연풀 기능이 있는 스퀴드를 사용할 것인지를 확신해야 한다.
이러한 문제점들의 대부분은 리눅스 2.2.x 커널의 ipchains 또는 리눅스 2.4.x 커널의 iptables 을 사용해 해결할 수 있다.
3.3.1. 리눅스 2.2.x 커널 (ipchains)
어느 누구도 프록시 서버를 속여 이를 사용하려고 하지 않을 것임을 확신해야 하는데 공개 프록시는 보통 3128 과 8080 포트에서 작동한다:
/sbin/ipchains -A input -s ! 192.168.1.1 -d ! 192.168.1.1 3128 -p TCP -j REJECT
/sbin/ipchains -A input -s ! 192.168.1.1 -d ! 192.168.1.1 8080 -p TCP -j REJECT
또한 어느 누구도 프록시 서버를 속여 웹 페이지를 다운로드하기 위해 직접적으로 인터넷 (IP-masquerade) 에 연결하려고 하지 않을 것임을 확신해야 한다:
/sbin/ipchains -A input -s ! 192.168.1.1 -d ! 192.168.1.1 http -p TCP -j REDIRECT 8080
/sbin/ipchains -A input -s ! 192.168.1.1 -d ! 192.168.1.1 https -p TCP -j REDIRECT 8080
모든 것이 작동하고 있다면 이 라인들을 초기화 스크립트의 마지막에 추가하는데 보통 이 스크립트는 /etc/rc.d/rc.local 일 것이다.
랜 사용자들에게 스퀴드 사용을 강요하기 위해 ftp 트래픽 (포트 20 과 21) 을 막아야 한다고 생각할 수 있지만 적어도 다음 두가지 이유로 인해 좋은 생각은 아니다:
스퀴드는 실제 ftp 프록시가 아닌 ftp 를 지원하는 http 프록시로 ftp 에서 다운로드하거나 ftp 에 업로드할 수 있지만 원격 ftp 서버상의 파일들을 제거하거나 이름을 변경할 수 없다.
포트 20 과 21 을 막는 경우 원격 ftp 서버상의 파일들을 제거하거나 이름을 변경할 수 없다.
IE5.5 는 버그를 갖고 있다 (적어도 저자의 것은 그렇다) -- ftp 디렉토리를 검색하기 위해 프록시를 사용하지 않으며 대신 IP 매스쿼레이드를 통해 직접적으로 연결한다.
포트 20 과 21 을 막는 경우 IE5.5 를 사용해 ftp 디렉토리를 브라우징할 수 없다.
이 때문에 다른 방법을 사용하여 과도한 ftp 다운로드를 막을 것인데 이는 4 장에서 다룰 것이다.
3.3.2. 리눅스 2.4.x 커널 (iptables)
어느 누구도 프록시 서버를 속여 이를 사용하려고 하지 않을 것임을 확신해야 하는데 공개 프록시는 보통 3128 과 8080 포트에서 작동한다:
/sbin/iptables -A FORWARD -s ! 192.168.1.1 -d ! 192.168.1.1 --dport 3128 -p TCP -j DROP
/sbin/iptables -A FORWARD -s ! 192.168.1.1 -d ! 192.168.1.1 --dport 8080 -p TCP -j DROP
또한 어느 누구도 프록시 서버를 속여 웹 페이지를 다운로드하기 위해 직접적으로 인터넷 (IP-masquerade) 에 연결하려고 하지 않을 것임을 확신해야 한다:
/sbin/iptables -A FORWARD -s ! 192.168.1.1 -d ! 192.168.1.1 --dport 80 -p TCP -j DROP
/sbin/iptables -A FORWARD -s ! 192.168.1.1 -d ! 192.168.1.1 --dport 443 -p TCP -j DROP
모든 것이 작동하고 있다면 이 라인들을 초기화 스크립트의 마지막에 추가하는데 보통 이 스크립트는 /etc/rc.d/rc.local 일 것이다.
랜 사용자들에게 스퀴드 사용을 강요하기 위해 ftp 트래픽 (포트 20 과 21) 을 막아야 한다고 생각할 수 있지만 적어도 다음 두가지 이유로 인해 좋은 생각은 아니다:
스퀴드는 실제 ftp 프록시가 아닌 ftp 를 지원하는 http 프록시로 ftp 에서 다운로드하거나 ftp 에 업로드할 수 있지만 원격 ftp 서버상의 파일들을 제거하거나 이름을 변경할 수 없다.
포트 20 과 21 을 막는 경우 원격 ftp 서버상의 파일들을 제거하거나 이름을 변경할 수 없다.
IE5.5 는 버그를 갖고 있다 (적어도 저자의 것은 그렇다) -- ftp 디렉토리를 검색하기 위해 프록시를 사용하지 않으며 대신 IP 매스쿼레이드를 통해 직접적으로 연결한다.
포트 20 과 21 을 막는 경우 IE5.5 를 사용해 ftp 디렉토리를 브라우징할 수 없다.
==============================
<출처: http://unix.co.kr/HOWTO/Bandwidth-Limiting-HOWTO/install.html >