pfSense WPAD/PAC 프록시 구성 가이드

pfSense WPAD/PAC 프록시 구성 가이드

2017년 12월 11일 최종 수정.

더 이상 제어와 유연성을 제공하는 pfBlockerNG로 이동하면서 광고 필터링을 위해 네트워크에서 프록시를 사용하지 않습니다. 그러나 업데이트된 가이드에 대한 여러 요청을 받았으므로 여기 있습니다. 처음에는 프록시가 투명하게 작동하도록 설정했지만 이 방법은 네트워크의 모든 최근 변경 사항과 완전히 작동하지 않았습니다. 필터링 시스템이 계속 작동하려면 포트 3128을 사용하도록 각 장치를 별도로 구성해야 했기 때문에 불편했습니다. WPAD/PAC(Web Proxy Auto-discovery Protocol & Proxy Auto Configure)라는 시스템은 쉬운 해결 방법과 장치가 내 네트워크에 연결할 때 자동으로 구성하는 기능을 약속했습니다. 이것은 구성 파일에 액세스하는 다른 방법을 가진 다른 장치로 인해 부분적으로 예상만큼 쉽지 않았습니다.

프록시 검색 파일 생성

먼저 프록시 구성 파일을 만듭니다. 프록시 구성 정보를 얻기 위해 다른 파일 이름을 사용하는 브라우저가 다르기 때문에 이 중 3개가 필요합니다.

우리는 초기 만듭니다 proxy.pac파일을, 다음이 ‘연결’파일을 생성 wpad.dat하고 wpad.da쉽게 동기화 그들 모두를 유지 편리해집니다 파일을.

ee /usr/local/www/nginx/proxy.pac

방금 만든 파일에 다음을 붙여넣습니다. 내 프록시 주소(192.168.1.1)를 귀하의 것으로 변경하십시오.

function FindProxyForURL(url,host)
{
  // If the requested website is hosted within the internal networks, send direct.
  if (isPlainHostName(host) ||
    shExpMatch(host, "*.local.lan") ||
    isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
    isInNet(dnsResolve(host), "172.16.0.0",  "255.240.0.0") ||
    isInNet(dnsResolve(host), "192.168.0.0",  "255.255.0.0") ||
    isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
    return "DIRECT";

  //Default rule: all other traffic use below proxy
  return "PROXY 192.168.1.1:3128";
}

이 PAC 파일은 조회 중인 호스트가 일반 호스트 이름, 즉 “인트라넷”인지 또는 로컬 네트워크에 있는지 확인합니다. 그렇다면 액세스가 프록시(“DIRECT”)를 우회합니다. 위의 조건 중 어느 것도 충족되지 않으면 프록시 및 포트 3128을 통해 액세스가 이루어집니다.

블랙/화이트 리스트 등과 같은 기능을 포함하도록 이 PAC 파일 기능을 확장하는 것이 가능합니다.

링크를 생성하여 다른 두 파일 변형을 만듭니다. 나중에 변경하는 경우 모든 버전을 동기화된 상태로 유지하므로 바람직합니다.

ln -s /usr/local/www/nginx/proxy.pac /usr/local/www/nginx/wpad.dat

ln -s /usr/local/www/nginx/proxy.pac /usr/local/www/nginx/wpad.da

완료되면 폴더가 다음과 같이 표시되는지 확인합니다.

$ ls -l
-rw-r--r--  1 root  wheel  537 Jul 19 12:07 50x.html
-rw-r--r--  1 root  wheel  612 Jul 19 12:07 index.html
-rw-r--r--  1 root  wheel  212 Aug  6 11:43 proxy.pac
lrwxr-xr-x  1 root  wheel    9 Aug  6 11:45 wpad.da -> proxy.pac
lrwxr-xr-x  1 root  wheel    9 Aug  6 11:45 wpad.dat -> proxy.pac

두 번째 nginx 웹 서버 설정

모범 사례에 따르면 보안 HTTP와 443의 다른 포트를 통해서만 pfSense webConfigurator에 대한 액세스를 허용해야 합니다. 이것은 약간의 문제를 남깁니다. 기본 및 유일한 시스템 파일 서버는 이 보안 포트에서 webConfigurator 페이지를 제공하는 데 전용이며 더 이상 포트 80에서 WPAD 데이터를 제공하는 데 동시에 사용할 수 없습니다. WAD 구성 파일을 제공할 수 있으려면 WPAD 요청을 처리할 두 번째 파일 서버를 만들어야 합니다.

시스템 기본 nginx 구성 파일을 복제하여 시작하겠습니다. 이것을 두 번째 nginx 인스턴스의 기초로 사용할 수 있습니다. 이 파일은 재부팅 시 삭제되므로 /var/etc 폴더에 생성하지 마십시오. 구성 파일이 저장된 폴더와 동일한 폴더를 사용합니다.

ee /usr/local/etc/nginx/nginx-wpad.conf

아래 내용을 이 파일에 붙여넣습니다.

worker_processes  1;
pid               /var/run/nginx-wpad.pid;

events {
    worker_connections  1024;
}

http {
    include       wpad-mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  wpad;

        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
        }
    }
}

