강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

리눅스서버의 방화벽 설정을 위한 개요

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스서버의 방화벽 설정을 위한 개요

 

 




앞서 언급한 방화벽의 필요성에 대해서는 어느 정도 동의할 것이라 생각한다.

 

 

 

 

하지만 방화벽을 사용해 보지 않은 경우 방화벽에 대한 막연한 두려움이나 부담감 또는 잘못된 편견을 가지고 있는 것이 사실이다.

 

 

 

 

필자 역시 방화벽을 사용해 보기 전에는 이러한 편견을 가지고 있었던 것이 사실이지만 실제로 운영해 보니 그렇지 않다는 것을 알게 되었고 결국 방화벽 신봉자에 이르게 되었다.

 

 

 

 

그렇다고 해서 방화벽만 설치하면 완벽한 보안을 이룰 수 있다는 환상 역시 경계해야 할 것이다.

 

 

 

 

담을 아무리 높게 쌓아 두었다 하더라도 대문이나 창문을 활짝 열어두면 아무런 의미가 없는 만큼 정책을 어떻게 설정하느냐에 따라 그 결과가 완전히 달라질 수 있기 때문이다.

 

 

 

 

중요한 것은 지금부터 다룰 방화벽에 대해 관리자가 얼마만큼 잘 알고 실무에서 활용하는가에 따라 그 효과는 마이너스가 될 수 도 있고 99점이 될 수도 있을 것이다.

 

 

 

 

 

 

(1) 방화벽(Firewall)이란 무엇인가?

 

 

 

 

방화벽이란 용어는 많이 들어보아서 알고 있듯이 일련의 보안정책(IP 또는 포트 등 L4 정보를 기준으로 특정한 패킷을 허용할 것인가, 거부할 것인가?)을 통해 시스템이나 네트워크를 보호(접근통제)하기 위해 설치하는 일종의 보안 프로그램 또는 시스템이라 할 수 있다.

 

 

 

 

쉽게 표현하자면 누구나 집안을 들여다 볼 수 없고 아무나 집에 침입할 수 없도록 설치해 두는 담 정도로 생각할 수 있을 것이다.

 

 

 

 

방화벽에서는 미리 설정된 접근 정책에 따라 방화벽을 통과하는 패킷의 헤더를 살펴보아 해당 트래픽을 통과시켜 애초에 의도한 원래의 목적지로 통과시키거나 포워딩 해 줄 것인지 아니면 목적지에 접근할 수 없도록 거부할 것인지를 결정하게 된다.

 

 

 

 

방화벽은 기본적으로 Layer 4 정보를 기반으로 접근제어 정책을 설정하지만 최근에는 문자열이나 signatureLayer 7 정보까지 분석하여 필터링할 수 있는 기능을 제공하고 있다.

 

 

 

 

물론 여기에서 다룰 iptablesLayer 7 기반의 필터링을 지원한다.

 

 

 

 

(2) 방화벽은 반드시 필요한가?

 

 

 

그렇다면 방화벽은 반드시 필요할까? 앞에서도 누차 강조했지만 필자의 경험상 방화벽 설치만으로 최소 50% 이상의 보안을 강화할 수 있다고 말하고 싶다.

 

 

 

 

, 보안을 생각한다면 방화벽을 반드시 설치할 것을 권장한다.

 

 

 

 

물론 어떤 패킷을 허용하고 어떤 패킷을 거부할 것인지 등의 패킷 필터링 정책을 잘 세우는 것이 중요한 것임은 두말 할 나위 없지만, 제대로만 설정된다면 일일이 telnet이나 ftp와 같은 응용 프로그램에서 접근 통제를 하지 않아도 되며 또는 아예 접근 통제 기능을 제공하지 않는 각종 소켓 데몬 등의 응용 프로그램이 있을 경우에는 방화벽을 이용하여 쉽게 접근 정책을 제어할 수 있게 된다.

 

 

 

 

왜냐하면 방화벽은 응용 프로그램에 앞서 시스템의 커널 수준에서 패킷을 제어할 수 있기 때문이다.

 

 

 

 

또한 외부에서 서버나 특정 서비스를 보이지 않도록 숨김으로써 무분별한 스캔이나 어떠한 서비스를 제공하는지 등의 불필요한 정보 유출을 막을 수도 있으며 방화벽에서 제공하는 확장된 로깅(logging) 기능을 이용하여 방화벽을 통해 들어오고 나가는 트래픽에 대한 상세한 로깅 정보를 남기도록 할 수도 있다.

 

