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

소개

A firewall is a system that provides network security by filtering incoming and outgoing network traffic based on a set of user-defined rules. In general, the purpose of a firewall is to reduce or eliminate the occurrence of unwanted network communications while allowing all legitimate communication to flow freely. In most server infrastructures, firewalls provide an essential layer of security that, combined with other measures, prevent attackers from accessing your servers in malicious ways.

이 안내서는 방화벽이 작동하는 방식에 대해 다룰 것이며, 특히 클라우드 서버와 관련된 iptables 및 FirewallD와 같은 상태 기반 소프트웨어 방화벽에 초점을 맞출 것입니다. 먼저 TCP 패킷과 다양한 종류의 방화벽에 대한 간단한 설명부터 시작하여 상태 기반 방화벽과 관련된 다양한 주제를 논의할 것입니다. 마지막으로, 서버에 방화벽을 설정하는 데 도움이 되는 다른 자습서에 대한 링크를 제공할 것입니다.

TCP 네트워크 패킷

다양한 종류의 방화벽에 대해 논의하기 전에, 전송 제어 프로토콜(TCP) 네트워크 트래픽이 어떻게 보이는지 간단히 살펴보겠습니다.

TCP 네트워크 트래픽은 패킷이라는 컨테이너를 통해 네트워크를 이동합니다. 이 패킷에는 패킷 헤더가 포함되어 있습니다. 이 헤더에는 출발지 및 목적지 주소, 패킷 순서 정보와 같은 제어 정보가 포함되어 있습니다. 각 패킷의 제어 정보는 해당 데이터가 올바르게 전달되도록 보장하지만, 그 안에 포함된 요소는 방화벽이 패킷을 방화벽 규칙과 일치시키는 다양한 방법을 제공합니다.

수신된 TCP 패킷을 성공적으로 받기 위해서는 수신기가 발신자에게 돌아가는 확인 패킷을 보내야 한다는 점이 중요하다. 수신 및 발신 패킷의 제어 정보의 결합은 발신자와 수신자 간의 연결 상태(예: 새로운, 설정된, 관련된)를 결정하는 데 사용될 수 있다.

방화벽의 유형

네트워크 방화벽의 세 가지 기본 유형에 대해 간단히 논의해 보겠습니다: 패킷 필터링(상태 없음), 상태 기반 및 응용 프로그램 계층 방화벽입니다.

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

상태 기반 방화벽은 패킷의 연결 상태를 결정할 수 있어 상태 없음 방화벽보다 훨씬 유연하게 작동합니다. 이들은 연결 상태가 판별될 때까지 관련 패킷을 수집하여 방화벽 규칙이 트래픽에 적용되기 전에 작동합니다.

응용 프로그램 방화벽은 전송되는 데이터를 분석함으로써 한 단계 더 나아가 네트워크 트래픽을 개별 서비스 또는 응용 프로그램에 특정된 방화벽 규칙과 일치시킬 수 있습니다. 이러한 방화벽은 프록시 기반 방화벽으로도 알려져 있습니다.

모든 현대 운영 체제에서 제공되는 방화벽 소프트웨어 외에도 라우터나 방화벽 장치와 같은 하드웨어 장치에서도 방화벽 기능을 제공할 수 있습니다. 다시 말해, 우리의 논의는 보호하려는 서버에서 실행되는 상태를 고려한 소프트웨어 방화벽에 중점을 둘 것입니다.

방화벽 규칙

위에서 언급한 대로, 방화벽을 통과하는 네트워크 트래픽은 규칙과 일치하여 허용할지 여부를 결정합니다. 방화벽 규칙이 어떤 모습인지 설명하는 간단한 방법은 몇 가지 예를 보여주는 것이므로, 이제 그것을 해보겠습니다.

들어오는 트래픽에 적용되는 다음 방화벽 규칙 목록을 가진 서버가 있다고 가정해보십시오:

  1. 공용 네트워크 인터페이스의 포트 80 및 443(HTTP 및 HTTPS 웹 트래픽)로 새로운 및 설정된 들어오는 트래픽 허용
  2. 사무실의 비기술 직원들의 IP 주소에서 포트 22(SSH)로 들어오는 트래픽 삭제
  3. 사무실 IP 범위에서 개인 네트워크 인터페이스의 포트 22(SSH)로 새로운 및 설정된 들어오는 트래픽 허용

각 예제의 첫 번째 단어가 “accept”, “reject” 또는 “drop” 중 하나입니다. 이는 방화벽이 네트워크 트래픽이 규칙과 일치하는 경우에 취해야 할 조치를 지정합니다. Accept는 트래픽을 통과시키는 것을 의미하고, reject는 트래픽을 차단하지만 “도달할 수 없음” 오류로 응답하고, drop은 트래픽을 차단하고 응답을 보내지 않는 것을 의미합니다. 각 규칙의 나머지 부분은 각 패킷이 일치해야 하는 조건으로 구성됩니다.

네트워크 트래픽은 실제로 체인 또는 순서대로 방화벽 규칙 목록에 일치시킵니다. 구체적으로는 규칙이 일치하면 해당 조치가 관련된 네트워크 트래픽에 적용됩니다. 예를 들어, 회계 직원이 서버에 SSH 연결을 시도하면 규칙 2를 기반으로 거부됩니다. 규칙 3이 심지어 확인되기 전에입니다. 그러나 시스템 관리자는 규칙 3만 일치하므로 허용됩니다.

기본 정책

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

