서버 설정 · 6 min read · Nov 06, 2025

Debian Squeeze, Squid, Kerberos/LDAP 인증, Active Directory 통합 및 Cyfin Reporter - 페이지 2

Squid 구성

중복 LDAP 접근 및 Active Directory의 보안 그룹을 통한 권한을 사용하기 위해 Active Directory에서 속성을 조회할 수 있는 권한을 가진 계정을 생성해야 합니다. Squid는 이 계정을 사용하여 사용자에게 접근을 제공합니다.

Active Directory에서 “Squid Proxy”라는 사용자를 생성하고 로그인 이름을 [email protected]으로 설정한 후 비밀번호를 기록하고 아래의 “squidpass”라는 단어를 귀하의 비밀번호로 대체하십시오.

계정을 생성할 때 다음 사항이 참인지 확인하십시오.

  • 다음 로그인 시 비밀번호 변경: 선택 해제
  • 사용자가 비밀번호를 변경할 수 없음: 선택
  • 비밀번호 만료 없음: 선택
  • 계정 비활성화: 선택 해제

기본적으로 squid 계정은 AD에서 “memberOf” 속성을 조회할 수 없습니다. Active Directory 사용자 및 컴퓨터에서 Active Directory 도메인의 최상위 수준을 선택하고 마우스 오른쪽 버튼을 클릭하여 속성을 선택한 후 보안 탭에서 squid 사용자를 추가하고 읽기 권한을 부여합니다(기본적으로 발생해야 함) 및 고급 옵션으로 들어가 “이 객체 및 모든 자식 객체”를 읽을 수 있도록 허용합니다.

다음 보안 그룹을 Active Directory에 설명과 함께 생성하고 관련 그룹에 사용자를 추가하십시오 - 사용자가 그룹의 일원이 아닌 경우 화이트리스트 ACL에 있는 사이트에만 접근할 수 있습니다.

인터넷 사용자 그룹의 구성원은 blocksites ACL에 있는 웹사이트에 접근할 수 없습니다.

  • 인터넷 사용자 | 설명: 이 그룹의 구성원은 인터넷에 접근할 수 있습니다. 접근은 웹사이트 제한과 함께 기록됩니다.
  • 인터넷 사용자 전체 로그 | 설명: 이 그룹의 구성원은 인터넷에 접근할 수 있습니다. 접근은 전체 웹사이트 접근과 함께 기록됩니다.
  • 인터넷 사용자 전체 비로그 | 설명: 이 그룹의 구성원은 인터넷에 접근할 수 있습니다. 접근은 전체 웹사이트 접근과 함께 기록되지 않습니다.

그런 다음 squid 및 관련 구성 파일을 설정합니다.

Squid 시작

다음 구성을 /etc/default/squid3에 추가하십시오(이 파일은 기본적으로 존재하지 않습니다).

vi /etc/default/squid3
KRB5_KTNAME=/etc/squid3/PROXY.keytab
export KRB5_KTNAME

squid.conf

cp /etc/squid3/squid.conf /etc/squid3/squid.conf.default
cat /dev/null > /etc/squid3/squid.conf
vi /etc/squid3/squid.conf

프록시를 담당하는 사람의 이메일 주소로 캐시 관리자 변수를 업데이트하십시오.

다음 텍스트를 주의 깊게 검토하고 업데이트하십시오. 예제 콘텐츠(강조된 부분)를 귀하의 네트워크 구성으로 교체하십시오 - 잘못된 내용을 입력하면 프록시가 작동하지 않습니다.

####### /etc/squid3/squid.conf 구성 파일 #######
####### 캐시 관리자
cache_mgr [email protected]
####### kerberos 인증
auth_param negotiate program /usr/lib/squid3/squid_kerb_auth -d -s HTTP/squidproxy.example.local
auth_param negotiate children 10
auth_param negotiate keep_alive on
####### kerberos를 통해 인증되지 않은 클라이언트를 위한 ldap 접근 제공
auth_param basic program /usr/lib/squid3/squid_ldap_auth -R \
        -b "dc=example,dc=local" \
        -D [email protected] \
        -w "squidpass" \
        -f sAMAccountName=%s \
        -h domaincontroller1.example.local
auth_param basic children 10
auth_param basic realm Internet Proxy
auth_param basic credentialsttl 1 minute
####### ldap 권한
# 제한된 프록시 접근 기록됨
external_acl_type internet_users %LOGIN /usr/lib/squid3/squid_ldap_group -R -K \
        -b "dc=example,dc=local" \
        -D [email protected] \
        -w "squidpass" \
        -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=Internet Users,ou=Security Groups,ou=MyBusiness,dc=example,dc=local))" \
        -h domaincontroller1.example.local
# 전체 프록시 접근 비로그
external_acl_type internet_users_full_nolog %LOGIN /usr/lib/squid3/squid_ldap_group -R -K \
        -b "dc=example,dc=local" \
        -D [email protected] \
        -w "squidpass" \
        -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=Internet Users Full NoLog,ou=Security Groups,ou=MyBusiness,dc=example,dc=local))" \
        -h domaincontroller1.example.local