(물론 이러한 경우 다소의 부하를 유발할 수 있는 만큼 필요한 최소한의 정보만 남기도록 한다.)

 

물론 완벽한 보안은 아니지만 방화벽은 보안을 위한 필수 요소인 만큼 반드시 방화벽을 설치하여 운영할 것을 권장한다.

 

 

(3) 방화벽에 대한 잘못된 생각들

 

 

 

방화벽만 설치하면 보안은 완벽하다?

 

 

 

시스템에 대해 잘 모르는 분은 고가의 비용을 들여 방화벽만 설치하면 모든 보안이 완벽하게 해결될 것으로 착각하지만 절대 그렇지 않다.

 

 

 

 

보안은 적절한 보안 정책과 빠르고 적절한 패치 및 업그레이드 그리고 관리자의 지속적인 관심을 통해 유지되는 것이지 특정한 보안 장비만으로 유지되는 것은 결코 아니기 때문이다.

 

 

 

 

실제로 고가의 방화벽을 설치해 두었지만 정책을 제대로 설정하지 않아서 제대로 이용하지 못한 업체도 흔히 존재한다.

 

 

 

 

또한 아무리 고가의 방화벽이라 하더라도 방화벽도 일종의 하드웨어에 탑재된 소프트웨어에 불과하므로 방화벽 자체의 취약성이 있을 수 있으므로 방화벽 자체의 취약성 여부에 대해서도 관심을 가져야 한다.

 

 

 

 

또한 공격의 기법이 하루가 다르게 새롭고 다양하고 또한 전문화되어 가고 있어 단순히 방화벽만으로 모든 보안을 책임질 수는 없는 것이 사실이다.

 

 

 

 

 

 

그리고 일반적인 웹 서비스를 제공할 경우 WWW80번 포트로 향하는 모든 패킷을 통과시키므로 허용된 포트를 통한 해킹 시도 등은 차단할 수 없게 된다.

 

 

 

 

(이의 대표적인 예로는 CoderedNimda 및 최근에 유행하는 웹해킹 등이 있다.

 

 

 

 

따라서 웹해킹에 대해서는 “2. 웹 서버 보안에서 언급한대로 별도의 보안 솔루션을 이용하여야 한다.) 왜냐하면 일반적으로 방화벽에서는 패킷의 헤더만 점검할 뿐 데이터의 내용, 즉 컨텐츠는 점검할 수 없기 때문이다.

 

 

 

 

 

 

따라서 방화벽 설치만으로 보안이 끝나는 것이 아니라 더불어 방화벽 내부의 호스트에서 서비스하는 데몬이나 응용프로그램 보안도 함께 고려하여야 하는 것이다.

 

 

 

 

 

 

방화벽을 설치하면 속도가 느려진다?

 

 

 

일부에서는 방화벽 설치로 발생할 수 있는 속도저하 때문에 쉽게 방화벽 도입을 꺼리고 있는지도 모르겠다.

 

 

 

 

그러나 이전의 리눅스 커널 2.2.x 버전에서 작동한 ipchains를 확장하여 리눅스 커널 2.4.x의 개선과 함께 새롭게 소개된 iptables라는 방화벽 관리 프로그램을 이용하면 거의 속도저하 없이 어떠한 상용 프로그램에 뒤지지 않는 고성능의 방화벽을 구축할 수 있다.

 

 

 

 

만약 기존에 ipchains를 사용하고 있었다면 아래 URL에서 변환툴인 ipchains2iptables를 사용하여 iptables로 전환할 것을 권장한다.

 

 

 

 

 

 

http://www.stearns.org/i2i/ipchains2iptables

 

사실 기존 방화벽의 경우에는 시스템의 근간이 되는 OS 커널 소스에 대한 접근이 어렵기 때문에 OS 커널과는 별도의 모듈을 만들어 커널 외부에서 작동시키고 있으나 리눅스의 경우 커널 소스가 공개되어 있기 때문에 패킷 필터링 모듈을 리눅스 커널에 직접 결합시켜 더욱 빠르고 안정적인 패킷 필터링 기능을 구현할 수 있게 되었다.

 

 

 

 

참고로 방화벽의 성능은 장비의 CPU에 직접적인 영향을 받으므로 가급적 64비트 기반의 CPU를 권장한다.

 

 

 

 

 

 

???? [필자경험담]

리눅스 방화벽의 성능이 뛰어난 것은 사실이지만 그렇다고 해서 모든 서비스에 리눅스 방화벽을 사용할 수 있는 것은 아니다.

 

 

 

 

