8.2. iptables에서 nftables로 마이그레이션
방화벽 구성에서 iptables
규칙을 계속 사용하는 경우 iptables
규칙을 nftables
로 마이그레이션할 수 있습니다.
8.2.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 호스트에서 해당 서비스 중 하나만 실행하고 다른 서비스를 비활성화합니다.
8.2.2. nftables 프레임워크의 개념
iptables
프레임워크와 비교하여 nftables
는 보다 현대적이고 효율적이며 유연한 대안을 제공합니다. iptables
에 대한 고급 기능과 개선 사항을 제공하는 몇 가지 개념과 기능이 있습니다. 이러한 개선 사항을 통해 규칙 관리가 간소화되고 성능이 향상되어 nftables
를 복잡하고 고성능 네트워킹 환경의 최신 대안으로 만들 수 있습니다.
nftables
프레임워크에는 다음 구성 요소가 포함됩니다.
- 테이블 및 네임스페이스
-
nftables
에서 테이블은 관련 방화벽 체인, 세트, 흐름 테이블 및 기타 오브젝트를 함께 그룹화하는 조직 단위 또는 네임스페이스를 나타냅니다.nftables
에서는 테이블이 방화벽 규칙 및 관련 구성 요소를 구성하는 보다 유연한 방법을 제공합니다.iptables
에서는 테이블이 특정 목적에 따라 보다 효율적으로 정의되었습니다. - 테이블 제품군
-
nftables
의 각 테이블은 특정 제품군(ip
,ip6
,inet
,arp
,bridge
또는netdev
)과 연결되어 있습니다. 이 연결은 테이블이 처리할 수 있는 패킷을 결정합니다. 예를 들어ip
제품군의 테이블은 IPv4 패킷만 처리합니다. 반면inet
은 테이블 가정의 특별한 경우입니다. IPv4 및 IPv6 패킷을 모두 처리할 수 있으므로 프로토콜 간에 통합된 접근 방식을 제공합니다. 특수 테이블 제품군의 또 다른 경우는netdev
입니다. 네트워크 장치에 직접 적용되는 규칙에 사용되어 장치 수준에서 필터링이 가능하기 때문입니다. - 기본 체인
nftables
의 기본 체인은 패킷 처리 파이프라인에서 구성 가능한 진입점으로, 사용자가 다음을 지정할 수 있습니다.- 체인의 유형 (예: "filter"
- 패킷 처리 경로의 후크 지점(예: "input", "output", "forward")
- 체인의 우선순위
이러한 유연성을 통해 규칙이 네트워크 스택을 통과할 때 패킷에 적용되는 시기와 방법을 정확하게 제어할 수 있습니다. 체인의 특수 사례는 패킷 헤더를 기반으로 커널에 의해 이루어진 라우팅 결정에 영향을 미치는 데 사용되는
경로
체인입니다.- 규칙 처리를 위한 가상 머신
-
nftables
프레임워크는 내부 가상 시스템을 사용하여 규칙을 처리합니다. 이 가상 머신은 어셈블리 언어 작업과 유사한 명령을 실행합니다(기록으로 데이터를 로드하고 비교 수행 등). 이러한 메커니즘은 매우 유연하고 효율적인 규칙 처리를 허용합니다.
nftables
의 개선 사항은 해당 가상 머신에 대한 새로운 지침으로 도입될 수 있습니다. 일반적으로 새 커널 모듈과 libnftnl
라이브러리 및 nft
명령줄 유틸리티를 업데이트해야 합니다.
또는 커널 수정 없이도 기존 지침을 혁신적으로 결합하여 새로운 기능을 도입할 수 있습니다. nftables
규칙의 구문은 기본 가상 시스템의 유연성을 반영합니다. 예를 들어 meta 마크가 tcp dport 맵을 설정하는 규칙 { 22: 1, 80: 2 }
는 TCP 대상 포트가 22인 경우 패킷의 방화벽 표시를 1로 설정하고 포트가 80인 경우 2로 설정합니다. 이것은 복잡한 논리를 간결하게 표현 할 수있는 방법을 보여줍니다.
- 학습 및 개선 사항
-
nftables
프레임워크는 IP 주소, 포트, 기타 데이터 유형 및 가장 중요한 조합에서iptables
에서 사용되는ipset
유틸리티의 기능을 통합하고 확장합니다. 이러한 통합을 통해nftables
내에서 직접 대규모의 동적 데이터 세트를 쉽게 관리할 수 있습니다. 다음으로nftables
는 모든 데이터 유형에 대한 여러 값 또는 범위를 기반으로 일치하는 패킷을 기본적으로 지원하므로 복잡한 필터링 요구 사항을 처리하는 기능이 향상됩니다.nftables
를 사용하면 패킷 내의 모든 필드를 조작할 수 있습니다.
nftables
에서 세트는 이름이 지정되거나 익명일 수 있습니다. 명명된 세트는 여러 규칙에서 참조하고 동적으로 수정할 수 있습니다. 익명 세트는 규칙 내에서 인라인으로 정의되며 변경할 수 없습니다. 세트에는 다양한 유형의 조합(예: IP 주소 및 포트 번호 쌍)이 포함된 요소가 포함될 수 있습니다. 이 기능을 사용하면 복잡한 기준과 일치하는 유연성이 향상됩니다. 세트를 관리하기 위해 커널은 특정 요구 사항(성능, 메모리 효율성 등)에 따라 가장 적절한 백엔드를 선택할 수 있습니다. 세트는 키-값 쌍이 있는 맵으로 기능할 수도 있습니다. value 부분은 데이터 포인트(패치 헤더에 쓸 값) 또는 이동할 정성 또는 체인으로 사용할 수 있습니다. 이를 통해 "verdict maps"라는 복잡하고 동적인 규칙 동작을 사용할 수 있습니다.
- 유연한 규칙 형식
-
nftables
규칙의 구조는 간단합니다. 조건 및 작업은 왼쪽에서 오른쪽으로 순차적으로 적용됩니다. 이 직관적인 형식을 사용하면 규칙을 만들고 문제를 해결할 수 있습니다.
규칙의 조건은 논리적으로( AND 연산자를 사용하여) 함께 연결되므로 규칙이 일치하도록 모든 조건을 "true"로 평가해야 합니다. 조건이 하나라도 실패하면 평가가 다음 규칙으로 이동합니다.
nftables
의 작업은 삭제
또는 수락
과 같은 최종 작업이 될 수 있으므로 패킷에 대한 추가 규칙 처리를 중지합니다. 카운터 로그 메타 마크 세트 0x3
과 같은 터미널이 아닌 작업은 특정 작업(패킷, 로깅, 마크 설정 등)을 수행하지만 후속 규칙을 평가할 수 있습니다.
추가 리소스
8.2.3. 더 이상 사용되지 않는 iptables 프레임워크의 개념
적극적으로 유지 관리되는 nftables
프레임워크와 유사하게 더 이상 사용되지 않는 iptables
프레임워크를 사용하면 다양한 패킷 필터링 작업, 로깅 및 감사, NAT 관련 구성 작업 등을 수행할 수 있습니다.
iptables
프레임워크는 각 테이블이 특정 목적을 위해 설계된 여러 테이블로 구성되어 있습니다.
filter
- 기본 테이블은 일반 패킷 필터링을 보장합니다.
nat
- NAT(Network Address Translation)의 경우 패킷의 소스 및 대상 주소 변경을 포함합니다.
mangle
- 특정 패킷 변경을 위해 고급 라우팅 결정에 대해 패킷 헤더를 수정할 수 있습니다.
raw
- 연결 추적 전에 수행해야 하는 구성의 경우
이러한 테이블은 별도의 커널 모듈로 구현되며, 각 테이블은 INPUT
,OUTPUT
, FORWARD
와 같은 고정된 내장 체인 세트를 제공합니다. 체인은 패킷이 평가되는 일련의 규칙입니다. 이러한 체인은 커널의 패킷 처리 흐름의 특정 지점에 연결됩니다. 체인은 여러 테이블 간에 이름이 동일하지만 실행 순서는 해당 후크 우선 순위에 따라 결정됩니다. 우선순위는 커널에서 내부적으로 관리되므로 규칙이 올바른 순서로 적용되는지 확인합니다.
원래 iptables
는 IPv4 트래픽을 처리하도록 설계되었습니다. 그러나 IPv6 프로토콜을 도입하면 비슷한 기능( iptables
)을 제공하고 사용자가 IPv6 패킷에 대한 방화벽 규칙을 생성하고 관리할 수 있도록 ip6tables
유틸리티를 도입해야 합니다. 동일한 논리를 통해 arptables
유틸리티는 ARP(Address Resolution Protocol)를 처리하기 위해 생성되었으며 ebtables
유틸리티는 이더넷 브리징 프레임을 처리하기 위해 개발되었습니다. 이러한 툴은 iptables
의 패킷 필터링 기능을 다양한 네트워크 프로토콜에 적용하고 포괄적인 네트워크 범위를 제공할 수 있도록 합니다.
iptables
의 기능을 개선하기 위해 확장 기능을 개발하기 시작했습니다. 기능 확장은 일반적으로 사용자 공간 동적 공유 오브젝트(DSO)와 페어링되는 커널 모듈로 구현됩니다. 확장 기능으로 방화벽 규칙에 더 정교한 작업을 수행할 수 있는 "matches" 및 "대상"이 도입되었습니다. 확장 기능을 사용하면 복잡한 일치 및 대상을 활성화할 수 있습니다. 예를 들어 특정 계층 4 프로토콜 헤더 값을 일치시키거나 조작하고, rate-limiting을 수행하고 할당량을 적용할 수 있습니다. 일부 확장 기능은 기본 iptables
구문의 제한 사항을 해결하도록 설계되었습니다(예: "multiport" 일치 확장). 이 확장을 사용하면 단일 규칙이 일치되지 않은 여러 포트를 일치시켜 규칙 정의를 단순화하고 필요한 개별 규칙 수를 줄일 수 있습니다.
ipset
은 iptables
에 대한 특별한 종류의 기능 확장입니다. iptables
와 함께 사용하여 IP 주소, 포트 번호 및 패킷과 일치시킬 수 있는 기타 네트워크 관련 요소 컬렉션을 생성하는 커널 수준 데이터 구조입니다. 이러한 세트는 방화벽 규칙을 작성하고, 작성하고, 관리하는 프로세스를 크게 간소화, 최적화 및 가속화합니다.
추가 리소스
-
iptables(8)
도움말 페이지
8.2.4. iptables 및 ip6tables 규칙 세트를 nftables로 변환
iptables-restore-translate
및 ip6tables-restore-translate
유틸리티를 사용하여 iptables
및 ip6tables
규칙 세트를 nftables
로 변환합니다.
사전 요구 사항
-
nftables
및iptables
패키지가 설치됩니다. -
시스템에는
iptables
및ip6tables
규칙이 구성되어 있습니다.
절차
iptables
및ip6tables
규칙을 파일에 작성합니다.# iptables-save >/root/iptables.dump # ip6tables-save >/root/ip6tables.dump
덤프 파일을
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
-
및 필요한 경우 생성된
nftables
규칙을 수동으로 업데이트합니다. 생성된 파일을 로드할
nftables
서비스를 활성화하려면/etc/sysconfig/nftables.conf
파일에 다음을 추가합니다.include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
iptables
서비스를 중지하고 비활성화합니다.# systemctl disable --now iptables
사용자 지정 스크립트를 사용하여
iptables
규칙을 로드한 경우 스크립트가 더 이상 자동으로 시작되지 않고 재부팅하여 모든 테이블을 플러시해야 합니다.nftables
서비스를 활성화하고 시작합니다.# systemctl enable --now nftables
검증
nftables
규칙 세트를 표시합니다.# nft list ruleset
추가 리소스
8.2.5. 단일 iptables 및 ip6tables 규칙을 nftables로 변환
Red Hat Enterprise Linux는 iptables-translate
및 ip6tables-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
8.2.6. 일반적인 iptables 및 nftables 명령 비교
다음은 일반적인 iptables
및 nftables
명령을 비교한 것입니다.
모든 규칙 나열:
iptables nftables iptables-save
nft list ruleset
특정 테이블 및 체인 나열:
iptables nftables 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