17. Firewall
개요
네트워크 보안 장비 중 가장 기초적이고 현재는 IDS, IPS, Proxy 등 여러 Plugin을 제공하는 장비인 FW에 대해 학습한다.
Firewall
침입차단시스템으로도 불리며 WAN과 LAN의 경계에 위치하여 Rule(ACL Access Control Lists) 기반으로 패킷을 차단하는 역할을 수행한다. 단순 인바운드 트래픽 뿐만 아니라 아웃바운드 트래픽도 차단이 가능하다. 이는 DoS 공격에 대한 방어가 가능하고 특정 IP에 대한 차단으로 위험한 사이트나 지역(국가)에 대한 차단이 가능하다. 그리고 방화벽 자체에 인증서를 적용하여 인증절차를 거칠 수도 있다.
이러한 방화벽은 2가지 타입으로 분류가 되는데 SW와 HW이다.
SW로 되어있는 방화벽은 주로 OS에서 확인 가능한 유형으로 Windows 환경이라면 방화벽을 검색하면 바로 찾을 수 있다. 그리고 리눅스 환경이라면 iptables를 보면 된다.
HW로 되어있는 것은 실제로 라우터처럼 미들박스 형태로 되어있으며 Cisco나 Juniper처럼 아예 장비로 되어있는 경우도 있고 OS 형태로 되어있는 PFsense나 OPNsense등이 있다.
FW Features
Stateless VS Stateful
Packet 검사에서의 상태를 말하며 memory를 소모하여 전체적인 흐름을 볼 수 있는 Stateful 방식은 패킷 분석에 있어 성능은 좋긴 한데(Flag bit, Timeout, etc) 당연히 느리고 메모리 자원을 소모한다. 단순 필터링보단 공격 패턴 분석에 더 큰 의미를 둔다. 반대로 단독으로만 패킷을 보는 Stateless방식은 단순 필터링에 더 큰 의미를 두어 전체적은 공격에 대한 분석(Flag bit, etc)은 어렵지만, 메모리 자원을 상대적으로 적게 소모하며 속도가 빠르다.
따라서 이전에 배운 Proxy를 이용한 DoS 미티게이션 등은 Stateful 방식으로만 구현이 가능하다.
Packet Analysis
DPI(Deep Packet Inspection)이라고도 하며 단순 헤더만 보는 것이 아닌 format이나 content(Payload)까지 확대하여 분석한다. 이에 현재 프로토콜 상태와 맞지 않는 패킷은 제거할 수 있다.
Authentication
트래픽을 검사하여 인증 여부를 확인한 뒤 패킷을 통과시킬 수 있다. 이는 아웃바운드, 인바운드 둘 다 적용 가능하며 아웃바운드는 권한이 있는 사용자에 대해서만 제한적으로 인터넷에 접속이 가능하게 하는 식이고 인바운드는 외부 직원들에 접근 제한 등 으로 사용이 가능하다.
Logging
단순 기록 기능이지만, 오류 원인 분석부터 침해사고대응까지 단순 인프라 관점, 보안 관점 등 다양한 관점에서 필요한 데이터이다.
NAT
Network Address Translation으로 Public IP를 Private IP로 바꿔주는 기능이다 포트포워딩이라고도 되어있는데 외부에서 내부로 접근할 때는 이 기능에 대한 설정을 해주어야 한다. NAT는 2가지 방식이 있다.
Static NAT
미리 설정한 mapping table(rule)을 기반으로 NAT를 수행하는 방식이다. 기초적인 방식이지만, 1대1 매핑 관계가 기본이기에 하나하나 설정해줘야 하고 지금 당장 사용하지 않는 IP라도 이미 매핑이 되어있으면 사용이 불가능하다는 단점이 존재한다. (물론 해당 IP를 아예 사용하지 않는 상황이라면 NAT Table을 수정하여 사용이 가능하다.)
Dynamic NAT
다수의 NAT IP를 내부 Client와 공유하는 방식으로 NAT pool을 둔 다음 해당 pool에서 현재 사용하지 않는 ip를 가져다 사용하는 방식이다. 따라서 좀 더 효율적으로 ip 사용이 가능하다. 가끔 ip가 겹치는 경우가 존재하기도 하는데 이럴 때는 NAT ID를 통해 구분이 가능하다.
이러한 NAT는 Public IP를 효율적으로 사용할 수 있게 해줄 뿐 아니라 외부로부터 내부망에 대한 정보를 제한함으로 보안 관점에서도 유리하다. 단점은 만약 IP가 변경되면 이를 수정하여 반영하는 과정이 간단하지는 않다. 그리고 변환 과정이 사이에 껴 있기에 당연히 지연이 발생한다.
Proxy
미들박스처럼 Client와 Server 사이에 있는 존재로 꼭 보안 목적이 아니라 caching, load balancing 목적으로도 사용이 가능하다. 이는 7계층에서 동작하며 이를 이용하여 방화벽에서 7계층 로그를 뽑아낼 수도 있다. 그리고 이를 통해 7계층 패킷을 분석하여 Payload를 통해 필터링이 가능하다. 그리고 직접 연결을 방지하기 때문에 이를 병목 지점으로 하여 공격 표면을 줄일 수 있다.
FW Architectures
Personal FW
이전에 말한 SW방식으로 Host Client에 설치되어 작동하는 방식이다. Windows는 일단 차단을 한 뒤 경고창을 띄워 허용할지 말지를 물어보는 방식이다. 따라서 Backdoor나 spyware에 대한 방어가 가능하고 가볍게 운용이 가능하다는 장점이 있다.
NAT + Filtering
위와 같은 구조로 Router 위치에 FW가 있다고 생각하면 된다. 위에서 외부 서비스에 대해서는 Static NAT를 이용하여 외부로 공개하고 내부 사용자(Client)에 대해서는 Dynamic NAT를 이용하는 방식이다. 그리고 이에 대해 아웃바운드, 인바운드에 Filtering 규칙을 적용한다. 단점으로는 외부 서비스 서버에 대해서는 Static이기 때문에 상대적으로 위험할 수는 있다.
DMZ
위와 같은 구조로 내부망과 서비스 중인 서버망을 완전히 분리한 방식이다. 따라서 좀 더 안전한 구조이고, 각 망에 대해 별도로 설정(NAT, Proxy, Filtering)이 가능하기 때문에 관리 관점에서도 더욱 편하다. 단점으로는 FW가 망분리부터 routing까지 전부 다 하기 때문에 FW 자체가 공격당하면 전체 망이 마비될 수 있다.(SPOF) 따라서 이를 보완한 방식이 아래 존재한다.
Sandwiched DMZ
방화벽을 2개를 두어 각각 아웃바운드와 인바운드를 할당하고 방화벽 사이에는 운용하는 DMZ를 두어 운용한다.
방화벽 사이에 DMZ를 두는 방식이 일반적이지만, DMZ에 서비스에 대한 Proxy를 각 서버마다 하나씩 두는 방식도 존재한다.(수업에는 해당 방식에 대해서만 다루었다.) 따라서 이와 같이 했을 때는 외부망과 내부망에 대해 routing하는 FW가 2개이므로 좀 더 안전하게 관리가 가능하고 외부 FW가 공격당하더라도 내부망은 안전하게 보호가 가능하다.
이후 Rule 설정 부분은 그냥 읽어도 어려운 부분이 없기에 간단하게 설명한다.
Filtering Rules
Rule 이라고도 하고 ACL(Access Control Line)이라고도 하는데 기본적으로 Match Action 방식으로 구성이 되고 Black List 방식과 White List 방식 2개 방식이 있다. 근데 안전하게 하려면 Default Deny 즉 White List 방식으로 하는게 좋다.
Organizing Rules
순서대로 Rule이 적용되기에 그 순서를 잘 설정하는 것이 좋다. 예를 들면 외부 서비스에 대해서는 당연히 Inbound 규칙에 대해서는 pass해야 하고 내부망에서의 Host들은 인터넷을 사용해야 하니까 Outbound에 대해서도 Pass를 해주어야 한다. 따라서 가장 하위 규칙에 Inbound 규칙으로 전부 Block을 두고 상위 Rule로 특정 서비스의 NAT에 대해서 Pass 규칙을 두는 식이다.