2장. nftables 시작하기

nftables 프레임워크는 패킷을 분류하고 iptables,ip6tables,arptables,ebtables, ipset 유틸리티의 후속 조치입니다. 이전의 패킷 필터링 툴에 비해 편의성, 기능 및 성능이 크게 향상되었으며 주요 개선 사항은 다음과 같습니다.

  • 선형 처리 대신 기본 제공 조회 테이블
  • IPv4IPv6 프로토콜 모두를 위한 단일 프레임워크
  • 모든 규칙은 전체 규칙 세트를 가져오기, 업데이트 및 저장하는 대신 원자적으로 적용됩니다.
  • 규칙 세트(nftrace) 및 모니터링 추적 이벤트( nft 툴 내)에서 디버깅 및 추적 지원
  • 프로토콜별 확장 없이 보다 일관되고 컴팩트한 구문
  • 타사 애플리케이션을 위한 Netlink API

nftables 프레임워크는 테이블을 사용하여 체인을 저장합니다. 체인에는 작업을 수행하기 위한 개별 규칙이 포함되어 있습니다. nft 유틸리티는 이전 패킷 필터링 프레임워크의 모든 도구를 대체합니다. libnftnl 라이브러리를 사용하여 libmnl 라이브러리를 통해 nftables Netlink API와 하위 수준의 상호 작용을 수행할 수 있습니다.

규칙 세트 변경의 효과를 표시하려면 nft list ruleset 명령을 사용합니다. 이러한 유틸리티는 테이블, 체인, 규칙, 세트 및 기타 오브젝트를 nftables 규칙 세트에 추가하므로 nft flush ruleset 명령과 같은 nftables 규칙 세트 작업이 iptables 명령을 사용하여 설치된 규칙 세트에 영향을 미칠 수 있습니다.

2.1. iptables에서 nftables로 마이그레이션

방화벽 구성에서 iptables 규칙을 계속 사용하는 경우 iptables 규칙을 nftables 로 마이그레이션할 수 있습니다.

중요

Red Hat Enterprise Linux 9에서는 ipsetiptables-nft 패키지가 더 이상 사용되지 않습니다. 여기에는 iptables,ip6tables,arptables, ebtables 유틸리티와 같은 nft-variants 의 사용 중단이 포함됩니다. 예를 들어 이전 RHEL 버전에서 업그레이드했기 때문에 이러한 툴을 사용하는 경우 nftables 패키지에서 제공하는 nft 명령줄 도구로 마이그레이션할 것을 권장합니다.

2.1.1. firewalld, nftables 또는 iptables를 사용하는 경우

다음은 다음 유틸리티 중 하나를 사용해야 하는 시나리오에 대한 간략한 개요입니다.

  • firewalld: 간단한 방화벽 사용 사례에 firewalld 유틸리티를 사용합니다. 이 유틸리티는 사용하기 쉽고 이러한 시나리오의 일반적인 사용 사례를 다룹니다.
  • nftables: nftables 유틸리티를 사용하여 전체 네트워크에 대해 과 같이 복잡하고 성능이 중요한 방화벽을 설정합니다.
  • iptables: Red Hat Enterprise Linux의 iptables 유틸리티는 레거시 백엔드 대신 nf_tables 커널 API를 사용합니다. nf_tables API는 이전 버전과의 호환성을 제공하므로 iptables 명령을 사용하는 스크립트가 여전히 Red Hat Enterprise Linux에서 작동합니다. 새 방화벽 스크립트의 경우 Red Hat은 nftables 를 사용하도록 권장합니다.
중요

다른 방화벽 관련 서비스(firewalld,nftables 또는 iptables)가 서로 영향을 미치지 않도록 하려면 RHEL 호스트에서 해당 서비스 중 하나만 실행하고 다른 서비스를 비활성화합니다.

2.1.2. iptables 및 ip6tables 규칙 세트를 nftables로 변환

iptables-restore-translateip6tables-restore-translate 유틸리티를 사용하여 iptablesip6tables 규칙 세트를 nftables 로 변환합니다.

사전 요구 사항

  • nftablesiptables 패키지가 설치됩니다.
  • 시스템에는 iptablesip6tables 규칙이 구성되어 있습니다.

절차

  1. iptablesip6tables 규칙을 파일에 작성합니다.

    # iptables-save >/root/iptables.dump
    # ip6tables-save >/root/ip6tables.dump
  2. 덤프 파일을 nftables 명령으로 변환합니다.

    # iptables-restore-translate -f /root/iptables.dump > /etc/nftables/ruleset-migrated-from-iptables.nft
    # ip6tables-restore-translate -f /root/ip6tables.dump > /etc/nftables/ruleset-migrated-from-ip6tables.nft
  3. 및 필요한 경우 생성된 nftables 규칙을 수동으로 업데이트합니다.
  4. 생성된 파일을 로드할 nftables 서비스를 활성화하려면 /etc/sysconfig/nftables.conf 파일에 다음을 추가합니다.

    include "/etc/nftables/ruleset-migrated-from-iptables.nft"
    include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
  5. iptables 서비스를 중지하고 비활성화합니다.

    # systemctl disable --now iptables

    사용자 지정 스크립트를 사용하여 iptables 규칙을 로드한 경우 스크립트가 더 이상 자동으로 시작되지 않고 재부팅하여 모든 테이블을 플러시해야 합니다.

  6. nftables 서비스를 활성화하고 시작합니다.

    # systemctl enable --now nftables

검증

  • nftables 규칙 세트를 표시합니다.

    # nft list ruleset

2.1.3. 단일 iptables 및 ip6tables 규칙을 nftables로 변환

Red Hat Enterprise Linux는 iptables-translateip6tables-translate 유틸리티를 제공하여 iptables 또는 ip6tables 규칙을 nftables 에 해당하는 규칙으로 변환합니다.

사전 요구 사항

  • nftables 패키지가 설치되어 있어야 합니다.

절차

  • iptables 또는 ip6tables 대신 iptables-translate 또는 ip6tables-translate 유틸리티를 사용하여 해당 nftables 규칙을 표시합니다. 예를 들면 다음과 같습니다.

    # iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT
    nft add rule ip filter INPUT ip saddr 192.0.2.0/24 counter accept

    일부 확장 기능에는 해당 지원이 누락되어 있는 경우도 있습니다. 이 경우 유틸리티는 # 기호가 앞에 오는 untranslated 규칙을 출력합니다. 예를 들면 다음과 같습니다.

    # iptables-translate -A INPUT -j CHECKSUM --checksum-fill
    nft # -A INPUT -j CHECKSUM --checksum-fill

추가 리소스

  • iptables-translate --help

2.1.4. 공통 iptables 및 nftables 명령 비교

다음은 일반적인 iptablesnftables 명령을 비교한 것입니다.

  • 모든 규칙 나열:

    iptablesnftables

    iptables-save

    nft list ruleset

  • 특정 테이블 및 체인 나열:

    iptablesnftables

    iptables -L

    nft list table ip filter

    iptables -L INPUT

    nft list chain ip filter INPUT

    iptables -t nat -L PREROUTING

    nft list chain ipat PREROUTING

    nft 명령은 테이블 및 체인을 미리 만들지 않습니다. 사용자가 수동으로 생성한 경우에만 존재합니다.

    firewalld를 통해 생성된 규칙 나열:

    # nft list table inet firewalld
    # nft list table ip firewalld
    # nft list table ip6 firewalld