위의 예시 체인에 대한 기본 정책이 드롭(drop)으로 설정되었다고 가정해보십시오. 사무실 외의 어떤 컴퓨터가 서버에 SSH 연결을 시도하면 해당 트래픽은 어떤 규칙의 조건과 일치하지 않기 때문에 드롭(drop)됩니다.

기본 정책이 수락(accept)으로 설정된 경우, 귀사의 비기술 직원을 제외한 누구라도 서버의 모든 오픈 서비스에 연결할 수 있습니다. 이것은 귀사 직원의 일부만 거부하는 매우 잘못 구성된 방화벽의 예입니다.

들어오는 및 나가는 트래픽

서버의 관점에서 네트워크 트래픽은 들어오는지 또는 나가는지에 따라 구분될 수 있으며, 방화벽은 각각의 경우에 대해 별도의 규칙 세트를 유지합니다. 다른 곳에서 시작되는 트래픽, 즉 들어오는 트래픽은 서버가 보내는 나가는 트래픽과는 다르게 처리됩니다. 서버가 보통 자신에 대해 신뢰할 수 있기 때문에 대부분의 나가는 트래픽을 허용하는 것이 일반적입니다. 그럼에도 불구하고, 서버가 공격자나 악성 실행 파일에 의해 침해될 경우를 대비하여 나가는 규칙 세트를 사용하여 원치 않는 통신을 방지할 수 있습니다.

방화벽의 보안 이점을 최대화하려면 다른 시스템이 서버와 상호 작용하는 방법을 모두 식별한 후 명시적으로 허용하는 규칙을 생성한 다음 다른 모든 트래픽을 삭제해야 합니다. 적절한 발신 규칙이 설정되어야 합니다. 이는 서버가 수신된 연결에 대한 발신 확인을 보낼 수 있도록 허용해야 함을 의미합니다. 또한 서버는 업데이트 다운로드 또는 데이터베이스 연결과 같은 다양한 이유로 자체 발신 트래픽을 시작해야 하므로 발신 규칙 집합에 해당 사례를 포함하는 것이 중요합니다.

발신 규칙 작성

예를 들어 우리의 예시 방화벽이 기본적으로 발신 트래픽을 차단하는 설정이라고 가정해 봅시다. 이는 우리의 수신 허용 규칙이 상호 보완적인 발신 규칙 없이는 쓸모가 없다는 것을 의미합니다.

예시 수신 방화벽 규칙 (1 및 3)을 보완하여 해당 주소와 포트에서 적절한 통신이 발생할 수 있도록, 다음과 같은 발신 방화벽 규칙을 사용할 수 있습니다:

  1. 공용 네트워크 인터페이스의 포트 80 및 443(HTTP 및 HTTPS)로 설정된 발신 트래픽을 허용합니다.
  2. 개인 네트워크 인터페이스의 포트 22 (SSH)로 설정된 발신 트래픽을 허용합니다.

주의할 점은 연결이 드롭된 들어오는 트래픽에 대한 명시적인 규칙을 작성할 필요가 없다는 것입니다(들어오는 규칙 2). 왜냐하면 서버가 해당 연결을 설정하거나 인식할 필요가 없기 때문입니다.

방화벽 소프트웨어 및 도구

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

Iptables

Iptables는 대부분의 리눅스 배포판에 기본적으로 포함된 표준 방화벽입니다(현대적인 변형인 nftables가 대체하기 시작할 것입니다). 실제로는 리눅스 네트워크 스택을 조작할 수 있는 커널 수준의 netfilter 후크의 프론트 엔드입니다. 각 패킷을 네트워킹 인터페이스를 통해 건너갈 때마다 일련의 규칙에 대한 일치를 확인하여 어떻게 할지를 결정합니다.

Iptables를 사용하여 방화벽을 구현하는 방법을 알아보려면 다음 링크를 확인하세요:

UFW

UFW(Uncomplicated Firewall)는 iptables를 위한 인터페이스로, 방화벽 구성 과정을 단순화하는 데 중점을 둔다.

UFW를 더 알아보려면 다음 튜토리얼을 참조하세요: 우분투와 데비안 클라우드 서버에 UFW로 방화벽 설정하는 방법.

FirewallD

FirewallD는 CentOS 7 서버에 기본으로 제공되는 완전한 방화벽 솔루션이다. 우연히도 FirewallD는 netfilter를 구성하기 위해 iptables를 사용한다.

FirewallD를 더 알아보려면 다음 튜토리얼을 참조하세요: CentOS 7 서버를 보호하기 위해 FirewallD 구성하는 방법.

만약 CentOS 7을 실행 중이지만 iptables를 사용하고 싶다면, 이 튜토리얼을 따르세요: CentOS 7에서 FirewallD에서 Iptables로 이주하는 방법.

Fail2ban

Fail2ban은 침입 방지 소프트웨어로, 무차별 대입 로그인 시도와 DDOS 공격을 차단하기 위해 자동으로 방화벽을 구성할 수 있습니다.

Fail2ban에 대해 더 알고 싶다면, 이 링크들을 확인하세요:

결론

이제 방화벽이 어떻게 작동하는지 이해했으므로 위의 자습서를 사용하여 서버 설정의 보안을 향상시킬 수 있는 방화벽을 구현하는 것이 좋습니다.

방화벽이 어떻게 작동하는지 더 알고 싶다면 다음 링크를 확인하십시오:

Source:
https://www.digitalocean.com/community/tutorials/what-is-a-firewall-and-how-does-it-work