웹사이트 검색

제한된 액세스로 Squid 프록시 서버 구성 및 프록시를 사용하도록 클라이언트 설정 - 5부


Linux 재단 인증 엔지니어는 Linux 시스템에서 네트워크 서비스를 설치, 관리 및 문제 해결하는 전문 지식을 갖추고 시스템의 설계, 구현 및 지속적인 유지 관리를 담당하는 숙련된 전문가입니다. 넓은 아키텍처.

Linux Foundation 인증 프로그램을 소개합니다.

이 시리즈의 1부에서는 웹 클라이언트용 프록시 캐싱 서버인 squid를 설치하는 방법을 보여주었습니다. 아직 시스템에 오징어를 설치하지 않은 경우 진행하기 전에 해당 게시물(아래 링크)을 참조하세요.

  1. 1부 - 네트워크 서비스 설치 및 부팅 시 자동 시작 구성

이 기사에서는 인터넷 액세스를 허용하거나 제한하기 위해 Squid 프록시 서버를 구성하는 방법과 해당 프록시 서버를 사용하도록 http 클라이언트 또는 웹 브라우저를 구성하는 방법을 보여줍니다.

내 테스트 환경 설정

오징어 서버
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
클라이언트 머신 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
클라이언트 머신 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

간단히 말해서 웹 프록시 서버는 하나 이상의 클라이언트 컴퓨터와 특정 네트워크 리소스 사이의 중개자이며 가장 일반적인 것은 인터넷 액세스라는 점을 기억하십시오. 즉, 프록시 서버의 한쪽은 인터넷(또는 인터넷에 연결된 라우터)에 직접 연결되고 다른 쪽은 이를 통해 World Wide Web에 액세스할 클라이언트 컴퓨터 네트워크에 연결됩니다.

네트워크 인프라에 또 다른 소프트웨어를 추가하려는 이유가 무엇인지 궁금할 것입니다.

가장 중요한 3가지 이유는 다음과 같습니다.

1. Squid는 향후 전송 속도를 높이기 위해 이전 요청의 파일을 저장합니다. 예를 들어, client1이 인터넷에서 CentOS-7.0-1406-x86_64-DVD.iso를 다운로드한다고 가정합니다. client2가 동일한 파일에 대한 액세스를 요청하면 squid는 인터넷에서 파일을 다시 다운로드하는 대신 캐시에서 파일을 전송할 수 있습니다. 추측할 수 있듯이 이 기능을 사용하면 일종의 빈번한 업데이트가 필요한 컴퓨터 네트워크에서 데이터 전송 속도를 높일 수 있습니다.

2. ACL(액세스 제어 목록)을 사용하면 웹사이트에 대한 액세스를 제한하거나 사용자별로 액세스를 모니터링할 수 있습니다. 예를 들어 요일이나 시간, 도메인 등을 기준으로 액세스를 제한할 수 있습니다.

3. 클라이언트가 인터넷에 직접 요청하는 대신 요청이 이루어지고 요청된 콘텐츠를 클라이언트에 반환하는 웹 프록시를 사용하면 웹 필터 우회가 가능해집니다.

예를 들어, client1에 로그온했고 회사 라우터를 통해 www.facebook.com에 액세스하려고 한다고 가정해 보겠습니다. 회사 정책에 따라 사이트가 차단될 수 있으므로 대신 웹 프록시 서버에 연결하여 www.facebook.com에 대한 액세스를 요청하도록 할 수 있습니다. 그러면 회사 라우터의 차단 정책을 우회하여 원격 콘텐츠가 웹 프록시 서버를 통해 다시 사용자에게 반환됩니다.

오징어 구성 – 기본 사항

