웹사이트 검색

방화벽이란 무엇이며 어떻게 작동합니까?


소개

방화벽은 일련의 사용자 정의 규칙을 기반으로 들어오고 나가는 네트워크 트래픽을 필터링하여 네트워크 보안을 제공하는 시스템입니다. 일반적으로 방화벽의 목적은 합법적인 모든 통신이 자유롭게 흐르도록 허용하면서 원하지 않는 네트워크 통신의 발생을 줄이거나 제거하는 것입니다. 대부분의 서버 인프라에서 방화벽은 다른 조치와 함께 공격자가 악의적인 방식으로 서버에 액세스하는 것을 방지하는 필수 보안 계층을 제공합니다.

이 가이드는 클라우드 서버와 관련된 iptables 및 FirewallD와 같은 상태 저장 소프트웨어 방화벽에 중점을 두고 방화벽의 작동 방식에 대해 설명합니다. TCP 패킷과 다양한 유형의 방화벽에 대한 간략한 설명부터 시작하겠습니다. 그런 다음 상태 저장 방화벽과 관련된 다양한 주제에 대해 논의합니다. 마지막으로 자체 서버에 방화벽을 설정하는 데 도움이 되는 다른 자습서에 대한 링크를 제공합니다.

TCP 네트워크 패킷

다양한 유형의 방화벽에 대해 논의하기 전에 TCP(Transport Control Protocol) 네트워크 트래픽이 어떻게 생겼는지 간단히 살펴보겠습니다.

TCP 네트워크 트래픽은 패킷 헤더(소스 및 대상 주소, 패킷 시퀀스 정보 등의 제어 정보 포함)와 데이터(페이로드라고도 함)로 구성된 컨테이너인 패킷으로 네트워크 주위를 이동합니다. 각 패킷의 제어 정보는 연결된 데이터가 제대로 전달되도록 하는 데 도움이 되지만 여기에 포함된 요소는 방화벽 규칙에 따라 패킷을 일치시키는 다양한 방법을 방화벽에 제공합니다.

들어오는 TCP 패킷을 성공적으로 수신하려면 수신자가 나가는 승인 패킷을 발신자에게 다시 보내야 한다는 점에 유의해야 합니다. 들어오는 패킷과 나가는 패킷의 제어 정보 조합은 송신자와 수신자 사이의 연결 상태(예: 신규, 확립, 관련)를 결정하는 데 사용될 수 있습니다.

방화벽 유형

네트워크 방화벽의 세 가지 기본 유형인 패킷 필터링(상태 비저장), 상태 저장 및 애플리케이션 계층에 대해 빠르게 논의해 보겠습니다.

패킷 필터링 또는 상태 비저장 방화벽은 격리된 개별 패킷을 검사하여 작동합니다. 따라서 연결 상태를 인식하지 못하고 개별 패킷 헤더를 기반으로 패킷을 허용하거나 거부할 수만 있습니다.

상태 저장 방화벽은 패킷의 연결 상태를 결정할 수 있으므로 상태 비저장 방화벽보다 훨씬 유연합니다. 트래픽에 방화벽 규칙을 적용하기 전에 연결 상태를 확인할 수 있을 때까지 관련 패킷을 수집하여 작동합니다.

응용 프로그램 방화벽은 한 단계 더 나아가 전송 중인 데이터를 분석하여 개별 서비스 또는 응용 프로그램에 특정한 방화벽 규칙과 네트워크 트래픽을 일치시킬 수 있습니다. 프록시 기반 방화벽이라고도 합니다.

모든 최신 운영 체제에서 사용할 수 있는 방화벽 소프트웨어 외에도 라우터 또는 방화벽 장비와 같은 하드웨어 장치에서 방화벽 기능을 제공할 수도 있습니다. 다시 말하지만, 우리의 논의는 보호하려는 서버에서 실행되는 상태 저장 소프트웨어 방화벽에 초점을 맞출 것입니다.

방화벽 규칙

위에서 언급한 것처럼 방화벽을 통과하는 네트워크 트래픽은 허용 여부를 결정하기 위해 규칙과 비교됩니다. 방화벽 규칙이 어떻게 생겼는지 설명하는 쉬운 방법은 몇 가지 예를 보여주는 것이므로 지금부터 해보겠습니다.