# 전체 프록시 접근 기록됨
external_acl_type internet_users_full_log %LOGIN /usr/lib/squid3/squid_ldap_group -R -K \
        -b "dc=example,dc=local" \
        -D [email protected] \
        -w "squidpass" \
        -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=Internet Users Full Log,ou=Security Groups,ou=MyBusiness,dc=example,dc=local))" \
        -h domaincontroller1.example.local
####### acl 프록시 인증 및 ldap 권한
acl auth proxy_auth REQUIRED
# 형식 "acl, aclname, acltype, acltypename, activedirectorygroup"
acl RestrictedAccessLog external internet_users Internet\ Users
acl FullAccessNoLog external internet_users_full_nolog Internet\ Users\ Full\ NoLog
acl FullAccessLog external internet_users_full_log Internet\ Users\ Full\ Log
acl whitelistsites url_regex -i "/etc/squid3/whitelistsites.txt"
acl blockedsites url_regex -i "/etc/squid3/blockedsites.txt"
####### squid 기본값
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # 등록되지 않은 포트
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # 다국어 http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
####### 인증 시행: 규칙의 순서가 권한 수준에 중요함
no_cache deny whitelistsites
http_access allow whitelistsites
http_access allow FullAccessNoLog auth
http_access allow FullAccessLog auth
http_access deny blockedsites
http_access allow RestrictedAccessLog auth
####### 로깅
# whitelistsites, FullAccessNoLog 기록하지 않음
access_log /var/log/squid3/access.log squid !whitelistsites !FullAccessNoLog
####### squid 기본값
http_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

touch /etc/squid3/whitelistsites.txt
touch /etc/squid3/blockedsites.txt
invoke-rc.d squid3 restart

프록시 자동 구성

Apache2 설치:

apt-get install apache2

프록시 구성 스크립트의 파일 형식을 식별하기 위해 Apache2에 구성을 추가하십시오.

vi /etc/apache2/conf.d/wpad.dat
AddType    application/x-ns-proxy-autoconfig .dat

웹 브라우저에서 구성에 사용되는 wpad.dat 파일을 생성하십시오:

vi /var/www/wpad.dat

$proxy로 시작하는 줄을 귀하의 프록시의 FQDN(강조된 텍스트)으로 변경하십시오.

function FindProxyForURL(url, host)
{
        $proxy = "PROXY squidproxy.example.local:3128";
        // 이 네트워크 내의 URL은 직접 접근됩니다.
        if (isInNet(host, "192.168.0.0", "255.255.0.0"))        {return "DIRECT";}
        if (isInNet(host, "172.16.0.0", "255.240.0.0"))         {return "DIRECT";}
        if (isInNet(host, "10.0.0.0", "255.0.0.0"))             {return "DIRECT";}
        if (isInNet(host, "127.0.0.0", "255.0.0.0"))            {return "DIRECT";}
        // 나머지 모든 것에 대해 프록시를 반환합니다.
        else return $proxy;
}

Apache2를 재시작하십시오:

invoke-rc.d apache2 restart

WPAD DNS 항목

경고: 다음 DNS 항목을 추가하면 프록시가 활성화됩니다. 이 시점에서 중지하고 확인하십시오.

  1. 클라이언트 브라우저가 통합 Windows 인증을 사용하고 있는지 확인하십시오.
  2. 모든 사용자가 AD의 관련 인터넷 사용자 보안 그룹에 추가되었는지 확인하십시오.
  3. 모든 클라이언트 브라우저가 인터넷 접근을 위해 프록시 설정을 자동으로 감지하도록 설정되어 있는지 확인하십시오. 그룹 정책을 사용하는 것이 합리적인 옵션이며, 아마도 자동 감지가 구성되지 않은 사용자를 걸러내기 위해 방화벽에서 아웃바운드 HTTP 접근을 제한하는 것이 좋습니다.

Internet Explorer로 접근을 테스트하십시오. “자동 구성 스크립트 사용”을 선택하고 주소 필드에 http://squidproxy.example.local/wpad.dat(물론 귀하의 프록시 FQDN으로 변경) 를 입력한 후 웹사이트에 접근하십시오. 행운을 빕니다. 잘 작동하기를 바랍니다! 작동하지 않으면 여기서 중지하고 문제를 해결하십시오. 그렇지 않으면 많은 화가 난 사용자들이 생길 것입니다!

DNS에 CNAME 레코드를 추가하여 wpad.example.local을 squidproxy.example.local로 지정하십시오.

참고: Server 2008은 wpad를 차단하는 보안 조치를 가지고 있으며, Server 2003에서도 이를 본 적이 있습니다.

wpad DNS 제한을 제거하되 블록리스트는 활성화된 상태로 두려면 Regedit를 실행하고 다음 위치를 엽니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Parameters\GlobalQueryBlockList

Server 2008은 WPAD 및 ISATAP 항목을 가질 가능성이 높습니다. WPAD 항목을 제거하고 DNS 서비스를 재시작하여 블록리스트를 다시 로드하십시오. 그러면 wpad.example.local을 해결할 수 있어야 합니다.

