[인프라 네트워크 구성] - 3. 방화벽(pfSense) 및 DMZ 설정

1. 방화벽 기초 이론

1-1) 방화벽 개념

네트워크에서 방화벽은 신뢰하지 않는 외부 네트워크와 신뢰하는 내부 네트워크 사이를 지나는 패킷을 미리 정해놓은 규칙에 따라 차단하거나 보내주는 기능을 하는 하드웨어나 소프트웨어

 

1-2) 방화벽 기능

  1. 접근 제어(Access Control)
    • 통과시킬 접근과 그렇지 않은 접근을 결정하여 허용과 차단을 함
    • 접근 제어 방식은 구현 방법에 따라 패킷 필터링 방식프록시 방식으로 나뉨
      • 패킷필터링: 라우터같이 패킷(3계층)을 확인하고 필터링
      • 프로시방식: L7까지 읽을 수 있어서 장점이있지만, 속도가 느리다
  2. 로깅(Logging)과 감사 추적(Auditing)
    • 허용 또는 거부된 접근에 대한 기록을 유지
  3. 인증
    • 메시지 인증, 사용자 인증, 클라이언트 인증을 할 수 있음
  4. 데이터 암호화
    • 방화벽이 VPN 기능을 같이하는것임
    • 자택근무자는 방화벽에서 터널을 뚫어줌 
    • 방화벽에서 다른 방화벽까지 전송되는 데이터를 암호화해서 보내는 것으로 보통 VPN의 기능을 이용

 

1-3) Untangle

  • Debian 9를 기반의 방화벽, 하드웨어에 설치한다
  • GUI를 제공해서 손쉬운 모니터링

장점

  • 쉽게 설치 가증함
  • Blocker, VPN등의 앱을 쉽게 설지하고 적용 가능함
  • 사용자 친화적인 UI로 방화벽 설정, 모니터링에 용이

단점

  • 방화벽 이외의 대부분의 App은 유료
  • 방화벽의 기능이 상대적으로 약함

 

1-4) pfSense - 우리가 설치함

  • freeBSD 기반의 오픈소스 방화벽, 하드웨어에 설치함
  • WebUI 로 손쉬운 모니터링
  • IPsec, 라우팅, 방화벽 기능을 기본적으로 제공하며, nmap, snort, bind등의 패키지를 추가로 설치 가능함

장점

  • 다양한 패키지 설치 가능, 무료로 가능
  • Advanced Options로 방화벽 rule을 구체적, 세분화된 설정이 가능하여 강력한 방화벽 기능을 제공한다
  • 추가 패키지를 설치하지 않더라도 다양한 기능을 기본적으로 제공한다

단점

  • 방화벽 Rule 설정이 어렵다
  • UI가 사용자 친화적이지 않고, 초기설정은 command로 해야하는 불편함 존재

 

1-5) Untangle vs pfSense

기능 Untangle pfSense
IP Source/Destination Address O O
TCP/UDP Source/Destination Address O O
MAC Source/Destination Address X O
Inbound/Outbound 방화벽 규칙 O O
Port Forwarding O O
IPv6 지원 X O
방화벽 중앙 관리 기능 O(Command Center) X

 

 

 

2. pfSense를 활용한 방화벽 설치

🎯 목표

 

 

2-1) VMWare 생성

 

 

 

 

5개의 NIC가 필요하다

 

 

 

2-2) pfSense 설치

 

 

 

 

 

 

 

 

 

 

2-3) NIC 수정하기

 

 

 

🚨 MAC 주소에 맞춰서 수정해주기!!

 

 

2-4) WAN, LAN 설정

 

WAN 구간 설정 = vmx0

 

LAN 구간 설정 = vmx3

 

나머지는 순차적으로 쓰기 vmx1, vmx2, vmx4

 

 

2-5) NIC에 IP 할당하기

 

 

WAN에 IP 설정하기 > dhcp 설정 x, static ip

 

IPv6, webConfigurator 할거냐? > n

 

 

✅ WAN IP 설정 완료 확인

 

 

LAN에 IP 설정하기

 

 

 

  LAN IP 설정 확인

 

 

2-6) linux-mint로 pfSense 접속하기

 

linux-mint의 네트워크 대역을 soc-net으로 변경한다

 

IP 강제로 수정하기

sudo xed /etc/netplan/1-network-manager-all.yaml

 

IP 적용하기

sudo netplan apply

 

 

ping 테스트

 

pfSense에 접속하기

 

ip: admin

password: pfsense

 

 

 

2-8) 웹에서 pfSense 설정하기

 

 

pfSense 외부 통신 확인

🚨vyos vm을 키고 확인해야함!

 

쉘로 이동

 

 

✅ 외부 통신 가능!

 

 

2-9) 나머지 NIC 설정

 

결과 확인 > Dashboard

 

 

3. DMZ 구간에 웹 서비스 구축

3-1) DMZ의 이해