추가 파일 형식 추가

를 입력하여 이 nginx 인스턴스에 대한 특정 wpad-mime.types를 생성할 수 있습니다 ee /usr/local/etc/nginx/wpad-mime.types. 이 파일에 다음 줄을 붙여넣습니다.

types {
    text/html                             html htm shtml;
    text/css                              css;
    image/jpeg                            jpeg jpg;
    text/plain                            txt;

    application/x-ns-proxy-autoconfig     pac;
    application/x-ns-proxy-autoconfig     dat;
    application/x-ns-proxy-autoconfig     da;
}

두 번째 nginx가 작동하는지 확인

다음 명령을 입력하고 오류가 표시되지 않는지 확인하여 두 번째 nginx 인스턴스가 작동하는지 테스트합니다.

/usr/local/sbin/nginx -c /usr/local/etc/nginx/nginx-wpad.conf

다음을 입력하여 두 Nginx 서버가 모두 실행 중인지 확인할 수 있습니다.

ps ax | grep -i "nginx: master"

결과에는 예를 들어 각각의 구성 파일로 실행 중인 두 nginx 인스턴스가 모두 포함되어야 합니다.

$ ps ax | grep -i "nginx: master"
ps ax | grep -i "nginx: master"
52936  -  Is       0:00.00 nginx: master process /usr/local/sbin/nginx -c /var/etc/nginx-webConfigurator.conf (nginx)
75222  -  Is       0:00.00 nginx: master process /usr/local/sbin/nginx -c /usr/local/etc/nginx/nginx-wpad.conf (nginx)
84471  2  S+       0:00.00 grep -i nginx: master

참고: 두 번째 NGINX 인스턴스를 시작하는 데 문제가 있고 포트가 이미 사용 중임을 보고하는 오류가 표시되면 WebConfigurator 리디렉션이 비활성화되었는지 확인하십시오. 시스템 > 고급 > 관리자 액세스로 이동하여 WebGUI redirect, Disable webConfigurator redirect선택 되었는지 확인 합니다.

nginx-wpad를 자동 실행으로 설정

부팅 시 두 번째 nginx 인스턴스를 시작하거나 어떤 이유로든 충돌이 발생하면 다시 시작하도록 cron 작업을 구성합니다. nginx 모듈이 이미 실행 중인지 확인하는 파일을 만들고, 실행 중이 아니면 다음을 입력하여 시작합니다.

ee /root/check_proxy_wpad.sh

방금 만든 이 파일에 다음을 붙여넣습니다.

#!/bin/sh
pgrep -F /var/run/nginx-wpad.pid
if [ $? == 0 ];then
    /bin/echo running
else
    /usr/local/sbin/nginx -c /usr/local/etc/nginx/nginx-wpad.conf
fi

이 스크립트를 실행 가능으로 설정

chmod +x /root/check_proxy_wpad.sh

자동 실행을 위한 cron 작업 생성

명령줄을 통해 이 작업을 수행할 수 있지만 시스템 > 패키지에서 사용할 수 있는 Cron 도구를 사용하면 훨씬 쉽게 작업할 수 있습니다. 아직 설치하지 않은 경우 설치하고 서비스 > Cron으로 이동합니다.

다음과 같이 작업을 생성합니다.

  • 분 = *
  • 시간 = *
  • 요일 = *
  • 요일 = *
  • 사용자 = 루트
  • 명령 = /root/check_proxy_wpad.sh

당신의 직업은 다음과 같아야 합니다.

크론 편집

저장 클릭

재부팅하고 두 번째 nginx 인스턴스가 명령 셸과 명령 ps aux | grep -i "nginx: master"명령을 사용하여 자동으로 시작되는지 확인하는 것이 좋습니다.

WPAD 파일 제공

WPAD 파일을 제공하는 방법에는 DNS와 DHCP의 두 가지가 있습니다. 둘 중 하나 또는 둘 모두를 함께 사용할 수 있습니다. 제 개인 테스트에서 DHCP가 더 안정적이라는 다른 사용자의 말을 들었지만 DNS가 더 안정적인 것으로 나타났습니다.

DHCP를 통해 주소가 수신되지 않으면 시스템이 다음에 DNS로 폴백됩니다. 두 시스템을 동시에 실행할 수 있습니다. 내가 2014년에 원본 가이드를 작성했을 때 Firefox는 DHCP를 통해 WPAD를 지원하지 않았는데 이는 꽤 오랫동안 알려진 버그였습니다. 두 가지 방법을 모두 자세히 설명하겠지만 두 가지 방법을 모두 시도해 보고 어떤 방법이 귀하와 귀하가 서비스하려는 고객에게 가장 적합한지 확인하는 것이 좋습니다.

DNS 구성

이 가이드에서 중점적으로 다룰 DNS Forwarder에서 DNS Resolver로 업그레이드했습니다.

