2015. 4. 26. 00:45

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

'OPS > LInux' 카테고리의 다른 글

LVM  (0) 2015.04.26
NIS  (0) 2015.04.26
NFS  (0) 2015.04.26
openVPN  (0) 2015.04.26
Iptables  (0) 2015.04.21
Posted by 배주혁
2015. 4. 21. 14:13
Iptables


정의

리눅스 서버의 방화벽은 패킷 필터링 규칙을 통해 설정되는데 이 패킷 필터링은 커널에 탑재된 netfilter 기능으로 한다. netfilter가 어떠한 작동을 하게끔 룰을 세워줘야 하는데 그것을 해주는 것이 iptables이다.

예를들면 이렇다. 54.1.1.0/24 네트워크가 서버로 들어오면 차단 되는 시나리오가 있다. 이때 54.1.1.0/24 네트워크가 서버로 들어오면 차단이라는 룰을 세우는건 iptables가 하고, 패킷 차단을 시키는것은 netfilter가 하게 되는것이다.


기본체인

  종류

    INPUT chain :

외부로 부터 자신에게 접근 하는 것에 대한 설정. 즉 목적지 주소가 자신일때 이다.

    FORWARD chain :

외부로 부터 접속하는건 같으나 자신을 거쳐 가는 것에 대한 설정. 목적지 주소는 자신이 아니며, 보통 게이트웨이 역할을 할때 이다.

    OUTPUT chain :

자신의 나가는 패킷에 대한 설정. 출발지 주소가 자신일때 이다.


  규칙

-L : 규칙 리스트보기

-F : 규칙 초기화

-D : 규칙 삭제

-s : 출발지 주소지정

-d : 목적지 주소지정

-p : 프로토콜지정

-j : 패킷 정책 지정

-i : IN 인터페이스 지정

-o : OUT 인터페이스 지정

-t : table 지정

--dport : 목적지 포트지정

--sport : 출발지 포트지정


예제

  초기화

모든패킷 초기화 

# iptables -F

    INPUT

서버로 오는 패킷 모든 패킷 차단

# iptables -A INPUT -j DROP


서버로 오는 웹 접속요청만 차단

# iptables -A INPUT -p tcp --dport 80 -j DROP

# iptables -A INPUT -j ACCEPT


172.168.0.1 PC만 빼고 모든 접속 허용

# iptables -A INPUT -s ! 172.168.0.1 -j ACCEPT

# iptables -A INPUT -j DROP


172.168.0.0/24 네트워크의 ICMP 요청패킷만 막기

# iptables -A INPUT -s 172.168.0.0/24 -p icmp --icmp-type 8 -j DROP

# iptables -A INPUT -j ACCEPT


172.168.0.0/24 네트워크의 tcp 요청패킷만 막기

# iptables -A INPUT -s 172.168.0.0/24 -p tcp --syn -j DROP

# iptables -A INPUT -j ACCEPT


    FORWARD

ip_forward를 1로 변경후 작업


PC1에서 PC2로 가는 웹접속만 허용

# iptables -A FORWARD -p tcp --dport 80 -s 54.16.0.10  -d 192.168.0.10 -j ACCEPT

# iptables -A FORWARD -s 54.16.0.10 -d 192.168.0.10 -j DROP


192.168.0.0/24 네트워크로 가는 tcp 요청 패킷 막기

# iptables -A FORWARD -p tcp --syn -d 192.168.0.0/24 -j DROP

# iptables -A FORWARD -j ACCEPT


192.168.0.0/24 네트워크에서 다른 네트워크대역의 웹서버 접근 막기

# iptables -A FORWARD -p tcp --dport 80 -s 192.168.0.0/24 -j DROP

# iptables -A FORWARD -j ACCEPT


    POSTROUTING

192.168.0.0/24 네트워크의 발신지 주소 변경

# iptables -t nat -A POSTROUTRING -s 192.168.0.0/24 -o eth1 -j SNAT --to 54.10.1.1


    PREROUTING

54.10.1.1:80으로 접속 해올시 패킷을 192.168.0.10:80으로 재전송

#iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.0.10:80

    

'OPS > LInux' 카테고리의 다른 글

LVM  (0) 2015.04.26
NIS  (0) 2015.04.26
NFS  (0) 2015.04.26
openVPN  (0) 2015.04.26
squid  (0) 2015.04.26
Posted by 배주혁