squid
squid는 프락시 서비스중 하나이다. 프락시 서버는 사용자와 인터넷 사이에 있는 서버인데, 자신이 어떤 사이트에 접속하려 하면 프록시 서버를 거치게 되며 그 사이트는 프록시 서버가 접속하게 되고, 받아온 정보를 프록시는 사용자에 전달 한다. 그러니 중간에서 중계를 한다. 인터넷 사용을 기록하고, 특정 사이트를 차단한다던지 데이터 캐싱을 이용하여 내부사용자의 빠른 인터넷 속도를 제공하는 역할로 쓰인다. 한번 접속한 사이트를 자신의 캐시에 저장해 놓음으써 다시 그 사이트를 접속하지 않아도 되므로 인터넷 속도가 향상된다.
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
cache_mem 8 MB// 프록시서버 캐쉬메모리 크기
maximum_object_size_in_memory 8 KB
-> 캐시파일중 8KB가 넘는 파일은 저장하지 않음
http_port 3128// 포트 설정
cache_dir ufs /var/spool/squid 100 16 256
-> /var/spool/squid를 캐쉬 디렉토리로 지정 최대 용량을 100MB로 지정 1차 하위 디렉토리 개수를 16개로 지정 2차 하위디렉토리를 개수를 256개로 지정
visible_hostname proxy// 프록시서버 호스트 네임
access_log /var...// 엑세스한 클라이언트의 로그
cache_log /var/log...// 캐시 로깅파일
cache_store_log /var...// 캐시의 활동사항(지워진거, 저장되어있던 시간)의 로그파일
log_ip_on_direct on// 다이렉트로 나가는 데이터들에 대한 목적지IP주소를 기록 off 로 하면 호스트 네임으로 저장
pid_filename /var/run..// 프록시서버데몬의 PID를 기록할 파일 지정, 사용안할시 none
cache_dns_program /u...// 프록시서버가 사용할 dns서버 정보를 기록하고 있는 파일
dns_timeout 2 minutes// DNS쿼리 시간을 지정, 지정 값 동안 응답이 없으면 timeout
hosts_file /etc/hosts// 로컬 호스트네임서비스를 위한 호스트 파일지정
cache_mgr webmaster// 관리자 Email계정
cache_effective_user p..// squid 데몬을 실행할 유저
cache_effective_group ..// squid 데몬을 실행할 그룹
http_access deny all
-> 엑세스리스트에 정의되어 있는 설정들의 요청을 거부 할것인가 deny all은 모두 거부 한다는 뜻 이고 allow all은 모두 허용한다는 뜻이며 allow kim_network는 kim_network를 허용 한다는 뜻. 여기서 allow 뒤에 오는 kim_network같은 것은 acl kim_network src 192.168.0.0/255.255.255.0 여기서 쓰이는 kim_network이다.
그리고 http_access지시문을 사용할 때 앞에 있는것을 우선시 한다.
error_directory /usr/share/squid/errors/English
-> 에러 메시지를 어떤 언어로 보여줄지, 한국어로 바꾸려면 마지막을 Korean으로 변경
acl kim_network src 192.168.0.0/255.255.255.0
-> 192.168.0.0/255.255.255.0 네트워크를 kim_network로 정의
acl [목록이름] src [IP주소]가 형식이며 IP주소가 출발지인 것을 목록이름으로 지정
acl bad_do dst 172.16.0.0/8
-> 172.168.0.0/8 네트워크를 bad_do로 정의
acl [목록이름] dst [IP주소]가 형식이며 IP주소가 목적지인 것을 목록이름으로 지정
acl bad_domain dstdomain www.game.com
-> www.game.com으로 접속하는 것을 bad_domain으로 정의
acl pport port 21
-> 21번 포트에 대한 접근을 pport로 정의
acl [목록이름] port [포트번호]가 형식이며 포트번호에 대한 접근을 목록이름으로 지정
acl actime time 11:00-13:00
-> 11:00시부터 13:00까지의 시간을 actime으로 정의
acl [목록이름] time [hh:mm-hh:mm]
acl acdayti time MTWH 11:00-13:00
-> 월화수목 11:00시 부터13:00까지의 시간을 acdayti로 정의
acl [목록이름] time [SMTWHFA(날짜)] [hh:mm-hh:mm(시간)]
S=sunday,M=monday,T=tuesday,W=wednesday,H=thursday,F=friday,A=saturday
acl gam url_regex ^http://www.game
-> http:/www.game으로 시작하는 URL의 접속을 정의 ^가 붙으면 URL의 맨 앞을 뜻함
acl ya url_regex 19.com
-> 19.com가 들어가는 URL의 접속을 정의 아무것도 붙지 않으면 URL중 들어있는 문자
--------------------------------------------------------------------
- 인증
·사용자 파일을 만든 인증
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
...
auth_param digest program ......
-> auth_param digest program /usr/lib/squid/digest_pw_auth /etc/squid/squid.passwd로 변경하고 주석을 풀어줌
auth_param digest children 5
.
.
auth_param digest nonce_max_count 50
acl digest proxy_auth REQUIRED
http_access allow digest
http_access deny all
--------------------------------------------------------------------
auth_param digest program부터 auth_parm digest nonce_max_count 50까지 주석을 풀어준다. 이 부분에서 auth_param digest program만 auth_param digest program /usr/lib/squid/digest_pw_auth /etc/squid/squid.passwd로 변경해 준다.
인증 창에 뜨는 메시지를 변경 시는 auth_param digest realm뒤에 나오는 문구를 수정
# vim /etc/squid/squid.passwd
--------------------------------------------------------------------
lee:skills
kim:skills
--------------------------------------------------------------------
squid.passwd파일에 인증에 사용할 사용자를 입력 형식은 <사용자이름>:<패스워드>
·리눅스 유저를 이용한 인증
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
uth_param basic program....
-> auth_param basic program /usr/lib/squid/pam_auth로 변경하고 주석을 품
.
.
auth_param basic casesensitive off
acl user proxy_auth REQUIRED
http_access allow user
http_access deny all
--------------------------------------------------------------------
uth_param basic program부터 uth_param basic casesensitive off까지 주석을 풀어 주고 uth_param basic program을 auth_param basic program /usr/lib/squid/pam_auth로 변경 해 주고, 주석을 풀어준 모든 행 앞부분에 uth를 모두 auth로 변경해 주어야한다. 인증 창에 뜨는 문구를 변경 해고 싶다면 auth_param basic realm뒤에 있는 문자를 변경해준다.
- 실습
·game URL이 들어간 사이트 차단
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl gam url_regex game
http_access deny gam
http_access allow all
--------------------------------------------------------------------
# /etc/init.d/squid restart
· stury URL이 들어간 사이트만 허용
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl good_site url_regex study
http_access allow study
http_access deny all
--------------------------------------------------------------------
# /etc/init.d/squid restart
· 192.168.0.0/24 대역에서 접속하는 주소 거부(192.168.0.0/24가 출발지)
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl bad_add src 192.168.0.0/255.255.255.0
http_access deny bad_add
http_access allow all
--------------------------------------------------------------------
· http://www.maple로 시작하는 URL과 http://maple로 시작하는 URL 막기
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl bad_maple url_regex ^http://www.maple
acl bad_maple url_regex ^http://maple
http_access deny bad_maple
http_access allow all
--------------------------------------------------------------------
· 10:00부터 11:30까지는 모든 접속을 막기
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl timm time 10:00-11:30
http_access deny timm
http_access allow all
--------------------------------------------------------------------
· 09:00~18:00까지는 막지만 단 12:00부터 13:00까지는 허용하기
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl work_time time 09:00-18:00
acl rice_time time 12:00-13:00
http_access allow rice_time
http_access deny work_time
--------------------------------------------------------------------
· www.apache.com으로의 접속 막기
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl bad_domain dstdomain www.apache.com
http_access deny bad_domain
http_access allow all
--------------------------------------------------------------------
· 목요일만 접속 막기
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
.
.
acl mok time H
http_access deny mok
http_access allow all
--------------------------------------------------------------------
· 투명 프록시
# vim /etc/squid/squid.conf
--------------------------------------------------------------------
http_port 3128 transparent
--------------------------------------------------------------------
프록시 서버와 웹서버가 같다면
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
# iptables -t nat -A PREROUTING -p udp --dport 80 -j REDIRECT --to-port 3128
웹서버가 122.20.1.97이고 프록시 서버가 122.20.1.122라면
# ipatbles -t nat -A PREROUTING -p tcp -d 122.20.1.97 --dport 80 -j DNAT --to 122.20.1.122:3128