사람들은 대부분 방화벽(firewall)이라는 용어를 들으면 OSI 참조 모델의 네트워크 계층과 전송 계층에서 네트워크 트래픽을 검사하면서 통과나 필터링을 결정하는 제품을 떠올린다. 제품 측면에서 보면 방화벽에는 십여 개의 유형이 있다. 방화벽의 유형은 검사하는 데이터(예를 들어 네트워크 트래픽, 호스트 프로세스, 시스템 호출)와 이러한 데이터를 검사하는 깊이에 따라 구별된다. 통신을 검사하고 통과시킬지 필터링할지 결정하는 거의 모든 장치가 방화벽 제품이다.
프록시 방화벽의 발명가이자 최초의 상용 방화벽 제품의 구현자인 마커스 래넘(Marcus Ranum)은 1990년대 중반에 방화벽이라는 용어를 다음과 같이 정의했다. "방화벽은 인터넷 보안 정책의 구현이다."1이 정의는 제품 중립적이고 특정 시간에 한정되지 않으며 현실적이기 때문에 매우 훌륭하다. 이 정의는 지금 읽고 있는 이 책뿐만 아니라 윌리엄 체스윅과 스티븐 벨로빈이 최초의 방화벽 관련 서적인 『방화벽과 인터넷 보안(Addison-Wesley Professional, 1994)』에도 똑같이 적용된다.
래넘의 정의에 따르면 방화벽은 정책 강제 시스템(policy enforcement system)으로 생각할 수도 있다. 네트워크 트래픽을 검사한 후 이를 통과시키거나 필터링하는 장치를 네트워크 정책 강제 시스템이라고 하며 호스트-중심 활동을 검사한 후 이를 통과시키거나 필터링하는 장치를 호스트 정책 강제 시스템이라고 한다. 어떤 경우든 정책 강제를 중점적으로 생각해보면 방화벽의 역할이 단순히 "나쁜 것을 막는" 장치가 아니라 정책을 구현하는 장치라는 것을 알 수 있다.
"나쁜 것"과 관련해서 방화벽이 오늘날의 기업에도 여전히 중요한지 의문을 가질 수 있다. 적절히 설정한 전통적인 네트워크 방화벽 제품은 기본적으로 허용된 인터넷 프로토콜, IP 주소, TCP/UDP 포트, ICMP 유형과 코드를 제외한 모든 것을 차단한다. 요즘의 공격 환경에서 이런 종류의 방어로는 불충분하다. 이러한 공격 채널을 제한하는 것은 목표로의 입구와 출구 경로를 제한하기 위해 필요하지만 네트워크와 전송 계층 필터링은 최소한 지난 10년간 전혀 충분치 못한 대책이었다.
2007년 현재 클라이언트에 침투하는 가장 효과적인 방법은 사용자가 악의적인 실행 파일을 활성화하게 유도하거나 사용자에게 악의적인 콘텐트를 호스팅하는 링크를 전송하는 것, 또는 사용자 컴퓨팅 경험의 다른 클라이언트 측 컴포넌트를 공격하는 것이다. 많은 경우 공격은 패치(patch)할 수 있는 취약점이나 강화할 수 있는 설정에 의존하지 않는다. 대신 공격자는 오늘날 웹을 탐색하는 데 점점 더 필요해지고 있는 자바스크립트나 플래시 같은 리치미디어(rich-media) 플랫폼의 약점을 공격한다.
2007년 현재 서버에 침투하는 가장 효과적인 방법은 운영체제를 피해 애플리케이션을 공격하는 것이다. 웹 애플리케이션이 서버 분야를 지배하고 있으며, 웹 애플리케이션의 문제점은 패치할 수 있는 취약점보다 구조적 결함이나 설계 결함에 있다. 1990년대 후반에는 안전하지 않은 웹 애플리케이션임을 보이기 위해 장바구니 항목의 가격을 변경하는 것이 유행이었다. Ajax의 덕분에 거의 10년 후인 지금 장바구니는 클라이언트에서 동작하고 있으며 사용자들은 또 다시 가격을 변경하고 있다(이는 더욱 안 좋은 것이다).
앞서 설명한 모든 것으로 인해 방화벽 제품의 미래가 어두워진 듯 보인다. 많은 방화벽이 상세한 패킷 검사를 포함하거나 OSI 참조 모델의 애플리케이션 계층이나 그보다 상위 계층에서 동작함으로써 변화에 적응해왔다. 다른 방화벽들은 필수품화된 것처럼 보이는 시장에서 자신을 차별화하기 위해 영리한 마케팅 용어를 사용하면서 침입방지시스템(intrusionpreventionsystem)으로서 동작한다. 클라이언트 측 공격과 웹 애플리케이션 공격의 시대에 방화벽, 특히 공개 소스 제품이 설 자리가 있는가?
답은 "있다"다. 그리고 여러분은 지금 이에 대한 한 접근 방법을 읽고 있다. 마이클 래쉬는 방어 목적의 네트워크 기술을 창의적으로 이용하는 데 있어 개척자다. 특정 라스베가스 해커 컨벤션의 발제자 목록을 보면 알 수 있듯이 보안 연구와 개발 분야에서는 점점 더 공격 도구와 기술이 지배적이다. 마이클은 이러한 경향을 거슬러 공격으로부터 정보 자산을 보호하는 방법을 지속적으로 개발하고 발전시키고 있다. 공격을 위한 컨퍼런스에서 새로운 공격법이나 취약점을 본 후 대부분의 사람은 자신의 기업을 보호하기 위한 일상적인 업무에 복귀한다. 이 책을 통해 이러한 업무를 좀 더 쉽게 할 수 있는 추가적인 프로그램과 방법들을 알 수 있다.
이 책의 초안을 읽는 동안 나는 몇 가지 주제를 찾아낼 수 있었다. 첫째, 장치들이 자립적이 되고 인터넷에 노출됨에 따라 호스트-중심 방어가 점점 더 중요해지고 있다. 이러한 변화의 극단적인 예로 IPv6가 있다. IPv6가 원래 의도된 모습 그대로 보급되면 본래 인터넷의 "단대단(end-to-end)" 특성이 부활하게 된다. 물론 단대단은 공격자-대-희생자로도 생각할 수 있기 때문에 호스트가 자신을 스스로 보호할 수 있는 추가적인 방법이 중요해진다. 리눅스 방화벽을 통해 호스트가 호스트 기반 방화벽과 도구를 사용해서 어떻게 스스로를 보호하는지 알게 될 것이다.
둘째, 점차적으로 호스트가 스스로를 방어해야 한다는 사실에도 불구하고 호스트-중심 방법만으로는 충분하지 않다. 호스트는 일단 침투되면 더 이상 자기 자신을 보호할 수 없다. 침입자는 보통 시스템에 침투하자마자 호스트 방화벽, 안티바이러스 소프트웨어, 기타 보호 에이전트를 비활성화한다. 그러므로 여전히 네트워크-중심 필터링 장치가 필요하다. 희생자가 제어하는 종단(endpoint)은 네트워크 방화벽이 허용하는 통신 채널만을 사용할 수 있으며, 이는 최소한 침입자가 이용할 수 있는 작전을 제한한다. 리눅스 방화벽을 통해 네트워크 장치가 어떻게 호스트를 보호하는지도 알 수 있다.
셋째, 정보 자산을 방어하는 창의적인 방법을 보고 공격 분야를 이해해야 한다. 주의를 요하는 서비스에 대한 접근을 제한하고자 한다면 단일 패킷 권한 부여(Single Packet Authorization)가 포트 노킹(port knocking)보다 훨씬 발전된 방법이다. 시각화(visualization)는 로그와 트래픽을 보기 좋게 렌더링하며, 분석가는 이를 통해 관심 있는 미묘한 이벤트를 탐지할 수 있다. 이 책을 읽고 나면 방어 인프라스트럭처를 강화할 수 있는 추가적인 방법(저자를 포함해 다른 이들이 생각하지 못한 방법)을 발견할 수도 있다.
책의 검토자겸 저자의 입장에서 이 서문을 마치고자 한다. 2000년에서 2007년 중반 사이에 필자는 거의 250권에 달하는 기술 서적을 읽고 검토했다. 또 몇 권의 책도 집필했기 때문에 필자는 어떤 책이 훌륭한 책인지 식별하는 눈을 가졌다고 자부한다. 리눅스 방화벽은 훌륭한 책이다. 필자는 FreeBSD 사용자지만 라눅스 방화벽을 보면서 일부 경우에 대해 리눅스 사용을 고려하기도 했다! 마이크의 책은 매우 명확하며 구성이 우수하고 간결하며 바로 활용할 수 있다. 이 책의 예를 따라 해봄으로써 이 책에 나온 모든 것을 구현할 수 있다. 또 여러 도구에 익숙해지고 여러 기술을 활용하는 법을 배우는 것뿐만 아니라 방어에 대한 저자의 예리한 통찰력도 감상할 수 있다.
대다수의 전 세계 디지털 보안 전문가들은 공격은 공격자, 경찰, 군대에 남겨둔 채 방어에 집중하고 있다. 필자는 실질적인 방어 도구와 기술을 최소한의 비용과 노력으로 터득하고 도입할 수 있게 해주는 리눅스 방화벽과 같은 책을 환영한다. 행운을 빈다.
Richard Bejtlich (제네럴 일렉트릭 사의 사고 대응팀장)