DMZ(Demilitarized Zone): 인터넷 망과 내부 망의 중간 지점

개인정보 암호화

  • 개인정보처리자는 인터넷 구간 및 인터넷 구간과 내부망의 중간 지점에 고유식별정보를 저장하는 경우에는 이를 암호화 해야한다

 

출처: https://m.blog.naver.com/innoviss/222246852119

 

 

 

3-2) beebox와 bWAPP 소개

beebox는 환경을 구축하는데 시간을 절약할 수 있음

 

https://sourceforge.net/projects/bwapp/files/bee-box/

 

bWAPP - Browse /bee-box at SourceForge.net

Easy-to-Use Website Accessibility Widget An accessibility solution for quick website accessibility improvement.

sourceforge.net

 

beebox 설치하기

 

3-3) beebox 설치하기

3-3-1) VMware Workstation에서 OVF 로 추출하기

1. 압축을 푼 후 VMWare Workstation에서 실행하기

 

2. File > Export to OVF ...

 

 

3. 새로운 폴더(beebox)만든 후에 내부에 저장하기

 

 

3-3-2) EXSi에 OVF로 VM 생성하기

1. OVF로 생성하기

 

 

2. 저장한 파일 첨부하기

 

3. dmz-net에 생성

 

4. 완료 누르고 생성하기 > 새로고침 X

 

 

3-4) beebox 설정하기

1. 루트 권한으로

 

2. IP 설정하기

 

3. 적용이 잘 안되서 reboot 하기

reboot

 

4. IP 설정 확인하기

 

 

5. 외부 통신 확인

🚨 외부 통신이 안된다 > 방화벽이 막고있다

 

3-5) Static Route 설정하기 - VyOS

  • 방화벽 너머에 있는 대역대에서는 공인 IP를 대상으로 패킷을 보내면 돌아오지 못하는 현상이 일어난다
  • 이는 라우터가 방화벽 너머에 무슨 IP가 있는지 알지 못하기 때문에 발생
  • 패킷이 밖으로 나갈 때는 디폴트 게이트웨이를 통해 외부로 나가지만, 내부로 들어오면 어느쪽으로 보내야하는지 모르는 현상이 발생함

 

Static Route 설정하기

set protocols static route 10.0.0.0/24 next-hop 10.0.0.1
set protocols static route 10.0.10.0/24 next-hop 10.0.0.1
set protocols static route 10.0.100.0/24 next-hop 10.0.0.1
set protocols static route 10.0.150.0/24 next-hop 10.0.0.1
set protocols static route 10.0.200.0/24 next-hop 10.0.0.1
commit
save

 

 

 

3-6) 방화벽 통신 되는 것

 

 

linux-mint > vyos(10.0.0.1)

 

linux-mint > bee-box(10.0.10.100)

✅ 되는 이유?

linux-mint에서 sfSense(10.0.100.1) 접속해서 확인한다

1. pfSense 설정을 확인해보자 

Firewall > Rules

 

2. soc-net의 rule을 확인하면, 모두 허용하는 룰이 있다

 

 

 

3-6) 방화벽 통신 안되는 것

방화벽이 막고있다

 

vyos > bee-box

🚨 안되는 이유?

dev-net에 대한 rule이 존재하지 않아서 > 모두 차단중이다

 

 

 

4) pfSense Rule 설정하기 - 포트포워딩 방식

 

4-1) WAN > DMZNET

모든 요청이 WAN의 80번 포트로 들어오면 > 10.0.10.100서버의 80번 포트로 보내겠다

 

✅ Firewall > Rules > WAN에 자동으로 설정이된다

 

KaliLinux에서 10.0.0.254로 curl을 해보자

🚨 근데 안된다 > 왜그럴까?

룰의 우선순위가 잘못되어서

 

80번 포트로 들어오려고하면 그 앞에 있는 룰들에 의해 막히게 된다

그러므로 이 위에 룰들을 빼버려야한다

 

⚙️(Actions)를 눌러서 Reserved Networks를 모두 해제한다

 

이 룰만 남아있다면 OK

 

다시 KaliLinux에 가서 curl을 해보자 > 잘 접속이 되는 걸 확인할 수 있다

 

80번 통신 이외에 모든 통신을 거절하는 Rule을 추가하자

Firewall > Rule > WAN > Add

 

여전히 KaliLinux에서 80번 프트로 bee-box를 접속 가능하다

 

 

4-2) 나머지 모든 대역에 Default Deny 설정

 

 

4-3) DMZ

DMZ 내부의 웹서비스가 API를 호출할 때는 외부로 통신이 가능해야함

 

 

4-4) DEVNET 설정

bee-box(10.0.10.100)만 접속 가능하도록 22, 80포트만 열어준다 

더 타이트하게 하고싶다면 Source 를 DEVNET으로 변경한다

 

 

pfSense 에서 포트포워딩 설정

 