Squid 웹 프록시 서버의 액세스 제어 체계는 두 가지 구성 요소로 구성됩니다.

  1. ACL 요소는 "acl"라는 단어로 시작하고 요청 트랜잭션에 대해 수행되는 테스트 유형을 나타내는 지시문 라인입니다.
  2. 액세스 목록 규칙허용 또는 거부 작업과 그 뒤에 오는 여러 ACL 요소로 구성되며, 어떤 작업이나 제한 사항이 있는지 나타내는 데 사용됩니다. 주어진 요청에 대해 시행됩니다. 순서대로 확인되며, 규칙 중 하나가 일치하는 즉시 목록 검색이 종료됩니다. 규칙에 여러 ACL 요소가 있는 경우 부울 AND 연산으로 구현됩니다(규칙이 일치하려면 규칙의 모든 ACL 요소가 일치해야 함).

Squid의 기본 구성 파일은 /etc/squid/squid.conf이며 구성 지시문과 문서가 모두 포함되어 있으므로 ~5000줄 길이입니다. 이러한 이유로 우리는 편의를 위해 구성 지시문을 포함하는 줄만 포함하고 빈 줄이나 주석 처리된 줄은 제외하고 새 squid.conf 파일을 생성할 것입니다. 이를 위해 다음 명령을 사용합니다.

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

그런 다음,

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

이제 새로 생성된 squid.conf 파일을 열고 다음 ACL 요소와 액세스 목록을 찾거나 추가하세요.

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

위의 두 줄은 ACL 요소 사용의 기본 예를 나타냅니다.

  1. 첫 번째 단어인 acl은 이것이 ACL 요소 지시문 행임을 나타냅니다.
  2. 두 번째 단어인 localhost 또는 localnet는 지시문의 이름을 지정합니다.
  3. 이 경우 세 번째 단어인 src는 각각 클라이언트 IP 주소 또는 주소 범위를 나타내는 데 사용되는 ACL 요소 유형입니다. IP(또는 일종의 DNS 확인이 구현된 경우 호스트 이름) 또는 네트워크 주소로 단일 호스트를 지정할 수 있습니다.
  4. 네 번째 매개변수는 지시문에 "제공"되는 필터링 인수입니다.

아래 두 줄은 액세스 목록 규칙이며 앞서 언급한 ACL 지시문의 명시적인 구현을 나타냅니다. 간단히 말해서 요청이 로컬 네트워크(localnet) 또는 localhost에서 오는 경우 http 액세스가 허용되어야 함을 나타냅니다. 구체적으로 허용되는 로컬 네트워크 또는 로컬 호스트 주소는 무엇입니까? 대답은 localhost 및 localnet 지시문에 지정된 것입니다.

http_access allow localnet
http_access allow localhost

이 시점에서 Squid를 다시 시작하여 보류 중인 변경 사항을 적용할 수 있습니다.

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

그런 다음 로컬 네트워크(이 경우 192.168.0.104)에서 클라이언트 브라우저를 구성하여 다음과 같이 프록시를 통해 인터넷에 액세스합니다.

파이어폭스에서

1. 수정 메뉴로 이동하여 환경설정 옵션을 선택하세요.

2. 고급을 클릭한 다음 네트워크 탭을 클릭하고 마지막으로 설정을 클릭하세요.

3. 수동 프록시 구성을 확인하고 프록시 서버의 IP 주소와 프록시 서버가 수신 중인 포트를 입력하세요. 연결을 위해.

참고 기본적으로 Squid는 포트 3128에서 수신 대기하지만 액세스 목록 http_port로 시작하는 규칙(기본적으로 http_port 3128로 읽음)

4. 확인을 클릭하여 변경 사항을 적용하면 됩니다.

클라이언트가 인터넷에 액세스하고 있는지 확인

이제 다음과 같이 로컬 네트워크 클라이언트가 프록시를 통해 인터넷에 액세스하고 있는지 확인할 수 있습니다.

1. 클라이언트에서 터미널을 열고 다음을 입력하세요.

ip address show eth0 | grep -Ei '(inet.*eth0)'

해당 명령은 클라이언트의 현재 IP 주소(다음 이미지의 192.168.0.104)를 표시합니다.

2. 클라이언트에서 웹 브라우저를 사용하여 특정 웹 사이트(이 경우 linux-console.net)를 엽니다.

3. 서버에서 실행합니다.

tail -f /var/log/squid/access.log

