넷필터

넷필터는 리눅스 커널 내부에 구현된 프레임워크로, 네트워크 패킷의 흐름을 가로채고 조작할 수 있는 기능을 제공한다. 이는 주로 패킷 필터링(방화벽), 네트워크 주소 변환(NAT), 패킷 조작(mangle) 등의 목적으로 사용된다. 넷필터는 커널의 네트워크 스택 내 여러 '훅(hook)' 지점을 정의하며, 이 지점들을 통해 특정 모듈들이 패킷 처리에 개입할 수 있도록 설계되었다.

개요

넷필터는 리눅스 기반 시스템에서 네트워크 트래픽을 제어하는 핵심적인 구성 요소이다. 시스템 관리자는 이를 활용하여 외부로부터의 불필요한 접근을 차단하고, 내부 네트워크와 외부 네트워크 간의 통신 규칙을 설정하며, 네트워크 주소를 변환하여 여러 장치가 하나의 공인 IP 주소를 공유하게 하는 등 다양한 네트워크 보안 및 관리 작업을 수행할 수 있다.

넷필터 프레임워크에 대한 설정은 주로 사용자 공간(user-space) 유틸리티를 통해 이루어지며, 과거에는 iptables가 가장 널리 사용되었고, 현재는 nftables가 그 뒤를 잇고 있다.

역할 및 기능

넷필터는 다음과 같은 주요 기능을 제공한다.

  • 패킷 필터링 (Packet Filtering): 특정 출발지/도착지 IP 주소, 포트 번호, 프로토콜, 인터페이스 등 다양한 조건을 기반으로 패킷을 차단(DROP)하거나 허용(ACCEPT)한다. 이는 기본적인 방화벽 기능을 구현하는 데 사용된다.
  • 네트워크 주소 변환 (Network Address Translation, NAT):
    • 소스 NAT (Source NAT, SNAT): 내부 네트워크의 사설 IP 주소를 외부 네트워크로 나갈 때 공인 IP 주소로 변환한다. (예: 인터넷 공유)
    • 데스티네이션 NAT (Destination NAT, DNAT): 외부에서 들어오는 공인 IP 주소와 특정 포트 번호를 내부 네트워크의 특정 서버(사설 IP)로 변환하여 전달한다. (예: 포트 포워딩)
  • 패킷 조작 (Packet Mangle): 패킷 헤더의 특정 필드를 변경한다. 이는 서비스 품질(QoS) 설정, 마스커레이딩(masquerading), TTL(Time-To-Live) 값 변경 등 고급 네트워크 설정에 활용된다.
  • 연결 추적 (Connection Tracking, conntrack): TCP/UDP 등의 연결 상태를 추적하여, 해당 연결에 속하는 모든 패킷을 관리하고 상태 기반 방화벽을 구현할 수 있도록 한다. 이를 통해 FTP와 같은 복잡한 프로토콜도 효율적으로 처리할 수 있다.

구성 요소 및 도구

넷필터는 커널 내부 프레임워크와 이를 제어하는 사용자 공간 유틸리티로 구성된다.

  • 넷필터 훅 (Netfilter Hooks): 패킷이 커널 네트워크 스택을 통과하는 여러 지점에 미리 정의된 포인트이다. 주요 훅 지점으로는 PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 등이 있다.
  • 테이블 (Tables): 특정 목적을 가진 규칙들의 집합이다. 대표적으로 filter (방화벽), nat (주소 변환), mangle (패킷 조작), raw (연결 추적 예외), security (SELinux 통합) 등이 있다.
  • 체인 (Chains): 특정 테이블 내에서 패킷이 처리되는 규칙들의 순차적인 목록이다. 미리 정의된 체인(예: INPUT, OUTPUT, FORWARD 등)과 사용자가 정의하는 체인이 있다.
  • 규칙 (Rules): 특정 조건(출발지 IP, 포트, 프로토콜 등)과 그 조건이 일치할 때 수행할 동작(타겟, Target)으로 구성된다.
  • 타겟 (Targets): 규칙의 조건이 만족되었을 때 수행되는 동작이다. ACCEPT (허용), DROP (패킷 버림), REJECT (패킷 거부 및 에러 응답), MASQUERADE, SNAT, DNAT, LOG (로그 기록) 등이 있다.

사용자 공간 유틸리티

  • iptables/ip6tables: IPv4 및 IPv6 패킷 필터링 및 NAT를 설정하는 데 사용되는 전통적인 명령어 라인 유틸리티이다. arptables(ARP 패킷)와 ebtables(이더넷 프레임)도 넷필터 프레임워크를 사용한다.
  • nftables: iptables를 대체하기 위해 개발된 차세대 패킷 필터링 시스템이다. 단일 명령어로 IPv4, IPv6, ARP, 브리지 패킷을 모두 처리할 수 있으며, 더 유연하고 효율적인 문법, 원자적(atomic) 규칙 업데이트, 향상된 성능 등의 장점을 제공한다.

작동 원리

네트워크 패킷이 리눅스 시스템에 들어오거나 나갈 때, 패킷은 커널의 네트워크 스택을 따라 이동한다. 이 과정에서 패널은 미리 정의된 넷필터 훅 지점들을 순차적으로 통과하게 된다. 각 훅 지점에서는 해당 지점에 연결된 테이블의 체인에 있는 규칙들이 순서대로 적용된다. 패킷이 특정 규칙의 조건과 일치하면 해당 규칙에 지정된 타겟이 실행되어 패킷의 운명이 결정된다. 만약 어떤 규칙과도 일치하지 않으면 체인의 기본 정책(default policy)이 적용된다.

활용 분야

넷필터는 리눅스 기반 시스템에서 광범위하게 활용된다.

  • 개인 및 서버 방화벽: 외부로부터의 불법적인 접근을 차단하고, 특정 서비스 포트를 제어하는 데 사용된다.
  • 라우터 및 게이트웨이: 여러 네트워크 세그먼트 간의 트래픽을 전달하고, 네트워크 주소 변환을 통해 인터넷 연결 공유 기능을 제공한다.
  • VPN 서버: VPN 터널을 통해 들어오는 트래픽의 라우팅 및 필터링을 제어한다.
  • 컨테이너 네트워킹: Docker, Kubernetes와 같은 컨테이너 오케스트레이션 시스템에서 가상 네트워크 및 서비스 로드 밸런싱을 구현하는 데 핵심적인 역할을 한다.
  • 로드 밸런싱: 간단한 포트 포워딩 및 DNAT 규칙을 통해 기본적인 서버 로드 밸런싱을 구현할 수 있다.

같이 보기

  • iptables
  • nftables
  • 리눅스 커널
  • 방화벽
  • 네트워크 주소 변환 (NAT)
둘러보기

더 찾아볼 만한 주제