새소식

정보보안/인프라

유해차단 시스템 구축 및 pfSense 버전 업데이트

  • -

지금까지 진행한 것은 다음과 같다.

1. VMware 위에 가상화 OS ESXi를 설치
2. vSphere Client(ESXi를 관리하는 인터페이스)에 pfSense 설치
3. vSphere Client(ESXi를 관리하는 인터페이스)에 pfSense 관리자 페이지 접속용 VM(윈도우7) 설치
4. vSphere 접속용 WAN과 일반적으로 사용할 WAN, LAN을 구성
5. 역할별, 서비스별로 VLAN을 나눔 (망 분리)

6. ACL 룰을 만들어 서로 다른 VLAN 간의 접속을 차단

7. 오피스 영역에서 아래와 같은 ACL 룰 생성

- 라이브 서버 대역의 서비스 포트(http/https)의 접근을 허용

- 직원들만 접속할 수 있는 사내망에 접근해야 하므로 역시 서비스 포트(http/https) 접근이 가능해야 한다.

- 사무실에서는 서비스 서버 관리를 해야 하므로 서비스 대역에 있는 라이브 서버의 SSH 접속을 허용

- 사무실에서는 내부 서버 관리를 해야 하므로 인트라넷 대역에 있는 내부 서버들의 SSH 접속을 허용


이제 유해차단 시스템 구축을 위해 pfSense에 포함되어 있는 스퀴드 프락시 설치를 진행할 것이다.

 


1. 프락시 서버를 쓰는 목적

프락시 서버의 주된 용도는 웹 캐싱이다. 반복된 요청을 캐싱함으로써 웹의 속도를 향상하고 대역폭을 줄인다. 웹 접속 자체가 프락시 서버를 거치게 되므로 프락시 서버 입장에서는 모든 접속 요청 URL을 알 수 있다. 따라서 보안 정책상 허용되지 않는 URL에 접속하지 못하게 하거나 해킹 위험이 있는 URL을 필터링하는 목적으로 쓸 수도 있다.

 

아래 3가지 이유로 프락시 서버를 사용한다.

1) 악성 사이트에 접근을 차단하는 유해 사이트 차단 기능

2) 서버가 인터넷에 함부로 접근할 수 없도록 차단해 주는 감염 예방과 보안 정책 유지

3) 침해 대응 시 시야 확보에 대한 문제점 해소

 


2. 프락시 서버 설치

해당 프로젝트에서는 pfSense에 있는 패키지를 이용해 오픈소스인 스퀴드 프락시(Squid Proxy)와 URL 관리 역할을 하는 스퀴드 가드(Squid Guard)를 설치한다.

 

프락시 서버 설치하기 전에 원래 설치했던 2.2.4 버전에서는 더 이상 패키지 설치 지원을 안 해서 버전을 업데이트하게 되었다. 

 

 

버전 업데이트

pfSense 메인 화면을 보면 version 탭이 있다. 거기에 [Version 2.X.X is available]을 클릭하면 업데이트를 할 수 있다.

 

 

 

2.3.5 버전

2.3.5 버전으로 성공적으로 업데이트를 마쳤으므로 이제 다시 스퀴드 프락시 설치를 진행하려고 했으나...

 

 

오류

위의 오류도 발생하고 이 외에도 다양한 문제들이 발생해서 결국 더 높은 버전(2.4.4)으로 업그레이드했다.

실습을 위해 pfSense를 설치할 분들은 필자처럼 낮은 버전 설치해서 고생하지 말고 처음부터 높은 버전을 깔자!

 

 

 

squid 설치

[System] - [Pacakge Manager]를 선택하고 [Available Packages]를 클릭한다. 그 후 squid를 검색하여 squid와 squidGuard를 설치한다.

 

 

squid 설치

[install]을 클릭하여 squid, squidGuard를 설치한다.

 

설치 완료

설치 여부는 [Installed Packages]에서 확인할 수 있다.

 


3. 프락시 설정

Local Cache 설정

설치가 완료되면 [Services] 메뉴에 squid와 관련된 메뉴가 생성되어있다. [Squid Proxy Server] 메뉴를 선택하여 [Local Cache]를 클릭한 후 [Hard Disk Cache Size]를 2000으로 변경한다.

 

 

허용 포트 설정

[ACLs] 탭을 선택하고 [ACL SafePorts]와 [ACL SSLPorts]를 설정한다. ACL SafePorts는 http 트래픽이면서 80번 포트가 아닌 것을 사용하는 경우를 의미한다. 즉, 포트를 여기서 허용 포트로 지정하지 않으면 해당 포트로는 아예 http 통신을 할 수 없게 된다. 이 같은 케이스의 포트는 8000/8080이 있다. 후에 오피스 영역에서 사용하는 http 프로토콜이면서 80번 포트가 아닌 것은 이곳에 추가해야 한다. [ACL SSLPorts]도 마찬가지로 https이면서 443번이 아닌 포트를 사용하는 경우에 이곳에 추가해야 한다. 그렇지 않으면 해당 케이스는 웹 접속이 안된다.

 

 

General 탭

General 탭을 선택한 후 [Enable Squid Proxy]를 체크하고 [Proxy Interfaces(s)]를 눌러 LAN, VLAN10, 20, 30, 40을 선택한다. (WAN은 선택 X)

 

 

Transparent Proxy Settings