경험적으로 보았을 때 리눅스 방화벽은 웹 서비스나 메일서비스 등 일반적인 서비스에는 속도 저하 등의 문제가 전혀 없으나 게임서버나 지도 서비스 등 특화된 컨텐츠 서비스에는 다소 부적합한 것 같다.

 

 

 

 

이러한 서비스들은 공통적으로 작은 패킷들이 매우 많아 PPS(초당 통과하는 패킷의 개수) 수치가 매우 높은데, 리눅스 커널에서 이 패킷들을 제대로 처리하지 못하기 때문이다.

 

 

 

 

물론 CPU나 메모리 등 하드웨어 사양과 커널 버전 등에 따라 많이 다르겠지만 일반적으로 방화벽이 가동하는 고사양의 서버에서 초당 100,000개 정도의 패킷이 통과하면 리눅스에 패킷로스가 생기기 시작하고, 클라이언트들은 서버에 접속이 끊기는 현상이 있었다.

 

 

 

 

그러나 하드웨어 사양도 계속 좋아지고, 커널도 향상되고 있기 때문에 이러한 문제는 곧 해결될 것으로 기대한다.

 

 

 

 

 

만약 현재 시스템을 통과하는 패킷의 개수(PPS)를 알고 싶다면 iptraf를 이용하면 쉽게 알 수 있는데, iptraf 실행 후 "Detailed interface statistics"를 선택하면 아래와 같은 화면을 볼 수 있으며 아래의 경우 PPS는 약 131 정도인 것을 알 수 있다.

 

 

 

 

6ea6a5c16185de2f6af2ca44aca8b1ed_1676448621_7634.png
 

[그림] iptraf(http://iptraf.seul.org/)에서 pps 측정 방법

 

또한 iptraf를 활용하면 다양한 기능을 이용할 수 있는데, 이를테면 서버나 방화벽을

통과하는 패킷 중 가장 많은 bpspps를 유발하는 IP를 찾고자 할 때 쉽게 찾을 수 있다.

 

 

 

 

 

이는 iptraf 실행 후 첫 번째 메뉴인 IP traffic monitor를 선택 후 모니터링 하고자 하는 해당 인터페이스를 선택하면 된다.

 

 

 

 

이 상태에서 sort의 의미인 S를 누르면 byte(bps)로 정렬할 것인지 패킷별(pps)로 정렬할 것인지 선택할 수 있다.

 

 

 

 

아래 그림은 많은 bps를 유발하는 순서대로 정렬한 예를 보여주고 있다.

 

 

 

 

이 기능은 뒤에서 살펴볼 NAT나 브리지 방화벽 사용 시에도 유용하게 사용할 수 있을 것이다.

 

 

 

 

 

 

6ea6a5c16185de2f6af2ca44aca8b1ed_1676448638_1032.png
 

[그림] bps별로 정렬한 상태

 

 

 

 

 

방화벽은 고가이다?

 

 

 

최근에는 많이 저렴해 졌지만 상용으로 판매되는 일부 방화벽 제품의 경우 여전히 고가인 것이 사실이다.

 

 

 

 

그러나 방화벽의 룰(rule) 설정만 최적화하여 잘 사용한다면 리눅스 커널에서 제공하는 실제 패킷 필터링 자체 성능은 상용 제품에 결코 뒤지지 않거나 오히려 더 뛰어나다.

 

 

 

 

또한 몇몇 업체에서는 아예 리눅스 기반으로 상용 방화벽을 판매하는 곳도 있는데, 리눅스 커널에서 제공하는 netfilter 기반의 iptables 방화벽을 이용하면 물론 무료로 사용할 수 있다.

 

 

 

방화벽을 설치하면 접속이 되지 않는 문제가 발생할 수 있다?

 

 

 

물론 룰을 잘못 설정한다면 특정 환경의 클라이언트는 접속이 되지 않는 문제가 발생할 수도 있다.

 

 

 

 

이를테면 DNS 서버를 운영하는데, TCP 53 번을 필터링 할 경우 일부 유저는 접속이 되지 않는 문제가 발생할 것이다.

 

 

 

 

따라서 방화벽을 운영한다면 시스템 및 네트워크와 응용프로그램에 대해 일정 정도의 사전지식을 가지고 있어야 운영할 수 있다.

 

 

 

 

룰만 적절하게 설정한다면 접속이 되지 않는 문제는 발생하지 않는다.

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  92 명