들어오는 트래픽에 적용되는 다음과 같은 방화벽 규칙 목록이 있는 서버가 있다고 가정합니다.

  1. 포트 80 및 443(HTTP 및 HTTPS 웹 트래픽)의 공용 네트워크 인터페이스에 대한 신규 및 기존 수신 트래픽 수락
  2. 사무실 비기술 직원의 IP 주소에서 포트 22(SSH)로 들어오는 트래픽을 삭제합니다.
  3. 사무실 IP 범위에서 포트 22(SSH)의 사설 네트워크 인터페이스로 들어오는 신규 및 기존 수신 트래픽 수락

이러한 각 예의 첫 번째 단어는 "accept\, "reject\ 또는 "drop\입니다. 이것은 네트워크 트래픽의 일부가 규칙과 일치하는 경우 방화벽이 수행해야 하는 작업을 지정합니다. Accept는 트래픽 통과를 허용하는 것을 의미하고, 거부는 트래픽을 차단하지만 "unreachable\ 오류로 응답하는 것을 의미하며, drop은 트래픽을 차단하고 응답을 보내지 않음을 의미합니다. 각 규칙의 나머지 부분은 각 패킷이 일치하는 조건으로 구성됩니다.

결과적으로 네트워크 트래픽은 첫 번째부터 마지막까지 시퀀스 또는 체인의 방화벽 규칙 목록과 일치합니다. 보다 구체적으로, 규칙이 일치하면 관련 작업이 해당 네트워크 트래픽에 적용됩니다. 이 예에서 회계 직원이 서버에 대한 SSH 연결을 설정하려고 시도하면 규칙 3이 확인되기 전에 규칙 2에 따라 거부됩니다. 그러나 시스템 관리자는 규칙 3에만 일치하므로 허용됩니다.

기본 정책

방화벽 규칙 체인이 가능한 모든 조건을 명시적으로 다루지 않는 것은 일반적입니다. 이러한 이유로 방화벽 체인에는 항상 작업(수락, 거부 또는 삭제)으로만 구성된 기본 정책이 지정되어 있어야 합니다.

위 예제 체인의 기본 정책이 삭제로 설정되었다고 가정합니다. 사무실 외부의 컴퓨터가 서버에 대한 SSH 연결을 설정하려고 시도하면 규칙의 조건과 일치하지 않기 때문에 트래픽이 삭제됩니다.

기본 정책이 수락으로 설정된 경우 비기술 직원을 제외한 모든 사람이 서버의 열려 있는 서비스에 연결할 수 있습니다. 이것은 직원의 일부만 차단하기 때문에 매우 잘못 구성된 방화벽의 예입니다.

수신 및 발신 트래픽

서버의 관점에서 네트워크 트래픽은 들어오거나 나갈 수 있으므로 방화벽은 두 경우 모두에 대해 고유한 규칙 집합을 유지합니다. 다른 곳에서 발생하는 트래픽(수신 트래픽)은 서버에서 보내는 송신 트래픽과 다르게 처리됩니다. 서버는 일반적으로 자체적으로 신뢰할 수 있기 때문에 서버가 대부분의 발신 트래픽을 허용하는 것이 일반적입니다. 그래도 발신 규칙 집합을 사용하여 서버가 공격자나 악성 실행 파일에 의해 손상된 경우 원치 않는 통신을 방지할 수 있습니다.

방화벽의 보안 이점을 최대화하려면 다른 시스템이 서버와 상호 작용하는 모든 방법을 식별하고 이를 명시적으로 허용하는 규칙을 만든 다음 다른 모든 트래픽을 삭제해야 합니다. 서버가 적절한 들어오는 연결에 나가는 승인을 보낼 수 있도록 적절한 나가는 규칙이 있어야 합니다. 또한 서버는 일반적으로 다양한 이유로(예: 업데이트 다운로드 또는 데이터베이스 연결) 자체 나가는 트래픽을 시작해야 하므로 나가는 규칙 세트에도 이러한 경우를 포함하는 것이 중요합니다.

발신 규칙 작성

예제 방화벽이 기본적으로 나가는 트래픽을 삭제하도록 설정되어 있다고 가정합니다. 이것은 들어오는 승인 규칙이 보완적인 나가는 규칙 없이는 쓸모가 없다는 것을 의미합니다.

