개념 사전 · 프로그램

Netfilter와 nftables

넷필터 · nftables

는 커널의 패킷 처리 지점에서 필터링·연결 추적·주소 변환을 수행하는 체계이며 는 이를 규칙으로 관리하는 프레임워크이다. 로컬 수신과 호스트를 통과하는 전달 패킷은 서로 다른 경로를 지난다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 주소·포트·인터페이스·연결 상태에 따라 패킷 처리를 결정한다.
  • 흐름의 연결 추적 정보를 이용해 응답 허용과 매핑을 유지한다.
  • base chain의 hook·priority를 통해 처리 지점과 순서를 표현한다.

02어떤 순서로 동작하나

  1. 수신 진입

    외부 패킷은 PREROUTING 계열 처리 지점을 지나며 구성에 따라 연결 추적과 DNAT 등이 적용된다.

  2. 경로 결정

    결과가 로컬 목적이면 INPUT, 다른 호스트로 전달이면 FORWARD 경로를 택한다.

  3. 규칙 평가

    해당 hook의 체인과 우선순위에 따라 조건·카운터·verdict를 평가한다. 한 base chain의 accept가 뒤의 모든 필터를 없애지는 않는다.

  4. 송출 처리

    전달 또는 로컬 출력 패킷은 송출 경로를 거치며 필요 시 POSTROUTING의 SNAT 매핑을 적용해 나간다.

03먼저 알아둘 용어와 구성요소

는 커널 네트워크 처리 중 특정 지점에서 필터링·주소 변환 등을 수행할 수 있게 하는 틀이다.
는 규칙을 표현하고 관리하는 인터페이스 계열이고, 나 UFW는 서비스·영역 같은 더 높은 수준의 정책을 관리한다. 따라서 패킷이 , iptables, 라는 독립된 세 방화벽을 차례로 통과한다고 그리면 구현 관계를 오해하게 된다.
일반 체인은 다른 규칙이 jump 또는 goto로 호출해야 방문한다.
은 프로토콜과 주소·포트 등의 정보를 이용하여 패킷을 연결 흐름에 연결한다.
한 체인의 accept 뒤에도 뒤 우선순위 체인이 적용될 수 있다. 다른 체인의 drop은 최종 전달을 막으므로 한 규칙의 hit만 보고 전체 허용으로 단정하지 않는다.
상태 기반 는 첫 패킷에서 변환 규칙을 찾아 연결의 바인딩을 만든다. 후속 패킷은 매번 같은 규칙을 새로 검색하는 대신 저장된 변환 관계를 사용한다.
LEARN THROUGH PRACTICE

INPUT 규칙의 순서·기본 정책·카운터 읽기

SSH 허용과 FTP 거부 규칙, 기본 ACCEPT 정책, 별도 테이블을 패킷 처리 경로에 연결한다.