설정 확인

 

 

 

5. soc-net의 linux-mint를 dev-net으로 복제하기

현재 사용한 soc-net의 linux-mint(10.0.100.2)는 pfSense에 접속하는데 사용한 서버이다.
dev-net에서 개발용 linux-mint를 만들기 위해 복제를 한다

 

5-1) linux-mint 스냅샷 생성

🚨 꼭 서버의 전원을 OFF 한 상태에서 진행한다

 

 

5-2) 스토리지 복제하기

1. 폴더 생성하기

 

2. linux-mint가 들어있는 .vmx 파일을 복사하기

 

3. 복사할 dev-mint 폴더 선택

복사중

복사 완료 확인

 

 

5-3) dev-net에 기존 VM 등록

 

5-4) 설정 편집

네트워크 대역 수정

이름 수정

기존의 linux-mint도 soc-mint로 수정한다

 

부팅할때 내부에서 출돌이 나지 않도록 하기 위해 복사함으로 설정한다

 

 

5-5) dev-mint의 네트워크 설정

 

5-6) 통신 테스트

❌ 외부 통신 > 방화벽이 막고있음

✅ 10.0.10.100으로 SSH 접속

✅ 10.0.10.100으로 HTTP 접속

❌ 10.0.10.100으로 ICMP 불가능

5-7) 지금까지의 구성도

 

 

5-8) dev-mint 복제하기

나중에 복원하기 위해서 

 

나중에 사용할 수 있다

 

6. pfsense 추가 패키지 설치

6-1) Squid - 캐싱 서버

  • 인터넷 연결 성능을 향상시킬 수 있는 캐싱 프록시 서버
  • 일반적으로 액세스되는 웹 페이지, 이미지 또는 클라이언트가 인터넷에서 요청하는 기타 파일의 캐시를 만들고 직접 파일을 전달

반복되는 패킷들을 방화벽에서 캐싱으로 남겨두면, 외부에서 웹에서 요청해서 정적페이지를 가져올 필요가 없다

캐칭해두면 방화벽에서 전달해줄 수 있다

그러면 부하가 줄어들 수 있다

6-2) pfBlockerNG - 유해차단

  • IP 주소 또는 도메인 이름을 기반으로 들어오고 나가는 트래픽을 차단하기 위한 최고의 패키지
  • 이 패키지는 국가 차단, IP/DNS 블랙리스트 및 IP 평판 차단을 포함하여 원치 않는 트래픽으로부터 네트워크를 보호하기 위해 다양한 기능을 제공
  • DNS 블랙리스트 기능을 사용하면 여러 외부 블랙리스트를 추가하여 광고, 위협 및 맬웨어와 같은 트래픽을 차단

6-3) SquidGard - 유해차단

  • 고속 URL 필터 및 리디렉터 기능(Squid와 연동되어 사용됨)
  • 사용자 지정 블랙리스트를 업로드하거나 무료로 제공되는 목록 중 하나를 사용하여 네트워크의 사용자가 액세스할 수 있는 사이트를 사용자 지정

6-4) Darkstat - 성능 모니터링

  • 성능을 최적화하고 잠재적인 문제를 찾기 위해 네트워크의 트래픽 사용량을 분석
  • 이 패키지는 네트워크에서 차단하거나 우선 순위를 지정하는 트래픽을 빠르게 식별하는 방법을 제공함

 

7. Squid 사용하기

7-1) Squid, SquidGard 설치하기

설치 완료 확인

 



7-2) Squid Proxy Server 설정하기

proxy server 활성화 하기

soc-mint의 브라우저 설정으로 가서 프록시 설정하기

방화벽의 IP를 설정해준다

 

🚨 Proxy 설정으로 웹 접속 불가능 문제

google, pfsense 모두 접속이 안되는 문제 발생

 

1. squid 데몬 실행 확인 및 포트(3128) 확인 > squid 실행 안됨

 

2. pfsense 버전 업로드 필요

pfsensce cli 접속
> 8번(shell 로 접속)
> certctl rehash // pkg 서버를 신뢰하지 않는 경우에 패키지 업데이트 안되는 경우 발생
// 따라서 위 명령어를 통해 "시스템 인증서"사용할 수 있게끔 실행
> exit // 다시 옵션창 이동
> 13 // 수동 업그레이드

=> 2.7.0 -> 2.7.2로 업그레이드 완료

 

3. squid 실행 확인 완료

 

 

7-3) Squid Proxy Server - Real Time 확인하기

https://naver.com에 접속하고, 로그 확인해보자

필터링 기능을 활용해서 누가 접속했는지 확인 가능 > 10.0.100.2가 접속했구나

 

7-4) naver.com 접근 차단하기

1. ACLs에 접속한다

 

2. blacklist 설정

 

 

8. SquidGard 사용하기

8-2) SquidGard Proxy 설정하기

 

기본적으로 제공하는 blacklist가 있다