Squid를 통해 제공되는 요청을 실시간으로 볼 수 있습니다.

클라이언트의 액세스 제한

이제 특정 클라이언트 IP 주소에 대한 액세스를 명시적으로 거부하면서 나머지 로컬 네트워크에 대한 액세스는 유지한다고 가정해 보겠습니다.

1. 다음과 같이 새로운 ACL 지시문을 정의합니다(저는 이름을 ubuntuOS로 지정했지만 원하는 대로 이름을 지정할 수 있습니다).

acl ubuntuOS src 192.168.0.104

2. 이미 존재하는 localnet 액세스 목록에 ACL 지시어를 추가하되 앞에 느낌표를 붙입니다. 이는 "ubuntuOS 지시문과 일치하는 클라이언트를 제외하고 localnet ACL 지시문과 일치하는 클라이언트에 인터넷 액세스를 허용"을 의미합니다.

http_access allow localnet !ubuntuOS

3. 이제 변경 사항을 적용하려면 Squid를 다시 시작해야 합니다. 그런 다음 사이트를 탐색하려고 하면 이제 액세스가 거부되었음을 알 수 있습니다.

오징어 구성 - 미세 조정

도메인 및/또는 시간/요일별 액세스 제한

도메인별로 Squid에 대한 액세스를 제한하기 위해 다음과 같이 ACL 지시문에 dstdomain 키워드를 사용합니다.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

여기서 forbidden_domains는 액세스를 거부하려는 도메인이 포함된 일반 텍스트 파일입니다.

마지막으로 위 지시문과 일치하지 않는 요청에 대해 Squid에 대한 액세스 권한을 부여해야 합니다.

http_access allow localnet !forbidden

아니면 월요일(M)에만 하루 중 특정 시간(오전 10시부터 11시까지)에만 해당 사이트에 대한 액세스를 허용하고 싶을 수도 있습니다. 수요일(W)금요일(F).

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

그렇지 않으면 해당 도메인에 대한 액세스가 차단됩니다.

사용자 인증을 통한 접근 제한

Squid는 여러 인증 메커니즘(Basic, NTLM, Digest, SPNEGO 및 Oauth)과 도우미(SQL 데이터베이스, LDAP, NIS, NCSA 등)를 지원합니다. 이 튜토리얼에서는 NCSA와 함께 기본 인증을 사용합니다.

/etc/squid/squid.conf 파일에 다음 줄을 추가하세요.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

참고: CentOS 7에서 오징어용 NCSA 플러그인은 /usr/lib64/squid/basic_nsca_auth 에서 찾을 수 있습니다. 이므로 위 줄에 맞게 변경하세요.

몇 가지 설명:

  1. 프로그램 이름을 지정하여 auth_param 지시어와 함께 사용할 인증 도우미 프로그램을 Squid에게 알려줘야 합니다(대부분 /usr/lib/squid/ncsa_auth 또는 < Strong>/usr/lib64/squid/basic_nsca_auth) 및 필요한 경우 모든 명령줄 옵션(이 경우 /etc/squid/passwd).
  2. /etc/squid/passwd 파일은 파일을 통해 기본 인증을 관리하는 도구인 htpasswd를 통해 생성됩니다. Squid를 사용할 수 있는 사용자 이름(및 해당 비밀번호) 목록을 추가할 수 있습니다.
  3. credentialsttl 30분을 사용하려면 30분마다 사용자 이름과 비밀번호를 입력해야 합니다(이 시간 간격을 시간 단위로 지정할 수도 있음).
  4. 대소문자 구분은 사용자 이름과 비밀번호가 대소문자를 구분함을 나타냅니다.
  5. 영역은 오징어를 인증하는 데 사용되는 인증 대화 상자의 텍스트를 나타냅니다.
  6. 마지막으로 프록시 인증(proxy_auth 필수)이 성공한 경우에만 액세스 권한이 부여됩니다.

다음 명령을 실행하여 파일을 생성하고 gacanepa 사용자에 대한 자격 증명을 추가합니다(파일이 이미 있는 경우 -c 플래그 생략).