실습 구성과 전제

  • 화면은 iptables로 조회한 규칙이다. 를 직접 관리하는 환경이나 다른 주소 패밀리의 규칙까지 모두 보여 주는 출력은 아니다.
  • 기존 실습 호스트의 규칙을 조회하는 예시이며 원격 접속 중 규칙을 변경하는 작업은 포함하지 않는다.
  1. 호스트 자신에게 오는 패킷의 규칙을 읽는다

    • INPUT 체인은 결정 후 이 호스트가 수신할 패킷에 적용된다. 첫 규칙은 목적지 포트 22를 ACCEPT하고, 다음 규칙은 목적지 포트 21을 REJECT한다.
    • 위에서부터 조건을 비교하므로 앞 규칙의 매치와 판정이 중요하다. 이 화면의 기본 정책은 ACCEPT이며, 일치하지 않는 패킷을 묵시적으로 모두 거부하는 구성이 아니다.
    bash
    sudo iptables -L INPUT -n -v --line-numbers
    sudo iptables -S INPUT

    현재 filter/INPUT의 표시 결과와 규칙 문법을 함께 조회한다.

    7/23 -xss, 방화벽(iptables) · 실습·개념 참고 화면 6원본 크기로 보기 ↗
    • 체인 머리의 policy ACCEPT와 두 규칙의 번호가 함께 보인다.
    • 22번 포트 ACCEPT의 카운터는 2642 packets, 21번 포트 REJECT의 카운터는 0으로 표시된다.
    확인 기준

    카운터가 0인 규칙은 관찰 구간에 매치된 패킷이 없다는 뜻이다. 대상 서비스가 살아 있는지나 다른 경로의 차단 여부는 알 수 없다.

  2. NAT 테이블의 빈 목록을 별도로 해석한다

    • -t 는 filter가 아닌 테이블을 선택한다. 빈 체인은 해당 조회에 표시할 주소 변환 규칙이 없다는 뜻이며 INPUT의 허용·거부 규칙을 지우지 않는다.
    • 필터 판정과 연결의 주소 변환은 목적이 다르다. 첫 패킷으로 정한 매핑과 이후 연결 추적의 동작도 단순히 모든 패킷이 모든 규칙을 통과한다고 읽어서는 안 된다.
    bash
    sudo iptables -t nat -L -n -v
    ss -lnt

    주소 변환 규칙과 애플리케이션의 리슨 상태를 다른 증거로 조회한다.

    7/23 -xss, 방화벽(iptables) · 실습·개념 참고 화면 4원본 크기로 보기 ↗
    • PREROUTING·INPUT·OUTPUT·POSTROUTING의 체인 머리가 나열된다.
    • 각 체인 아래 실제 변환 규칙 행이 없고, 조회 명령은 -t nat를 사용한다.
    확인 기준

    가 비어 있어도 서비스 리슨, INPUT 필터, 문제 때문에 접속이 실패할 수 있다.

  3. 한 번의 연결 시험을 카운터 변화와 대응시킨다

    • 허용된 실습 클라이언트에서 지정 서비스에 한 번 연결하고 직전·직후 카운터를 비교한다. 22번 규칙 증가가 보이면 그 규칙을 지난 패킷이 있었다는 근거가 된다.
    • 연결 성공은 수립과 애플리케이션 응답까지 봐야 한다. REJECT의 응답, 서버가 닫힌 포트에 보내는 RST, 경로 중간의 DROP은 서로 다른 실패 양상이다.
    확인 기준

    시험한 시각·목적지·포트를 기록한다. 트래픽이 많은 환경에서는 카운터 차이 전부를 자신의 한 요청으로 단정하지 않는다.

실습에서 확인한 동작 원리

  • 기본 정책은 체인 머리에서 읽고, 개별 규칙은 번호·조건·판정·카운터를 묶어 해석한다.
  • 빈 테이블, 필터 허용, 서비스 실행은 각각 다른 계층의 상태다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 서버 자신의 443 수신을 허용하는 INPUT 규칙은 같은 호스트를 라우터처럼 통과하는 FORWARD 흐름 허용을 대신하지 않는다.
  • 규칙을 수정한 뒤에도 기존 연결은 이미 만들어진 매핑을 유지할 수 있어 새 연결과 결과가 다를 수 있다.
  • 규칙 카운터 증가가 확인돼도 애플리케이션 응답까지 성공한 것은 아니다. 패킷 도달과 소켓 수신·응답 경로를 분리한다.

05혼동하기 쉬운 점과 확인 기준

  • 규칙의 packet/byte 카운터 증가는 해당 규칙까지 와서 조건에 맞았다는 근거다. 뒤 단계의 drop· 실패·서비스 오류까지 성공했다고 말해 주지는 않는다.
  • 다른 chain·zone·주소 계열로 들어가거나 앞에서 판정됐으면 예상 규칙 카운터가 늘지 않는다. 트래픽이 장비 자체에 오지 않은 경우도 구별해야 한다.
  • 기존 세션에서만 통신이 되고 새 세션이 실패하면 state 또는 신규 허용 규칙의 차이를 의심한다. 전체 초기화는 진단 조회가 아니라 다른 연결도 바꾸는 작업이다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.