서비스 > DNS 확인자로 이동합니다.

  • DNS 확인자 = [x]
  • 수신 포트: 53
  • 네트워크 인터페이스 = 의도한 인터페이스 강조
  • 나가는 네트워크 인터페이스 = DNS 확인이 수행되어야 하는 인터페이스를 강조 표시합니다.
  • 시스템 도메인 로컬 영역 유형 = 투명
  • DNSSEC = 선택하는 것이 바람직하지만 몇 가지 문제가 있어 선택하지 않은 상태로 둡니다.
  • DNS 쿼리 전달 = [x]
  • DHCP 등록 = [x]
  • 고정 DHCP = [x]

이제 ‘wpad’에 대한 wpad 호스트 재정의를 만듭니다.

  • 호스트 재정의 옆에 있는 +를 클릭합니다.
  • 호스트 = wpad
  • Domain = pfSense 일반 설정에서 설정한 도메인 이름 local.lan은 내 것입니다.
  • IP = 귀하의 LAN IP
  • 설명 = WPAD 또는 설명적인 것
  • 구하다
호스트 수정

WPAD 호스트 재정의가 작동하는지 테스트하십시오 nslookup. 그러면 호스트 재정의 IP 주소가 다시 보고되어야 합니다. (192.168.20.1은 내 DNS 서버입니다)

$ nslookup wpad.local.lan
Server:   192.168.20.1
Address:  192.168.20.1#53

Name: wpad.local.lan
Address: 192.168.1.1

또한 브라우저 내에서 wpad.dat 파일(및 다른 두 파일)을 다운로드할 수 있는지 테스트할 가치가 있습니다. 브라우저를 열고 로 이동합니다 http://wpad.local.lan/wpad.dat. 원하는 curl경우 사용할 수도 있습니다 . 여기에서 curl이 내 wpad.da 파일을 올바르게 반환합니다.

$ curl wpad.local.lan/wpad.da
function FindProxyForURL(url,host)
{
  // If the requested website is hosted within the internal networks, send direct.
  if (isPlainHostName(host) ||
    shExpMatch(host, "*.local.lan") ||
    isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0") ||
    isInNet(dnsResolve(host), "172.16.0.0",  "255.240.0.0") ||
    isInNet(dnsResolve(host), "192.168.0.0",  "255.255.0.0") ||
    isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))
    return "DIRECT";

  //Default rule: all other traffic use below proxy
  return "PROXY 192.168.1.1:3128";
}

DHCP 구성

DHCP 서버의 ‘추가 BOOTP/DHCP 섹션’에 다음 세 가지 옵션을 추가합니다.

wpad.dat 파일의 경우

number: 252
type: string
value: "http://wpad.local.lan/wpad.dat"

wpad.da 파일의 경우

number: 252
type: string
value: "http://wpad.local.lan/wpad.da"

마지막으로 proxy.pac 파일의 경우

number: 252
type: string
value: "http://wpad.local.lan/proxy.pac"
DHCP 서버

확인

이 단계에서 Wireshark를 실행하여 모든 것이 예상대로 작동하는지 확인했습니다. 다음은 화면 캡처를 보여주는 것입니다.

핵심 정보를 강조 표시한 곳에서 위에서 아래로 볼 수 있습니다.

  • wpad.local.lan의 DNS 조회
  • GET 요청 wpad.dat 파일
  • wpad.dat 파일에 대한 HTTP 다운로드 reorting “200 OK”
  • 라인 기반 텍스트 데이터(‘application/x-ns-proxy-autoconfig’)
  • wpad.dat의 내용
Wireshark 확인

클라이언트 및 브라우저 구성

브라우저에서 문제 없이 WPAD 구성 파일을 다운로드할 수 있다고 가정하면 이 부분은 쉬울 것입니다. 내 Macbook 및 Firefox에 대한 구성의 몇 가지 예를 제공할 것이지만 다른 클라이언트는 충분히 유사해야 합니다.

맥 네트워크 설정

맥 설정

파이어폭스 설정

Firefox에 시스템 설정도 사용하도록 지시하는 것이 가능하지만 이것은 대안입니다.

파이어폭스 설정

윈도우 / 인터넷 익스플로러

인터넷 익스플로러

아이폰 & 아이패드

자동 검색은 iOS에서도 작동합니다. 설정으로 이동하여 네트워크 연결 옆에 있는 정보 기호를 클릭하고 아래로 스크롤하여 ‘자동’을 선택합니다. 세부 정보를 입력하지 말고 그냥 비워 두십시오.

아이폰 프록시
아이패드 프록시

방화벽

서버에서 wpad 파일을 전달할 수 있도록 포트 80 트래픽을 허용하는 방화벽 규칙이 있는지 확인하십시오.

가능한 다음 단계

포트 80에서 서핑 차단

WPAD 리디렉션이 작동하고 모든 트래픽이 포트 3128을 통해 흐르면 방화벽 규칙을 만들어 일반적인 HTTP 포트 80을 통한 탐색을 방지하여 모든 탐색이 프록시를 통해서만 수행되도록 할 수 있습니다.

NAT 백업

설정에서 ‘자동 구성’으로 구성되지 않은 PC를 잡기 위해 포트 80에 대한 트래픽을 3128로 다시 전달하는 포트 전달을 구현할 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다