pfSense 방화벽에서 제공하는 Squid 패키지를 이용하여 도메인, URL별 인터넷 접근 통제를 할 수 있는 환경 구성 방법을 정리합니다.
Squid Guard를 사용하기 위해서는 Squid Proxy Server가 같이 동작 되어야 합니다.
Squid Guard 패키기를 설치하면 Squid 패키지가 같이 설치가 됩니다.
Squid Proxy Server 설정은 아래 글을 참고하시면 되겠습니다.
Squid Guard 패키지 설치
Squid Guard 패키지를 검색하고 패키지를 설치합니다.
System > Package Manager를 접근합니다.

Available Packages에서 squid guard를 검색하고 squid 패키지를 설치합니다.

‘Install’을 선택합니다.

‘Confirm’을 선택 합니다.

Squid Guard 패키지 설치가 완료됩니다.
Squid Proxy Server 설정
Services > SquidGuard Proxy Filter 메뉴를 접근합니다.

Proxy filter SquidGuard: General settings
General 설정을 진행합니다.


- Enable : check
- Enable GUI log : check
- Enable log : check
- Enable log rotation : check
- ‘Apply’ 버튼을 클릭합니다.
Squid Guard Service가 활성화 됩니다.
‘Save’ 버튼을 클릭합니다.
Proxy filter SquidGuard: Target categories
Target categories 설정을 합니다.

‘Add’ 버튼을 클릭합니다.

- Name : allow_site
- Domain List : 허용할 도메인
- URL List : 허용할 URL
- Regular Expression : 허용할 URL (정규식)
- Log : check
‘Save’ 버튼을 클릭합니다.
Proxy filter SquidGuard: Common Access Control List (ACL)
Common ACL을 설정합니다.

- Target Rules List : ‘+’ 버튼을 눌러 설정을 확장합니다.
- 생성한 카테고리(allow_site)를 ‘allow’ 설정합니다.
- Log : check
‘Save’ 버튼을 클릭합니다.
설정 적용
설정에 변경이 발생하면 General Settings 메뉴에서 ‘Save’ 버튼과 ‘Apply’ 버튼을 눌러서 적용해 주어야 합니다.

추가 설정
Squid Proxy Server
Squid Guard에서 ACL 통제를 적용할 것이기 때문에 Squid Proxy Server에서는 접근하는 client를 모두 허용해 주어야 합니다.

- Allow Users on Interface : check
‘Save’ 버튼을 클릭합니다.
테스트
도메인 허용 테스트
- Domain List : jackerlab.com 허용 설정

- jackerlab.com 정상 허용

- 그 외 사이트 all 차단

URL 허용 테스트
URL 통제는 패킷 내부의 URL 정보로 통제를 하는 구조입니다.
기본 적으로 HTTPS 프토토콜은 암호화가 되어 패킷을 볼 수 없기 때문에 정상적인 동작이 되지 않습니다.
단순히 URL 허용 여부 테스트를 위하여 http 사이트 접근 시, 기능이 정상적으로 동작하는지 확인합니다.
- URL List : jackerlab.com/pfsense-squid 허용

- jackerlab.com 차단

- jackerlab.com/nextjs-layout-page 차단

- jackerlab.com/pfsense-squid URL 정상 허용

설정한 URL은 정상적으로 접근이 되지만 그 외 URL(css 등 다른 URL 참조)은 차단되어 스타일 적용이 안되는 것으로 확인됩니다.
Regular Expression 허용 테스트
Regular Expression 허용도 URL 통제를 기반으로 동작합니다.
기본 적으로 HTTPS 프토토콜은 암호화가 되어 패킷을 볼 수 없기 때문에 정상적인 동작이 되지 않습니다.
단순히 URL 허용 여부 테스트를 위하여 http 사이트 접근 시, 기능이 정상적으로 동작하는지 확인합니다.
- URL List : jackerlab.com/pfsense-squid 허용
- Regular Expression : wp-includes/*

- wp-includes/* 추가 허용

정규식으로 URL 기반의 룰을 설정할 수 있습니다.
URL List만 사용했을 때와 비교를 위하여 개발자 모드를 확인하면 아래와 같습니다.
- URL LIST 접속 상태
- jackerlab.com/pfsense-squid : 200 ok
- jackerlab.com/wp-includes/… : 503 fail
- 정규식으로 url filter 추가 설정 시, 접속 상태
- jackerlab.com/pfsense-squid : 200 ok
- jackerlab.com/wp-includes/… : 200 ok
마치며
pfSense에서 제공하는 Squid Guard 패키지를 사용하면 URL 기반의 통제 룰을 설정하고 좀 더 세부적인 통제 환경을 구현할 수 있겠습니다.
위 테스트는 단순 기능 동작 여부 테스트를 수행하였고 실제 사용 시, 추가적인 사항에 대한 검토가 필요하겠습니다.
- 카테고리 기반(외부에 정의된 block site list) 사이트 통제
- https 프로토콜에 대한 URL 통제
참고 문서
- https://docs.netgate.com/pfsense/en/latest/packages/cache-proxy/squidguard.html