[Transparent HTTP Proxy]를 체크하고 [Transparent Proxy Interface(s)]를 눌러 VLAN 10, 20, 30, 40을 선택한다.

(LAN, WAN 선택 X)

 

 

Access Logging

[Enable Access Logging]을 선택하여 access log가 남도록 한다.

 

 

블랙리스트 설정

[ACLs] 탭의 [Blacklist]에 window31.com을 넣고 http://window31.com에 에 접속한다.   

 

 

URL 차단

스퀴드 프락시 정책으로 인해 차단되었다는 메시지를 볼 수 있다.

 

 


4. 스퀴드 가드 적용 (유해차단시스템)

스퀴드 프락시에 스퀴드 가드를 붙이게 되면 리눅스 리포지토리 정책 관리, 악성코드, 웹하드 , 도박, 성인 사이트 차단 등이 가능하다. 

 

스퀴드 가드 사이트

스퀴드 가드 사용을 위해서는 URL에 대한 DB 파일이 필요하다. 악성, 웹하드, 성인사이트 URL은 없어지거나 새로 만들어지는 사이트가 많기 때문에 주기적으로 업데이트해야 한다. www.squidguard.org/blacklists.html에 접속하면 스퀴드 가드에서 사용할 수 있는 블랙리스트 DB를 정기적으로 내려받을 수 있다. 

 

 

shalla's blacklist

본 프로젝트에서는 Shalla's Blacklist를 선택했다. 사이트에 접속해서 Download에 우클릭을 하여 링크 주소 복사를 누른다.

 

 

Squid Guard Proxy Filter

[Service] - [Squid Guard Proxy Filter]를 선택하고 [General] 탭을 누른다. [Enable log], [Enable log rotation] 및 [Blacklist]를 체크하고 앞에서 복사한 URL을 [Blacklist URL]에 입력한다.

 

 

black list

[Blacklist] 탭을 들어가서 [Download] 버튼을 누른다. 

 

 

Groups ACL

다운로드가 완료되면 [Group ACL] 탭을 눌러서 직원용 ACL룰과 서버용 ACL룰 2가지를 만들 것이다.

 

 

옵션 설정

Add 버튼을 눌러 먼저 직원용 ACL룰을 만든다. 이름은 desktop_access로 Client는 10.20.1.0/24를 입력한다. (VLAN 20)

 

 

사이트 분류

[Target Rule List]를 보면 많은 타깃 카테고리가 있는데 access 옆 선택창을 통해서 접근을 허용할지 말지 정하면 된다.

 

 

구분 설명 정책
blk_BL_gamble 도박 사이트 deny
blk_BL_porn 성인 사이트 deny
blk_BL_remotecontrol
원격제어 사이트 deny
blk_BL_sex_education 성교육 사이트 deny
blk_BL_spyware 스파이웨어 관련 사이트 deny
나머지 - allow

접근을 금지하는 카테고리는 위 표와 같다. [Do not allow IP-addresses in URL]을 체크하면 도메인이 아닌 IP 주소로 접속하는 것을 차단할 수 있다. 그러나 pfSense 관리자 페이지에 접속할 때 IP(10.20.1.1)를 이용하기 때문에 pfSense 관리자 페이지까지 접속 차단당하기 때문에 체크하지 않는다.

 

 

Target categories

이제 서버용 ACL을 만들 것이다. PC용 ACL은 대부분의 사이트를 열고 특정 사이트만 블랙리스트로 차단했다면 서버용 ACL은 리눅스 리포지토리 같은 사이트 외에는 인터넷 접속이 필요 없으므로 대부분의 접속을 모두 차단하고 필요한 사이트만 여는 화이트리스트 형태로 설정한다. 앞에서 내려받은 룰에는 리눅스 리포지토리 리스트가 카테고리에 없기 때문에 [Target categories]에 [Add] 버튼을 이용해 새로운 카테고리를 만든다.

 

 

재시작

카테고리를 추가하고 저장한 뒤 스퀴드 가드 재시작을 위해 [General settings]에 가서 [Enable]을 체크 해제하고 Apply 버튼을 클릭한 뒤 다시 체크해 재시작한다.

 

 

옵션 설정

Add 버튼을 눌러 먼저 서버용 ACL룰을 만든다. 이름은 server_access로 Client는 10.10.1.0/24, 10.30.1.0/24, 10.40.1.0/24를 입력한다. (VLAN 10,30,40)

 

 

사이트 분류

LinuxRepository를 allow로 변경하고 Default access를 deny로 바꾼다. 이렇게 하면 리눅스 리포지토리 외의 사이트는 모두 차단된다. 또한 [Do not allow IP-Addresses in URL]의 체크박스도 체크한다.

 

 

apt-get update
wget naver.com

서버에서 wget naver.com를 입력하면 접속이 차단되며 apt-get update를 입력하면 우분투 리포지토리(ubuntu.com, security.ubuntu.com, kr.archive.ubuntu.com) 등은 접속이 잘된다.

 

 

접속 차단

스퀴드 가드를 실행하고 룰에 있는 악성 사이트에 접속하려고 하면 위 그림처럼 접속이 차단된다.

 

 

Apply

마지막으로 꼭 알아야하는 사항은 스퀴드 가드 설정을 마친후 [General Options]에 Apply 버튼을 눌러야 모든 설정이 적용된다는 점이다. (이거 때문에 1시간 정도 삽질했다..)

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.