리눅스 방화벽의 기본 개념
리눅스는 세상에서 가장 안전한 운영체제 중 하나로 꼽힙니다. 일반적으로 백신 프로그램이 필요 없고, 파일은 사용자의 허가 없이는 실행될 수 없으며, 악의적인 의도를 가진 사람들로부터 사용자를 지켜주는 다양한 보안 장치가 마련되어 있습니다. 그중에서도 시스템 관리자와 일반 가정용 사용자 모두가 공통으로 활용하는 도구가 바로 방화벽(firewall)입니다.
방화벽은 가장 기본적인 형태로 외부에서 들어오는 패킷을 가로채어, 해당 패킷을 컴퓨터 내 목적지 응용 프로그램으로 전달하거나 다른 곳으로 포워딩하기 전에 어떻게 처리할지 판단합니다. 이 "어떻게 처리할지"에 대한 판단 기준이 바로 사용자가 직접 정의한 네트워크 방화벽 규칙이며, 이를 통해 패킷을 수락할지 거부할지 결정하게 됩니다.
다행히 리눅스 커널에는 규칙 집합에 따라 패킷을 수락하거나 거부할 수 있는 필터링 시스템이 내장되어 있어, 우리가 원하는 기능은 이미 갖추어져 있습니다. 남은 과제는 이러한 규칙을 어떻게 지정하느냐는 것입니다.
iptables: 강력하지만 복잡한 기본 도구
기본적으로 우분투(Ubuntu)를 비롯한 대부분의 리눅스 배포판에는 iptables 유틸리티가 포함되어 있으며, 이를 통해 해당 컴퓨터를 통과하는 네트워크 트래픽에 적용될 방화벽 규칙을 정의하고 관리할 수 있습니다. 다만 iptables는 명령행 스위치와 옵션이 매우 난해하고 그 종류만 수백 가지에 달해, 사용자 친화적이라고 부르기엔 한참 못 미칩니다.
다음은 전형적인 iptables 규칙의 예입니다:
# iptables -A INPUT -s xmail.spammer.ru -d 10.4.5.6 -p tcp --dport 25 -j REJECT
훨씬 더 쉬운 방법이 있어야 하지 않을까요? 윈도우에는 설치 즉시 완전한 기능을 갖춘 방화벽을 제공하고, 이후 자유롭게 수정할 수 있는 소프트웨어들이 이미 존재합니다. 다행히 리눅스에서도 방화벽을 손쉽게 구성할 수 있도록 도와주는 여러 도구가 마련되어 있습니다.
UFW & GuFW
우분투 사용자라면 UFW(Uncomplicated Firewall)를 활용할 수 있습니다. UFW 역시 명령줄 유틸리티지만 문법이 훨씬 단순합니다. 먼저 들어오고 나가는 연결 전체를 허용하거나 차단한 뒤, 특정 포트·특정 호스트·특정 서비스에 대해서만 선택적으로 트래픽을 허용하거나 차단하는 방식입니다. 예시를 보면 훨씬 명확해집니다:
ufw allow 8080/tcp는 8080 포트에 대한 모든 접근을 허용하고, ufw deny 21은 21번 포트(FTP)에 대한 접근을 모두 차단합니다.
UFW에는 GuFW라는 그래픽 프론트엔드도 함께 제공됩니다. GuFW를 사용하면 그래픽 인터페이스만으로 가장 복잡한 규칙까지 만들 수 있으며, UFW의 스위치와 옵션을 일일이 외울 필요가 없습니다. 우분투 소프트웨어 센터에서 설치하거나 sudo apt-get install gufw 명령으로 간편하게 설치할 수 있습니다.
Firestarter
Firestarter 역시 리눅스 방화벽 설정을 크게 단순화해 주는 인기 있는 도구입니다. 마찬가지로 우분투 소프트웨어 센터에서 찾아 설치하거나 sudo apt-get install firestarter 명령으로 설치할 수 있습니다.
단순히 UFW의 GUI 프론트엔드에 불과한 GuFW와 달리, Firestarter는 훨씬 풍부한 기능을 제공하며 기본적으로 마법사(위자드) 모드로 시작해 설정 과정을 안내합니다. 이 마법사는 네트워크 장치를 자동으로 감지하고, 필요에 따라 인터넷 연결 공유(Internet Connection Sharing) 같은 기능까지 설정해 줍니다.
물론 방화벽 규칙 역시 손쉽게 만들 수 있으며, 내부의 복잡한 처리 과정은 Firestarter가 알아서 관리해 줍니다. 규칙을 만들려면 Policy(정책) 탭으로 이동한 뒤, 활성 영역 안에서 마우스 오른쪽 버튼을 클릭하면 해당 유형의 규칙(또는 정책)을 추가할 수 있습니다.
예를 들어 아래 화면에서는 192.168.0.56 호스트에서 들어오는 HTTP 인바운드 트래픽을 허용하고 있습니다. 원한다면 메모(코멘트)를 덧붙인 후 규칙을 등록하면 됩니다.
마무리: 어떤 도구를 선택할까?
리눅스 방화벽을 설정할 수 있는 도구는 이것들만이 아닙니다. ipkungfu나 shorewall처럼 유사한 작업을 수행할 수 있는 도구들도 존재합니다. 그중에서도 Firestarter와 UFW/GuFW가 가장 널리 쓰이면서도 사용법이 쉬운 편입니다. 가정용 PC나 서버에 방화벽을 구성하는 것이 목적이라면, 이 도구들만으로도 큰 어려움 없이 작업을 마칠 수 있습니다.
리눅스에서 방화벽을 사용하고 계신가요? 그렇다면 어떤 도구나 유틸리티를 사용하시는지 댓글로 알려주세요!