Firewall Rules 섹션에서 예제 수신 방화벽 규칙(1 및 3)을 보완하고 해당 주소 및 포트에서 적절한 통신이 발생하도록 하려면 다음과 같은 나가는 방화벽 규칙을 사용할 수 있습니다.

  1. 포트 80 및 443(HTTP 및 HTTPS)에서 공용 네트워크 인터페이스로 설정된 발신 트래픽 수락
  2. 포트 22(SSH)에서 사설 네트워크 인터페이스로 설정된 발신 트래픽 수락

서버가 해당 연결을 설정하거나 승인할 필요가 없기 때문에 삭제되는 수신 트래픽(수신 규칙 2)에 대한 규칙을 명시적으로 작성할 필요가 없습니다.

방화벽 소프트웨어 및 도구

이제 방화벽의 작동 방식을 살펴보았으므로 효과적인 방화벽을 설정하는 데 도움이 되는 일반적인 소프트웨어 패키지를 살펴보겠습니다. 다른 많은 방화벽 관련 패키지가 있지만 이들은 효과적이며 가장 많이 접하게 될 패키지입니다.

IP 테이블

Iptables는 기본적으로 대부분의 Linux 배포판에 포함된 표준 방화벽입니다(nftables라는 최신 변형이 이를 대체하기 시작함). 실제로 Linux 네트워크 스택을 조작할 수 있는 커널 수준 netfilter 후크의 프런트 엔드입니다. 네트워킹 인터페이스를 통과하는 각 패킷을 일련의 규칙에 대해 일치시켜 수행할 작업을 결정하는 방식으로 작동합니다.

iptables로 방화벽을 구현하는 방법을 알아보려면 다음 링크를 확인하십시오.

  • Ubuntu 14.04에서 IPTables를 사용하여 방화벽을 설정하는 방법
  • Ubuntu 14.04에서 Iptables로 기본 방화벽 템플릿을 구현하는 방법
  • 서버 간 트래픽을 보호하기 위해 Iptables 방화벽을 설정하는 방법

UFW

복잡하지 않은 방화벽(Uncomplicated Firewall)의 약자인 UFW는 방화벽 구성 프로세스를 단순화하기 위한 iptables의 인터페이스입니다.

UFW 사용에 대한 자세한 내용은 Ubuntu 및 Debian 클라우드 서버에서 UFW로 방화벽을 설정하는 방법 자습서를 확인하십시오.

방화벽D

FirewallD는 CentOS 7 서버에서 기본적으로 사용할 수 있는 완벽한 방화벽 솔루션입니다. 부수적으로 FirewallD는 iptables를 사용하여 netfilter를 구성합니다.

FirewallD 사용에 대한 자세한 내용은 CentOS 7 서버를 보호하기 위해 FirewallD를 구성하는 방법 튜토리얼을 확인하십시오.

CentOS 7을 실행 중이지만 iptables 사용을 선호하는 경우 CentOS 7의 FirewallD에서 Iptables로 마이그레이션하는 방법 튜토리얼을 따르십시오.

Fail2ban

Fail2ban은 무차별 로그인 시도 및 DDOS 공격을 차단하도록 방화벽을 자동으로 구성할 수 있는 침입 방지 소프트웨어입니다.

Fail2ban에 대해 자세히 알아보려면 다음 링크를 확인하십시오.

  • Fail2ban이 Linux 서버에서 서비스를 보호하는 방법
  • Ubuntu 14.04에서 Fail2Ban으로 SSH를 보호하는 방법
  • Ubuntu 14.04에서 Fail2Ban으로 Nginx 서버를 보호하는 방법
  • Ubuntu 14.04에서 Fail2Ban으로 Apache 서버를 보호하는 방법

결론

이제 방화벽이 작동하는 방식을 이해했으므로 위의 자습서를 사용하여 서버 설정의 보안을 향상시키는 방화벽을 구현하는 방법을 살펴봐야 합니다.

방화벽 작동 방식에 대해 자세히 알아보려면 다음 링크를 확인하십시오.

  • Iptables 방화벽 작동 방식
  • 서버 보안을 위한 효과적인 방화벽 정책을 선택하는 방법
  • Iptables 및 Netfilter 아키텍처에 대한 심층 분석