Iptables 방화벽이 작동하는 방식

소개

방화벽 설정은 모든 현대 운영 체제에서 보안을 강화하는 필수 단계입니다. 대부분의 Linux 배포판에는 방화벽을 구성하는 데 사용할 수 있는 몇 가지 다른 도구가 함께 제공됩니다. 이 안내서에서는 iptables 방화벽에 중점을 둘 것입니다.

Iptables는 대부분의 Linux 배포판에 기본으로 포함된 표준 방화벽입니다. 이는 Linux 네트워크 스택을 조작할 수 있는 커널 수준 netfilter 후크에 대한 명령 줄 인터페이스입니다. 이는 네트워크 인터페이스를 통과하는 각 패킷을 규칙 집합과 비교하여 어떤 작업을 수행할지 결정합니다.

이 안내서에서는 Iptables가 어떻게 작동하는지 검토합니다. 더 깊게 알아보려면 Iptables와 Netfilter 아키텍처에 대한 심층 탐구를 읽어볼 수 있습니다.

Iptables의 작동 방식

먼저 몇 가지 용어를 검토하고 iptables가 어떻게 작동하는지 설명해 봅시다.

iptables 방화벽은 네트워크 트래픽을 일련의 규칙과 비교함으로써 작동합니다. 이 규칙은 일치해야 하는 네트워크 패킷의 특성 및 일치하는 패킷에 대해 수행해야 하는 작업을 정의합니다.

다양한 옵션이 있어서 특정 규칙과 일치하는 패킷을 확인하는 것이 가능합니다. 패킷 프로토콜 유형, 소스 또는 대상 주소 또는 포트, 사용 중인 인터페이스, 이전 패킷과의 관계 등을 기준으로 일치시킬 수 있습니다.

정의된 패턴이 일치하는 경우, 발생하는 동작을 대상이라고 합니다. 대상은 패킷에 대한 최종 정책 결정일 수 있으며, ACCEPT 또는 DROP과 같은 최종 정책을 수행할 수 있습니다. 또한 패킷을 다른 체인으로 이동하여 처리하거나 발생한 사건을 로그로 남길 수도 있습니다. 여러 옵션이 있습니다.

이러한 규칙은 체인이라고 불리는 그룹으로 구성됩니다. 체인은 패킷이 순차적으로 확인되는 규칙의 집합입니다. 패킷이 규칙 중 하나와 일치하는 경우 해당 동작을 실행하고 체인의 나머지 규칙을 건너뜁니다.

A user can create chains as needed. There are three chains defined by default. They are:

  • INPUT: 이 체인은 서버로 전송된 모든 패킷을 처리합니다.
  • OUTPUT: 이 체인에는 서버에서 생성된 트래픽에 대한 규칙이 포함되어 있습니다.
  • FORWARD: 이 체인은 서버에서 생성되지 않은 다른 서버로 향하는 트래픽을 처리하는 데 사용됩니다. 이 체인은 서버를 다른 기계로 요청을 라우팅하도록 구성하는 방법입니다.

각 체인은 영 규칙을 포함할 수 있으며 기본 정책을 가지고 있습니다. 정책은 패킷이 체인의 모든 규칙을 통과하고 어떤 규칙과도 일치하지 않을 때 어떤 일이 발생하는지를 결정합니다. 패킷을 버리거나 규칙과 일치하는 것이 없으면 패킷을 수락할 수 있습니다.

Iptables는 연결을 추적할 수도 있습니다. 이는 데이터 패킷이 이전 패킷과의 관계를 기반으로 어떻게 처리될지를 정의하는 규칙을 생성할 수 있음을 의미합니다. 이 기능은 “상태 추적”, “연결 추적” 또는 “상태 머신” 구성이라고 합니다.

IPv4 대 IPv6

리눅스 커널에 포함된 netfilter 방화벽은 IPv4 및 IPv6 트래픽을 완전히 분리합니다. 방화벽 규칙 세트를 포함하는 테이블을 조작하는 Iptables 도구도 구분됩니다. 서버에서 IPv6를 활성화한 경우 두 테이블을 모두 구성하여 서버의 트래픽을 처리해야 합니다.

참고: Nftables, Iptables의 후속 제품은 IPv4 및 IPv6를 보다 밀접하게 통합합니다. iptables-translate 명령을 사용하여 Iptables 규칙을 Nftables로 이전할 수 있습니다.

정규 iptables 명령은 IPv4 트래픽을 규제하는 규칙을 포함하는 테이블을 조작하는 데 사용됩니다. IPv6 트래픽의 경우, ip6tables이라는 동반 명령을 사용합니다. iptables로 설정한 규칙은 IPv4 주소를 사용하는 패킷에만 영향을 미치지만, 이러한 명령들의 구문은 동일합니다. iptables 명령은 IPv4 트래픽에 적용되는 규칙을 만들고, ip6tables 명령은 IPv6 트래픽에 적용되는 규칙을 만듭니다. ip6tables 규칙을 작성할 때 서버의 IPv6 주소를 사용하는 것을 잊지 마세요.

주의할 사항

이제 iptables이 인터페이스를 통과하는 패킷을 어떻게 처리하는지 알았으므로 – 패킷을 적절한 체인으로 보내고 일치하는 규칙을 찾을 때까지 각각의 규칙과 비교하고 일치하는 것이 없으면 체인의 기본 정책을 적용합니다 – 규칙을 생성할 수 있습니다.

먼저, 기본 삭제 정책을 구현하는 경우 현재 연결을 유지하기 위한 규칙이 있는지 확인해야 합니다. 특히 SSH를 통해 서버에 연결된 경우에 중요합니다. 현재 연결을 삭제하는 규칙이나 정책을 실수로 구현하면 브라우저 기반 복구 콘솔을 사용하여 서버에 로그인해야 할 수 있습니다.

기억해야 할 다른 사항은 각 체인의 규칙 순서가 중요하다는 것입니다. 패킷은 더 구체적인 규칙과 일치해야 하는 경우 더 일반적인 규칙을 통과해서는 안 됩니다.

이러한 이유로, 체인 상단의 규칙은 하단의 규칙보다 구체적이어야합니다. 먼저 특정한 경우를 일치시킨 다음 더 일반적인 규칙을 제공해보세요. 패킷이 전체 체인을 통과하면 (어떤 규칙과도 일치하지 않는 경우) 가장 일반적인 규칙을 따를 것입니다. 다시 말해, 기본 정책입니다.

이러한 이유로, 체인의 기본 정책은 해당 체인에 포함될 규칙 유형을 강력하게 지시합니다. 기본 정책이 ACCEPT인 체인에는 패킷을 명시적으로 삭제하는 규칙이 포함됩니다. DROP으로 기본 설정된 체인에는 특별히 허용되어야 하는 패킷에 대한 예외가 포함됩니다.

결론

이 시점에서 자체 방화벽을 구현할 준비가되었습니다. 이를 위해 Ubuntu 22.04에서 Nftables를 사용하여 방화벽을 설정하는 방법을 읽어보십시오. 또는 좀 더 고수준의 접근 방식으로 Ubuntu 22.04에서 UFW를 사용하여 방화벽을 설정하는 방법을 시도할 수 있습니다. 방화벽을 관리 서비스 계층으로 실행하려는 경우 DigitalOcean의 클라우드 방화벽도 시도해 볼 수 있습니다.

Source:
https://www.digitalocean.com/community/tutorials/how-the-iptables-firewall-works