htpasswd -c /etc/squid/passwd gacanepa

클라이언트 컴퓨터에서 웹 브라우저를 열고 특정 사이트를 찾아보세요.

인증이 성공하면 요청된 리소스에 대한 액세스 권한이 부여됩니다. 그렇지 않으면 액세스가 거부됩니다.

캐시를 사용하여 데이터 전송 속도 향상

Squid의 차별화된 기능 중 하나는 동일한 클라이언트나 다른 클라이언트에 의한 해당 개체에 대한 향후 요청 속도를 높이기 위해 웹에서 요청한 리소스를 디스크에 캐싱할 수 있다는 것입니다.

squid.conf 파일에 다음 지시어를 추가하세요.

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

위 지시문에 대한 몇 가지 설명입니다.

  1. ufs는 Squid 저장 형식입니다.
  2. /var/cache/squid는 캐시 파일이 저장될 최상위 디렉토리입니다. 이 디렉터리는 존재해야 하며 Squid가 쓸 수 있어야 합니다(Squid는 이 디렉터리를 생성하지 않습니다).
  3. 1000은 이 디렉토리에서 사용할 양(MB)입니다.
  4. 16은 첫 번째 수준 하위 디렉터리의 수인 반면, 256/var/spool/squid 내의 두 번째 수준 하위 디렉터리의 수입니다.
  5. maximum_object_size 지시문은 캐시에 허용되는 개체의 최대 크기를 지정합니다.
  6. refresh_pattern은 Squid에게 특정 파일 형식(이 경우 .mp4.iso)을 처리하는 방법과 요청된 파일을 얼마나 오랫동안 저장해야 하는지 알려줍니다. 캐시에 있는 개체(2,880분=2일)

첫 번째와 두 번째 2880은 각각 명시적인 만료 시간이 없는 객체가 최근 객체로 간주되어 캐시에서 제공되는 기간에 대한 하한 및 상한입니다. 반면 0%는 명시적인 만료 시간이 없는 각 객체가 최근 객체로 간주되는 객체 수명(마지막 수정 이후 시간)의 비율입니다.

사례 연구: 2개의 다른 클라이언트에서 .mp4 파일을 다운로드하고 캐시 테스트

첫 번째 클라이언트(IP 192.168.0.104)는 2분 52초 안에 71MB .mp4 파일을 다운로드합니다.

두 번째 클라이언트(IP 192.168.0.17)는 1.4초 만에 동일한 파일을 다운로드합니다!

이는 첫 번째 인스턴스와 달리 두 번째 경우에는 파일이 Squid 캐시(TCP_HIT/200로 표시됨)에서 제공되었기 때문입니다. 인터넷(TCP_MISS/200으로 표시).

200 http 응답 코드와 함께 HITMISS 키워드는 파일이 두 번 모두 성공적으로 제공되었지만 캐시는 HIT되었음을 나타냅니다. 그리고 각각 놓쳤습니다. 어떤 이유로 캐시에서 요청을 처리할 수 없는 경우 Squid는 인터넷에서 해당 요청을 처리하려고 시도합니다.

결론

이 기사에서는 Squid 웹 캐싱 프록시를 설정하는 방법에 대해 논의했습니다. 프록시 서버를 사용하면 선택한 기준에 따라 콘텐츠를 필터링하고 대기 시간을 줄일 수도 있습니다(동일한 수신 요청이 실제로 콘텐츠를 제공하는 웹 서버보다 클라이언트에 더 가까운 캐시에서 제공되기 때문에 더 빠른 결과를 얻을 수 있습니다). 데이터 전송) 및 네트워크 트래픽(사용된 대역폭의 양을 줄여 트래픽 비용을 지불하는 경우 비용을 절약)도 마찬가지입니다.

추가 문서를 보려면 Squid 웹 사이트를 참조할 수도 있지만(위키도 확인하세요), 질문이나 의견이 있으면 주저하지 말고 저희에게 연락하세요. 우리는 귀하의 의견을 매우 기쁘게 생각합니다!