그런 다음 브라우저를 프록시 자동 구성으로 설정하십시오. 모든 최신 웹 브라우저는 wpad 표준을 따르며 http://wpad.example.local/wpad.dat를 구성 정보로 조회하려고 시도합니다.

WPAD에 대한 추가 정보는 여기에서 확인할 수 있습니다: http://wiki.squid-cache.org/Technology/WPAD/DNS

브라우저가 프록시를 사용하고 있는지 확인하려면 squid 로그를 확인하십시오.

선택 사항: Cyphin Reporter 설치

운영하는 프록시와 함께 적절한 보고가 필요합니다. sarg, mysar와 같은 프로그램은 사용자 인터넷 사용 모니터링을 위한 적절한 보고 옵션으로는 부족했습니다. Wavecrest의 Cyfin Reporter는 많은 기능을 갖춘 매우 유능하고 직관적인 보고 시스템으로 입증되었습니다.

다음은 Debian Squeeze에서 squid와 함께 Cyfin Reporter를 설정하고 설치하는 방법입니다.

작성 시점의 최신 Cyfin Reporter 버전은 8.5입니다. 다운로드하기 전에 아키텍처에 따라 다음 위치를 확인하고 필요한 경우 다음 명령을 업데이트하십시오.

http://downloads.wavecrest.net/release/cyfin/linux32/

http://downloads.wavecrest.net/release/cyfin/linux64/

따라서 설치는 다음과 같이 보일 수 있습니다…

cd /usr/local/src/
wget “http://downloads.wavecrest.net/release/cyfin/linux32/v850/c850linux32.bin.gz”
gunzip c850linux32.bin.gz
chmod +x c850linux32.bin

N.B 설치 Anywhere 프로그램이 PS1을 변경하므로 현재 셸에 대해 이를 변경하면 문제가 해결됩니다.

export PS1=”>”
./c850linux32.bin

설치 경로에 대한 프롬프트가 표시되면 다음과 같이 입력하십시오.

* 절대 경로를 입력하거나 기본값을 수락하려면  를 누르십시오.
      : /opt/wavecrest/cyfin*

나머지는 기본값으로 수락하십시오.

Debian 방식으로 cyfin을 시작하고 중지하기 위한 init 스크립트를 생성해야 합니다.

vi /etc/init.d/cyfin
#! /bin/sh
### BEGIN INIT INFO
# 제공:          cyfin
# 시작 필요:    $network $remote_fs
# 중지 필요:     $network $remote_fs
# 기본 시작:     2 3 4 5
# 기본 중지:      0 1 6
# 간단한 설명: cyfin reporter init 스크립트
### END INIT INFO
NAME=cyfin
SCRIPTNAME=/etc/init.d/$NAME
# VERBOSE 설정 및 기타 rcS 변수를 로드합니다.
. /lib/init/vars.sh
# LSB log_* 함수 정의.
# 이 파일이 존재하고 status_of_proc가 작동하도록 lsb-base (>= 3.2-14)에 의존합니다.
. /lib/lsb/init-functions
case "$1" in
        start)          sh /opt/wavecrest/cyfin/cyfin start
        ;;
        stop)           sh /opt/wavecrest/cyfin/cyfin stop
        ;;
        status)         sh /opt/wavecrest/cyfin/cyfin start
        ;;
        restart)        sh /opt/wavecrest/cyfin/cyfin restart
        ;;
        *)              echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
                        exit 3
        ;;
esac
:

chmod +x /etc/init.d/cyfin
update-rc.d cyfin defaults

Cyfin Reporter 구성은 새로운 튜토리얼이 필요하므로 기본 사항을 소개합니다.

구성 GUI에 http://squidproxy.example.local:7999를 통해 접근하십시오. 기본적으로 로그인 이름은 “admin”이며 비밀번호입니다.

  • GUI의 도움을 사용하십시오. 문서가 매우 좋습니다.
  • http://www.wavecrest.net/support/cyfin/reporter/faqs.html에서 FAQ를 확인하십시오.
  • 기본 사항을 설정하기 위해 빠른 시작 메뉴를 사용하십시오. 이는 비교적 간단합니다.
  • 데이터 관리자를 활성화하여 로그 파일을 가져오고 로그 파일 가져오기 일정을 설정하십시오.
  • Active Directory와의 통합을 사용하십시오. LDAP 인증을 위해 생성된 squid 계정을 사용하여 Active Directory에서 정보를 추출할 수 있습니다.
  • Active Directory에서 사용자 목록을 가져오는 일정을 구성하십시오.
  • 사용자가 Active Directory의 보안 그룹 또는 배포 그룹의 일원인지 확인하고 이러한 그룹을 Cyfin Reporter에 추가하십시오.
  • 부서 관리자를 이메일 보고서 수신자로 지정하십시오.
  • 로그를 볼 수 있는 권한이 있는 직원의 접근 계정을 설정하십시오.

Cyfin Reporter를 사용하는 경우 추가 메모리 사용을 고려해야 하므로 충분한 리소스를 할당하십시오.

이로써 튜토리얼이 종료됩니다. 도움이 되기를 바랍니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.