23.6. nftables 시작하기
시나리오가 firewalld 에서 다루는 일반적인 패킷 필터링 사례에 속하지 않거나 규칙을 완전히 제어하려는 경우 nftables 프레임워크를 사용할 수 있습니다.
nftables 프레임워크는 패킷을 분류하고 iptables,ip6tables,arptables,ebtables 및 ipset 유틸리티의 후속 조치입니다. 이전의 패킷 필터링 툴에 비해 편의성, 기능 및 성능이 크게 향상되었으며 주요 개선 사항은 다음과 같습니다.
- 선형 처리 대신 기본 제공 조회 테이블
-
IPv4및IPv6프로토콜 모두를 위한 단일 프레임워크 - 전체 규칙 세트를 가져오고, 업데이트하고, 저장하는 대신 트랜잭션을 통해 배치된 커널 규칙 세트 업데이트
-
규칙 세트(
nftrace) 및 모니터링 추적 이벤트(nft툴에서) 디버깅 및 추적 지원 - 프로토콜별 확장 없이 보다 일관되고 컴팩트한 구문
- 타사 애플리케이션을 위한 Netlink API
nftables 프레임워크는 테이블을 사용하여 체인을 저장합니다. 체인에는 작업을 수행하기 위한 개별 규칙이 포함되어 있습니다. nft 유틸리티는 이전 패킷 필터링 프레임워크의 모든 도구를 대체합니다. libnftables 라이브러리를 사용하여 libnftnl 라이브러리를 통해 nftables Netlink API와 낮은 수준의 상호 작용을 수행할 수 있습니다.
규칙 세트 변경의 효과를 표시하려면 nft list ruleset 명령을 사용합니다. 커널 규칙 세트를 지우려면 nft flush ruleset 명령을 사용합니다. 이는 동일한 커널 인프라를 사용하므로 iptables-nft 명령으로 설치한 규칙 세트에도 영향을 미칠 수 있습니다.
23.6.1. nftables 테이블, 체인 및 규칙 생성 및 관리 링크 복사링크가 클립보드에 복사되었습니다!
nftables 규칙 세트를 표시하고 관리할 수 있습니다.
23.6.1.1. nftables 테이블 기본 링크 복사링크가 클립보드에 복사되었습니다!
nftables 의 테이블은 체인, 규칙, 세트 및 기타 오브젝트 컬렉션을 포함하는 네임스페이스입니다.
각 테이블에는 주소 제품군이 할당되어 있어야 합니다. 주소 family는 이 테이블이 처리하는 패킷 유형을 정의합니다. 테이블을 만들 때 다음 주소 제품군 중 하나를 설정할 수 있습니다.
-
ip: 일치하는 IPv4 패킷 만 일치합니다. 주소 제품군을 지정하지 않으면 기본값입니다. -
ip6: IPv6 패킷 만 일치합니다. -
inet: IPv4 및 IPv6 패킷과 일치합니다. -
ARP: IPv4 ARP(Address Resolution Protocol) 패킷과 일치합니다. -
브릿지: 브리지 장치를 통과하는 패킷과 일치합니다. -
netdev: 수신에서 패킷 일치.
테이블을 추가하려면 사용할 형식은 방화벽 스크립트에 따라 다릅니다.
기본 구문 스크립트의 경우 다음을 사용합니다.
table <table_address_family> <table_name> { }table <table_address_family> <table_name> { }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉘 스크립트에서는 다음을 사용합니다.
nft add table <table_address_family> <table_name>
nft add table <table_address_family> <table_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.1.2. nftables 체인의 기본 사항 링크 복사링크가 클립보드에 복사되었습니다!
테이블은 체인으로 구성되며, 이 체인은 규칙용 컨테이너입니다. 다음 두 가지 규칙 유형이 있습니다.
- 기본 체인: 기본 체인을 네트워킹 스택의 패킷 진입점으로 사용할 수 있습니다.
-
일반 체인: 규칙을 더 잘 구성하기 위해 일반 체인을
이동대상으로 사용할 수 있습니다.
테이블에 기본 체인을 추가하려면 사용할 형식은 방화벽 스크립트에 따라 다릅니다.
기본 구문 스크립트의 경우 다음을 사용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉘 스크립트에서는 다음을 사용합니다.
nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉘이 명령 끝으로 해석되지 않도록 하려면 \ 이스케이프 문자 앞에
\이스케이프 문자를 배치합니다.
두 예에서는 기본 체인을 생성합니다. 일반 체인 을 생성하려면 중괄호에서 매개 변수를 설정하지 마십시오.
체인 유형
다음은 체인 유형 및 제품군과 후크를 사용할 수 있는 개요입니다.
| 유형 | 주소 제품군 | 후크 | 설명 |
|---|---|---|---|
|
| 모두 | 모두 | 표준 체인 유형 |
|
|
IP , |
| 이 유형의 체인은 연결 추적 항목을 기반으로 기본 주소 변환을 수행합니다. 첫 번째 패킷만 이 체인 유형을 통과합니다. |
|
|
|
| 이 체인 유형을 트래버스하는 수락된 패킷은 IP 헤더의 관련 부분이 변경된 경우 새로운 경로 조회를 유발합니다. |
체인 우선순위
priority 매개변수는 패킷이 동일한 후크 값을 사용하는 체인을 트래버스하는 순서를 지정합니다. 이 매개변수를 정수 값으로 설정하거나 표준 우선순위 이름을 사용할 수 있습니다.
다음 매트릭스는 표준 우선 순위 이름과 해당 숫자 값에 대한 개요와 함께 사용할 수 있는 제품군과 후크를 처리합니다.
| 텍스트 값 | 숫자 값 | 주소 제품군 | 후크 |
|---|---|---|---|
|
|
|
IP , | 모두 |
|
|
|
IP , | 모두 |
|
|
|
IP , |
|
|
|
|
| |
|
|
|
IP , | 모두 |
|
|
| 모두 | |
|
|
|
IP , | 모두 |
|
|
|
IP , |
|
|
|
|
| |
|
|
|
|
|
체인 정책
체인 정책은 이 체인의 규칙이 작업을 지정하지 않는 경우 nftables 가 패킷을 수락하거나 삭제해야 하는지 여부를 정의합니다. 체인에서 다음 정책 중 하나를 설정할 수 있습니다.
-
수락(기본값) -
drop
23.6.1.3. nftables 규칙의 기본 사항 링크 복사링크가 클립보드에 복사되었습니다!
규칙은 이 규칙을 포함하는 체인을 전달하는 패킷에서 수행할 작업을 정의합니다. 규칙에 일치하는 표현식도 포함된 경우 nftables 는 모든 이전 표현식이 적용되는 경우에만 작업을 수행합니다.
체인에 규칙을 추가하려면 사용할 형식은 방화벽 스크립트에 따라 다릅니다.
기본 구문 스크립트의 경우 다음을 사용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉘 스크립트에서는 다음을 사용합니다.
nft add rule <table_address_family> <table_name> <chain_name> <rule>
nft add rule <table_address_family> <table_name> <chain_name> <rule>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 쉘 명령은 체인 끝에 새 규칙을 추가합니다. 체인 시작 부분에 규칙을 추가하려면
nft add대신nft insert명령을 사용하십시오.
23.6.1.4. nft 명령을 사용하여 테이블, 체인 및 규칙 관리 링크 복사링크가 클립보드에 복사되었습니다!
명령줄 또는 쉘 스크립트에서 nftables 방화벽을 관리하려면 nft 유틸리티를 사용합니다.
이 절차의 명령은 일반적인 워크플로우를 나타내지 않으며 최적화되지 않습니다. 이 절차에서는 일반적으로 nft 명령을 사용하여 테이블, 체인 및 규칙을 관리하는 방법을 보여줍니다.
절차
테이블이 IPv4 및 IPv6 패킷을 모두 처리할 수 있도록
inet주소 Family를 사용하여nftables_svc라는 테이블을 만듭니다.nft add table inet nftables_svc
# nft add table inet nftables_svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 들어오는 네트워크 트래픽을 처리하는
INPUT라는 기본 체인을inet nftables_svc테이블에 추가합니다.nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }# nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉘이 명령 마지막으로 해석되지 않도록 하려면
\문자를 사용하여 together을 이스케이프합니다.INPUT체인에 규칙을 추가합니다. 예를 들어 포트 22 및 443에서 수신되는 TCP 트래픽을 허용하고INPUT체인의 마지막 규칙으로 IMP(Internet Control Message Protocol) 포트에 연결할 수 없는 다른 트래픽을 거부합니다.nft add rule inet nftables_svc INPUT tcp dport 22 accept nft add rule inet nftables_svc INPUT tcp dport 443 accept nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachable
# nft add rule inet nftables_svc INPUT tcp dport 22 accept # nft add rule inet nftables_svc INPUT tcp dport 443 accept # nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 표시된 대로
nft add 규칙명령을 입력하면nft는 명령을 실행할 때와 동일한 순서로 규칙을 추가합니다.처리를 포함한 현재 규칙 세트를 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow handle 3을 사용하여 기존 규칙 앞에 규칙을 삽입합니다. 예를 들어 포트 636에서 TCP 트래픽을 허용하는 규칙을 삽입하려면 다음을 입력합니다.
nft insert rule inet nftables_svc INPUT position 3 tcp dport 636 accept
# nft insert rule inet nftables_svc INPUT position 3 tcp dport 636 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow handle 3을 사용하여 기존 규칙 뒤에 규칙을 추가합니다. 예를 들어 포트 80에서 TCP 트래픽을 허용하는 규칙을 삽입하려면 다음을 입력합니다.
nft add rule inet nftables_svc INPUT position 3 tcp dport 80 accept
# nft add rule inet nftables_svc INPUT position 3 tcp dport 80 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow handles를 사용하여 규칙 세트를 다시 표시합니다. 나중에 추가된 규칙이 지정된 위치에 추가되었는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow handle 6을 사용하여 규칙을 제거합니다.
nft delete rule inet nftables_svc INPUT handle 6
# nft delete rule inet nftables_svc INPUT handle 6Copy to Clipboard Copied! Toggle word wrap Toggle overflow 규칙을 제거하려면 처리를 지정해야 합니다.
규칙 세트를 표시하고 제거된 규칙이 더 이상 존재하지 않는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow INPUT체인에서 나머지 모든 규칙을 제거하십시오.nft flush chain inet nftables_svc INPUT
# nft flush chain inet nftables_svc INPUTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 규칙 세트를 표시하고
INPUT체인이 비어 있는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow INPUT체인을 삭제합니다.nft delete chain inet nftables_svc INPUT
# nft delete chain inet nftables_svc INPUTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 또한 이 명령을 사용하여 규칙이 포함된 체인을 삭제할 수도 있습니다.
규칙 세트를 표시하고
INPUT체인이 삭제되었는지 확인합니다.nft list table inet nftables_svc table inet nftables_svc { }# nft list table inet nftables_svc table inet nftables_svc { }Copy to Clipboard Copied! Toggle word wrap Toggle overflow nftables_svc테이블을 삭제합니다.nft delete table inet nftables_svc
# nft delete table inet nftables_svcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 명령을 사용하여 체인이 계속 포함된 테이블을 삭제할 수도 있습니다.
참고전체 규칙 세트를 삭제하려면 별도의 명령에서 모든 규칙, 체인 및 테이블을 수동으로 삭제하는 대신
nft flush ruleset명령을 사용합니다.
23.6.2. iptables에서 nftables로 마이그레이션 링크 복사링크가 클립보드에 복사되었습니다!
방화벽 구성이 여전히 iptables 규칙을 사용하는 경우 iptables 규칙을 nftables 로 마이그레이션할 수 있습니다.
23.6.2.1. firewalld, nftables 또는 iptables 사용 시기 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 8에서는 시나리오에 따라 다음 패킷 필터링 유틸리티를 사용할 수 있습니다.
-
firewalld:firewalld유틸리티는 일반적인 사용 사례에 대한 방화벽 구성을 간소화합니다. -
nftables:nftables유틸리티를 사용하여 전체 네트워크에 대해 복잡하고 성능에 중요한 방화벽을 설정합니다. -
iptables: Red Hat Enterprise Linux의iptables유틸리티는레거시백엔드 대신nf_tables커널 API를 사용합니다.nf_tablesAPI는 이전 버전과의 호환성을 제공하므로iptables명령을 사용하는 스크립트는 Red Hat Enterprise Linux에서 계속 작동합니다. 새 방화벽 스크립트의 경우nftables를 사용합니다.
다른 방화벽 관련 서비스(firewalld,nftables 또는 iptables)가 서로 영향을 미치지 않도록 하려면 RHEL 호스트에서 해당 서비스 중 하나만 실행하고 다른 서비스를 비활성화합니다.
23.6.2.2. nftables 프레임워크의 개념 링크 복사링크가 클립보드에 복사되었습니다!
iptables 프레임워크와 비교하여 nftables 는 보다 현대적이고 효율적이며 유연한 대안을 제공합니다. nftables 프레임워크는 iptables 를 통해 고급 기능과 개선 사항을 제공하여 규칙 관리를 단순화하고 성능을 향상시킵니다. 이로 인해 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과 같은 터미널이 아닌 작업은 특정 작업(패킷, 로깅, 마크 설정 등)을 수행하지만 후속 규칙을 평가할 수 있습니다.
23.6.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 주소, 포트 번호 및 패킷과 일치시킬 수 있는 기타 네트워크 관련 요소 컬렉션을 생성하는 커널 수준 데이터 구조입니다. 이러한 세트는 방화벽 규칙을 작성하고, 작성하고, 관리하는 프로세스를 크게 간소화, 최적화 및 가속화합니다.
23.6.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
# iptables-save >/root/iptables.dump # ip6tables-save >/root/ip6tables.dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 덤프 파일을
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
# 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.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
필요한 경우 생성된
nftables규칙을 수동으로 업데이트합니다. nftables서비스가 생성된 파일을 로드하도록 활성화하려면/etc/sysconfig/nftables.conf파일에 다음을 추가합니다.include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow iptables서비스를 중지하고 비활성화합니다.systemctl disable --now iptables
# systemctl disable --now iptablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 지정 스크립트를 사용하여
iptables규칙을 로드한 경우 스크립트가 더 이상 자동으로 시작되지 않고 재부팅되어 모든 테이블을 플러시합니다.nftables서비스를 활성화하고 시작합니다.systemctl enable --now nftables
# systemctl enable --now nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
nftables규칙 세트를 표시합니다.nft list ruleset
# nft list rulesetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.2.5. 단일 iptables 및 ip6tables 규칙을 nftables로 변환 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat Enterprise Linux는 iptables 또는 ip6tables 규칙을 nftables 에 해당하는 규칙으로 변환하는 iptables-translate 및 ip6tables-translate 유틸리티를 제공합니다.
사전 요구 사항
-
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
# 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 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 일부 확장 기능에는 해당 지원이 누락되어 있는 경우도 있습니다. 이 경우 유틸리티는
#기호로 접두사가 지정된 번역되지 않은 규칙을 출력합니다. 예를 들면 다음과 같습니다.iptables-translate -A INPUT -j CHECKSUM --checksum-fill nft # -A INPUT -j CHECKSUM --checksum-fill
# iptables-translate -A INPUT -j CHECKSUM --checksum-fill nft # -A INPUT -j CHECKSUM --checksum-fillCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.2.6. 일반적인 iptables 및 nftables 명령 비교 링크 복사링크가 클립보드에 복사되었습니다!
다음은 일반적인 iptables 및 nftables 명령을 비교합니다.
모든 규칙을 나열합니다.
Expand iptables nftables iptables-savenft 목록 규칙 세트특정 테이블 및 체인을 나열:
Expand iptables nftables iptables -Lnft 목록 테이블 IP 필터iptables -L INPUTnft 목록 체인 IP 필터 INPUTiptables -t nat -L PREROUTINGnft 목록 체인 IP nat PREROUTINGnft명령은 테이블 및 체인을 사전 생성하지 않습니다. 사용자가 수동으로 생성한 경우에만 존재합니다.firewalld에서 생성한 규칙 나열:
nft list table inet firewalld nft list table ip firewalld nft list table ip6 firewalld
# nft list table inet firewalld # nft list table ip firewalld # nft list table ip6 firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3. nftables를 사용하여 NAT 구성 링크 복사링크가 클립보드에 복사되었습니다!
nftables 에서는 다음 NAT(네트워크 주소 변환) 유형을 구성할 수 있습니다.
- masquerading
- 소스 NAT(SNAT)
- 대상 NAT(DNAT)
- 리디렉션
iifname 및 oifname 매개변수에만 실제 인터페이스 이름을 사용할 수 있으며 대체 이름(altname)은 지원되지 않습니다.
23.6.3.1. NAT 유형 링크 복사링크가 클립보드에 복사되었습니다!
이는 다른 NAT(네트워크 주소 변환) 유형입니다.
- masquerading 및 source NAT(SNAT)
이러한 NAT 유형 중 하나를 사용하여 패킷의 소스 IP 주소를 변경합니다. 예를 들어, 인터넷 서비스 공급자(ISP)는
10.0.0.0/8과 같은 개인 IP 범위를 라우팅하지 않습니다. 네트워크에서 개인 IP 범위를 사용하고 사용자가 인터넷의 서버에 연결할 수 있어야 하는 경우 이러한 범위의 패킷의 소스 IP 주소를 공용 IP 주소에 매핑합니다.마스커레이딩과 SNAT는 서로 매우 유사합니다. 차이점은 다음과 같습니다.
- 마스커레이딩은 발신 인터페이스의 IP 주소를 자동으로 사용합니다. 따라서 발신 인터페이스에서 동적 IP 주소를 사용하는 경우 masquerading을 사용합니다.
- SNAT는 패킷의 소스 IP 주소를 지정된 IP로 설정하고 발신 인터페이스의 IP를 동적으로 검색하지 않습니다. 따라서 SNAT는 masquerading보다 빠릅니다. 발신 인터페이스에서 고정 IP 주소를 사용하는 경우 SNAT를 사용합니다.
- 대상 NAT(DNAT)
- 이 NAT 유형을 사용하여 들어오는 패킷의 대상 주소와 포트를 다시 작성합니다. 예를 들어 웹 서버가 개인 IP 범위의 IP 주소를 사용하므로 인터넷에서 직접 액세스할 수 없는 경우 라우터에 DNAT 규칙을 설정하여 수신 트래픽을 이 서버로 리디렉션할 수 있습니다.
- 리디렉션
- 이 유형은 체인 후크에 따라 패킷을 로컬 시스템으로 리디렉션하는 특수한 DNAT의 경우입니다. 예를 들어 서비스가 표준 포트와 다른 포트에서 실행되는 경우 표준 포트에서 들어오는 트래픽을 이 특정 포트로 리디렉션할 수 있습니다.
23.6.3.2. nftables를 사용하여 마스커레이딩 구성 링크 복사링크가 클립보드에 복사되었습니다!
마스커레이딩을 사용하면 라우터에서 인터페이스를 통해 인터페이스의 IP 주소로 전송된 패킷의 소스 IP를 동적으로 변경할 수 있습니다. 즉, 인터페이스가 새 IP가 할당되면 nftables 는 소스 IP를 교체할 때 새 IP를 자동으로 사용합니다.
ens3 인터페이스를 통해 호스트를 나가는 패킷의 소스 IP를 ens3 에 설정된 IP로 바꿉니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 표에
다음 체인을추가합니다.nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요prerouting체인에 규칙을 추가하지 않더라도nftables프레임워크에는 수신되는 패킷 응답과 일치하도록 이 체인이 필요합니다.쉘이 음수 우선순위 값을
nft명령의 옵션으로 해석하지 못하도록--옵션을nft명령에 전달해야 합니다.ens3인터페이스에서 발신 패킷과 일치하는postrouting체인에 규칙을 추가합니다.nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3.3. nftables를 사용하여 소스 NAT 구성 링크 복사링크가 클립보드에 복사되었습니다!
라우터에서 소스 NAT(SNAT)를 사용하면 인터페이스를 통해 전송된 패킷의 IP를 특정 IP 주소로 변경할 수 있습니다. 그런 다음 라우터는 발신 패킷의 소스 IP를 대체합니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 표에
다음 체인을추가합니다.nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요postrouting체인에 규칙을 추가하지 않더라도nftables프레임워크에는 이 체인이 발신 패킷 응답과 일치해야 합니다.쉘이 음수 우선순위 값을
nft명령의 옵션으로 해석하지 못하도록--옵션을nft명령에 전달해야 합니다.ens3을 통해 발신 패킷의 소스 IP를192.0.2.1로 대체하는postrouting체인에 규칙을 추가합니다.nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
# nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3.4. nftables를 사용하여 대상 NAT 구성 링크 복사링크가 클립보드에 복사되었습니다!
대상 NAT(DNAT)를 사용하면 라우터의 트래픽을 인터넷에서 직접 액세스할 수 없는 호스트로 리디렉션할 수 있습니다.
예를 들어, DNAT를 사용하면 라우터에서 포트 80 및 443 으로 전송되는 들어오는 트래픽을 IP 주소 192.0.2.1 이 있는 웹 서버로 리디렉션합니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 표에
다음 체인을추가합니다.nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요postrouting체인에 규칙을 추가하지 않더라도nftables프레임워크에는 이 체인이 발신 패킷 응답과 일치해야 합니다.쉘이 음수 우선순위 값을
nft명령의 옵션으로 해석하지 못하도록--옵션을nft명령에 전달해야 합니다.라우터의
ens3인터페이스에서 IP 주소192.0.2.1을 사용하여 웹 서버로 들어오는 트래픽을 포트80및443으로 리디렉션하는이전체인에 규칙을 추가합니다.nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 환경에 따라 SNAT 또는 마스커레이딩 규칙을 추가하여 웹 서버에서 발신자로 반환되는 패킷의 소스 주소를 변경합니다.
ens3인터페이스에서 동적 IP 주소를 사용하는 경우 마스커레이딩 규칙을 추가합니다.nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow ens3인터페이스에서 고정 IP 주소를 사용하는 경우 SNAT 규칙을 추가합니다. 예를 들어ens3에서198.51.100.1IP 주소를 사용하는 경우 다음을 실행합니다.nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
# nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
패킷 전달을 활성화합니다.
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.3.5. nftables를 사용하여 리디렉션 구성 링크 복사링크가 클립보드에 복사되었습니다!
리디렉션 기능은 체인 후크에 따라 패킷을 로컬 시스템으로 리디렉션하는 대상 DNAT(네트워크 주소 변환)의 특수한 사례입니다.
예를 들어 로컬 호스트의 포트 22 로 전송된 수신 및 전달된 트래픽을 포트 2222 로 리디렉션할 수 있습니다.
프로세스
테이블을 생성합니다.
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow 테이블에
사전체인을 추가합니다.nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 쉘이 음수 우선순위 값을
nft명령의 옵션으로 해석하지 못하도록--옵션을nft명령에 전달해야 합니다.포트 22에서 들어오는 트래픽을 포트
22로 리디렉션하는사전아웃 체인에 규칙을 추가합니다.nft add rule nat prerouting tcp dport 22 redirect to 2222
# nft add rule nat prerouting tcp dport 22 redirect to 2222Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.4. nftables 스크립트 작성 및 실행 링크 복사링크가 클립보드에 복사되었습니다!
nftables 프레임워크를 사용할 때의 주요 이점은 스크립트 실행이 atomic이라는 것입니다. 즉, 시스템이 전체 스크립트를 적용하거나 오류가 발생하면 실행을 방지합니다. 이렇게 하면 방화벽이 항상 일관된 상태로 유지됩니다.
또한 nftables 스크립트 환경을 사용하면 다음을 수행할 수 있습니다.
- 댓글 추가
- 변수 정의
- 기타 규칙 세트 파일 포함
nftables 패키지를 설치하면 Red Hat Enterprise Linux가 /etc/nftables/ 디렉터리에 *.nft 스크립트가 자동으로 생성됩니다. 이러한 스크립트에는 서로 다른 용도로 테이블 및 빈 체인을 만드는 명령이 포함되어 있습니다.
23.6.4.1. 지원되는 nftables 스크립트 형식 링크 복사링크가 클립보드에 복사되었습니다!
nftables 스크립팅 환경에서 다음 형식으로 스크립트를 작성할 수 있습니다.
nft list ruleset명령과 동일한 형식은 규칙 세트를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow nft명령과 동일한 구문:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.4.2. nftables 스크립트 실행 링크 복사링크가 클립보드에 복사되었습니다!
nft 유틸리티에 전달하거나 스크립트를 직접 실행하여 nftables 스크립트를 실행할 수 있습니다.
프로세스
nft유틸리티에 전달하여nftables스크립트를 실행하려면 다음을 입력합니다.nft -f /etc/nftables/<example_firewall_script>.nft
# nft -f /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow nftables스크립트를 직접 실행하려면 다음을 수행합니다.이 작업을 수행하는 동안 다음을 수행합니다.
스크립트가 다음 shebang 시퀀스로 시작하는지 확인합니다.
#!/usr/sbin/nft -f
#!/usr/sbin/nft -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 중요-f매개변수를 생략하면nft유틸리티에서 스크립트를 읽지 않고 다음을 표시합니다.오류: 구문 오류, 예기치 않은 줄 바꿈, 문자열이필요합니다.선택 사항: 스크립트 소유자를
root로 설정합니다.chown root /etc/nftables/<example_firewall_script>.nft
# chown root /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 소유자가 스크립트를 실행할 수 있도록 설정합니다.
chmod u+x /etc/nftables/<example_firewall_script>.nft
# chmod u+x /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
스크립트를 실행합니다.
/etc/nftables/<example_firewall_script>.nft
# /etc/nftables/<example_firewall_script>.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력이 표시되지 않으면 시스템이 스크립트를 성공적으로 실행했습니다.
nft 가 스크립트를 성공적으로 실행하고 규칙, 누락된 매개 변수 또는 스크립트의 기타 문제를 잘못 배치하면 방화벽이 예상대로 작동하지 않을 수 있습니다.
23.6.4.3. nftables 스크립트에서 주석 사용 링크 복사링크가 클립보드에 복사되었습니다!
nftables 스크립팅 환경은 줄 끝 부분에 # 문자 오른쪽에 있는 모든 항목을 주석으로 해석합니다.
주석은 줄 시작 시 또는 명령 옆에 있을 수 있습니다.
23.6.4.4. nftables 스크립트에서 변수 사용 링크 복사링크가 클립보드에 복사되었습니다!
nftables 스크립트에서 변수를 정의하려면 define 키워드를 사용합니다. 단일 값과 익명 세트를 변수에 저장할 수 있습니다. 더 복잡한 시나리오의 경우 세트 또는 확인 맵을 사용합니다.
- 단일 값이 있는 변수
다음 예제에서는
enp1s0값이 있는INET_DEV변수를 정의합니다.define INET_DEV = enp1s0
define INET_DEV = enp1s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow $기호 뒤에 변수 이름을 입력하여 스크립트에서 변수를 사용할 수 있습니다.... add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept ...
... add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 익명 세트가 포함된 변수
다음 예제에서는 익명 세트가 포함된 변수를 정의합니다.
define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow $기호 뒤에 변수 이름을 작성하여 스크립트의 변수를 사용할 수 있습니다.add rule inet example_table example_chain ip daddr $DNS_SERVERS accept
add rule inet example_table example_chain ip daddr $DNS_SERVERS acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고중괄호에는 변수가 집합을 표시함을 나타내기 때문에 규칙에서 사용할 때 특수한 의미가 있습니다.
23.6.4.5. nftables 스크립트에 파일 포함 링크 복사링크가 클립보드에 복사되었습니다!
nftables 스크립팅 환경에서는 include 문을 사용하여 다른 스크립트를 포함할 수 있습니다.
절대 경로 또는 상대 경로 없이 파일 이름만 지정하면 nftables 에는 기본 검색 경로의 파일(Red Hat Enterprise Linux에서 /etc 로 설정됨)이 포함됩니다.
예 23.1. 기본 검색 디렉터리에서 파일 포함
기본 검색 디렉터리의 파일을 포함하려면 다음을 수행합니다.
include "example.nft"
include "example.nft"
예 23.2. 디렉터리에서 모든 *.nft 파일 포함
/etc/nftables/rulesets/ 디렉터리에 저장된 *.nft 로 끝나는 모든 파일을 포함하려면 다음을 수행합니다.
include "/etc/nftables/rulesets/*.nft"
include "/etc/nftables/rulesets/*.nft"
include 문이 점으로 시작하는 파일과 일치하지 않습니다.
23.6.4.6. 시스템이 부팅될 때 nftables 규칙 자동 로드 링크 복사링크가 클립보드에 복사되었습니다!
nftables systemd 서비스는 /etc/sysconfig/nftables.conf 파일에 포함된 방화벽 스크립트를 로드합니다.
사전 요구 사항
-
nftables스크립트는/etc/nftables/디렉터리에 저장됩니다.
프로세스
/etc/sysconfig/nftables.conf파일을 편집합니다.-
nftables패키지 설치와 함께/etc/nftables/에 생성된*.nft스크립트를 수정한 경우 이러한 스크립트의include문의 주석을 제거합니다. 새 스크립트를 작성한 경우
include문을 추가하여 이러한 스크립트를 포함합니다. 예를 들어nftables서비스가 시작될 때/etc/nftables/예.nft스크립트를 로드하려면 다음을 추가합니다.include "/etc/nftables/_example_.nft"
include "/etc/nftables/_example_.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
선택 사항: 시스템을 재부팅하지 않고
nftables서비스를 시작하여 방화벽 규칙을 로드합니다.systemctl start nftables
# systemctl start nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow nftables서비스를 활성화합니다.systemctl enable nftables
# systemctl enable nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.5. nftables 명령에서 세트 사용 링크 복사링크가 클립보드에 복사되었습니다!
nftables 프레임워크는 기본적으로 세트를 지원합니다. 예를 들어 규칙이 여러 IP 주소, 포트 번호, 인터페이스 또는 기타 일치 기준과 일치해야 하는 경우 세트를 사용할 수 있습니다.
23.6.5.1. nftables에서 익명 세트 사용 링크 복사링크가 클립보드에 복사되었습니다!
익명 집합에는 규칙에서 직접 사용하는 { 22, 80, 443 } 과 같이 중괄호로 묶은 쉼표로 구분된 값이 포함되어 있습니다. IP 주소 및 기타 일치 조건에도 익명 세트를 사용할 수 있습니다.
익명 세트의 단점은 집합을 변경하려면 규칙을 교체해야 한다는 것입니다. 동적 솔루션의 경우 nftables에서 명명된 세트 사용에 설명된 대로 이름이 지정된 세트를 사용합니다.
사전 요구 사항
-
inet제품군의example_chain체인과example_table테이블이 있습니다.
프로세스
예를 들어 포트
22,80및443으로 들어오는 트래픽을 허용하는example_table에서example_chain에 규칙을 추가하려면 다음을 수행합니다.nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } accept# nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항:
example_table에 모든 체인과 해당 규칙을 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.5.2. nftables에서 named set 사용 링크 복사링크가 클립보드에 복사되었습니다!
nftables 프레임워크는 변경 가능한 이름이 설정된 세트를 지원합니다. 명명된 세트는 테이블 내의 여러 규칙에서 사용할 수 있는 요소 목록 또는 범위입니다. 익명 세트를 통한 또 다른 이점은 세트를 사용하는 규칙을 교체하지 않고도 이름이 지정된 세트를 업데이트할 수 있다는 것입니다.
명명된 세트를 만들 때 집합에 포함된 요소 유형을 지정해야 합니다. 다음 유형을 설정할 수 있습니다.
-
192.0.2.1또는192.0.2.0/24와 같은 IPv4 주소 또는 범위가 포함된 세트의ipv4_addr. -
2001:db8:1::1 또는
와 같은 IPv6 주소 또는 범위가 포함된 세트의2001:db8:1::1/64ipv6_addr -
52:54:00:6b:66:42와 같은 미디어 액세스 제어(MAC) 주소 목록이 포함된 세트의ether_addr -
inet_proto는tcp와 같은 인터넷 프로토콜 유형 목록이 포함된 세트의 경우입니다. -
ssh와 같은 인터넷 서비스 목록이 포함된 세트의inet_service. -
패킷 표시 목록을 포함하는 세트의
마크입니다. 패킷 표시는 모든 양의 32비트 정수 값(0~2147483647)일 수 있습니다.
사전 요구 사항
-
example_chain체인과example_table테이블이 있습니다.
프로세스
빈 세트를 만듭니다. 다음 예제에서는 IPv4 주소에 대한 세트를 생성합니다.
여러 개별 IPv4 주소를 저장할 수 있는 세트를 생성하려면 다음을 수행합니다.
nft add set inet example_table example_set { type ipv4_addr \; }# nft add set inet example_table example_set { type ipv4_addr \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 주소 범위를 저장할 수 있는 세트를 생성하려면 다음을 수행합니다.
nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
중요쉘이 명령의 마지막으로 message를 해석하지 못하도록 하려면 백슬래시를 사용하여 together을 이스케이프해야 합니다.
선택 사항: 세트를 사용하는 규칙을 생성합니다. 예를 들어 다음 명령은
example_table의example_chain에 규칙을 추가하여example_set의 IPv4 주소에서 모든 패킷을 삭제합니다.nft add rule inet example_table example_chain ip saddr @example_set drop
# nft add rule inet example_table example_chain ip saddr @example_set dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow example_set는 여전히 비어 있으므로 규칙은 현재 적용되지 않습니다.example_set에 IPv4 주소를 추가합니다.개별 IPv4 주소를 저장하는 세트를 생성하는 경우 다음을 입력합니다.
nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }# nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 범위를 저장하는 세트를 생성하는 경우 다음을 입력합니다.
nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }# nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IP 주소 범위를 지정하면 위 예제에서
192.0.2.0/24와 같은 CIDR(Classless Inter-Domain Routing) 표기법을 사용할 수 있습니다.
23.6.5.3. 동적 세트를 사용하여 패킷 경로의 항목 추가 링크 복사링크가 클립보드에 복사되었습니다!
nftables 프레임워크의 동적 세트를 사용하면 패킷 데이터에서 요소를 자동으로 추가할 수 있습니다. 예를 들어 IP 주소, 대상 포트, MAC 주소 등이 있습니다. 이 기능을 사용하면 이러한 요소를 실시간으로 수집하고 거부 목록을 만들고, 목록을 금지하고, 보안 위협에 즉시 대응할 수 있도록 다른 요소를 사용할 수 있습니다.
사전 요구 사항
-
inet제품군의example_chain체인과example_table테이블이 있습니다.
프로세스
빈 세트를 만듭니다. 다음 예제에서는 IPv4 주소에 대한 세트를 생성합니다.
여러 개별 IPv4 주소를 저장할 수 있는 세트를 생성하려면 다음을 수행합니다.
nft add set inet example_table example_set { type ipv4_addr \; }# nft add set inet example_table example_set { type ipv4_addr \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 주소 범위를 저장할 수 있는 세트를 생성하려면 다음을 수행합니다.
nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요쉘이 명령의 마지막으로 message를 해석하지 못하도록 하려면 백슬래시를 사용하여 together을 이스케이프해야 합니다.
들어오는 패킷의 소스 IPv4 주소를
example_set세트에 동적으로 추가하는 규칙을 만듭니다.nft add rule inet example_table example_chain set add ip saddr @example_set
# nft add rule inet example_table example_chain set add ip saddr @example_setCopy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은
example_chain규칙 체인에 새 규칙을 생성하고example_table은 패킷의 소스 IPv4 주소를example_set에 동적으로 추가합니다.
검증
규칙이 추가되었는지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 명령은 현재
nftables에 로드된 전체 규칙 세트를 표시합니다. IP가 적극적으로 규칙을 트리거하고 있으며example_set이 관련 주소로 업데이트되고 있음을 보여줍니다.
다음 단계
동적 IP 세트가 있으면 다양한 보안, 필터링 및 트래픽 제어 목적으로 사용할 수 있습니다. 예를 들면 다음과 같습니다.
- 블록, 제한 또는 네트워크 트래픽 로그
- 신뢰할 수 있는 사용자를 금지하기 위해 허용 목록과 결합
- 자동 시간 초과를 사용하여 초과 차단 방지
23.6.6. nftables 명령에서 검증 맵 사용 링크 복사링크가 클립보드에 복사되었습니다!
사전이라고도 하는 정점 맵을 사용하면 nft 가 일치 기준을 작업에 매핑하여 패킷 정보를 기반으로 작업을 수행할 수 있습니다.
23.6.6.1. nftables에서 익명 맵 사용 링크 복사링크가 클립보드에 복사되었습니다!
익명 맵은 규칙에서 직접 사용하는 { match_ crite lack : action } 문입니다. 문에는 쉼표로 구분된 여러 매핑이 포함될 수 있습니다.
익명 맵의 단점은 맵을 변경하려면 규칙을 교체해야 합니다. 동적 솔루션의 경우 nftables에서 이름이 지정된 맵 사용에 설명된 대로 이름이 지정된 맵 을 사용합니다.
예를 들어 익명 맵을 사용하여 IPv4 및 IPv6 프로토콜의 TCP 및 UDP 패킷을 서로 다른 체인으로 라우팅하여 들어오는 TCP 및 UDP 패킷을 별도로 계산할 수 있습니다.
절차
새 테이블을 만듭니다.
nft add table inet example_table
# nft add table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow example_table에서tcp_packets체인을 만듭니다.nft add chain inet example_table tcp_packets
# nft add chain inet example_table tcp_packetsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 체인의 트래픽을 계산하는
tcp_packets에 규칙을 추가합니다.nft add rule inet example_table tcp_packets counter
# nft add rule inet example_table tcp_packets counterCopy to Clipboard Copied! Toggle word wrap Toggle overflow example_table에udp_packets체인 생성nft add chain inet example_table udp_packets
# nft add chain inet example_table udp_packetsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 체인의 트래픽을 계산하는
udp_packets에 규칙을 추가합니다.nft add rule inet example_table udp_packets counter
# nft add rule inet example_table udp_packets counterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 들어오는 트래픽에 사용할 체인을 만듭니다. 예를 들어 들어오는 트래픽을 필터링하는
example_table에서incoming_traffic라는 체인을 생성하려면 다음을 수행합니다.nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \; }# nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow anonymous map이 있는 규칙을
incoming_traffic에 추가합니다.nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }# nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 익명 맵은 패킷을 구분하여 프로토콜을 기반으로 다른 카운터 체인으로 보냅니다.
트래픽 카운터를 나열하려면
example_table을 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow tcp_packets및udp_packets체인의 카운터는 수신된 패킷 수와 바이트 수를 모두 표시합니다.
23.6.6.2. nftables에서 이름이 지정된 맵 사용 링크 복사링크가 클립보드에 복사되었습니다!
nftables 프레임워크는 이름이 지정된 map을 지원합니다. 이러한 맵은 테이블 내의 여러 규칙에 사용할 수 있습니다. 익명 맵의 또 다른 장점은 이름을 사용하는 규칙을 대체하지 않고 이름이 지정된 맵을 업데이트할 수 있다는 것입니다.
이름이 지정된 맵을 생성할 때 요소 유형을 지정해야 합니다.
-
일치하는 부분이 있는 맵의
ipv4_addr에는192.0.2.1과 같은 IPv4 주소가 포함되어 있습니다. -
2001:db8:1::1과 같은 IPv6 주소를 포함하는 맵의ipv6_addr. -
52:54:00:6b:66:42와 같은 MAC(Media Access Control) 주소가 일치하는 맵의ether_addr. -
inet_proto일치하는 부분이 있는 맵의 경우tcp와 같은 인터넷 프로토콜 유형이 포함되어 있습니다. -
inet_service일치하는 맵의 경우ssh또는22와 같은 인터넷 서비스 이름 포트 번호가 포함되어 있습니다. -
일치하는 부분에 패킷
표시가포함된 맵의 경우 표시됩니다. 패킷 마크는 모든 양의 32 비트 정수 값 (0에서2147483647)일 수 있습니다. -
카운터값이 일치 하는 맵에 대 한 카운터입니다.A counter for a map whose match part contains a counter value. 카운터 값은 모든 양의 64비트 정수 값일 수 있습니다. -
일치 부분에
할당량값이 포함된 맵의 할당량입니다. 할당량 값은 모든 양의 64비트 정수 값일 수 있습니다.
예를 들어 소스 IP 주소를 기반으로 들어오는 패킷을 허용하거나 삭제할 수 있습니다. 이름 지정된 맵을 사용하면 IP 주소 및 작업이 맵에 동적으로 저장되는 동안 이 시나리오를 구성하는 단일 규칙만 필요합니다.
절차
테이블을 만듭니다. 예를 들어 IPv4 패킷을 처리하는
example_table라는 테이블을 만들려면 다음을 실행합니다.nft add table ip example_table
# nft add table ip example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 체인을 만듭니다. 예를 들어
example_table에서example_chain이라는 체인을 생성하려면 다음을 수행합니다.nft add chain ip example_table example_chain { type filter hook input priority 0 \; }# nft add chain ip example_table example_chain { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요쉘이 명령 끝부분을 해석하지 못하도록 하려면 백슬래시를 사용하여 host를 이스케이프해야 합니다.
빈 맵을 생성합니다. 예를 들어 IPv4 주소에 대한 맵을 생성하려면 다음을 수행합니다.
nft add map ip example_table example_map { type ipv4_addr : verdict \; }# nft add map ip example_table example_map { type ipv4_addr : verdict \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 맵을 사용하는 규칙을 만듭니다. 예를 들어 다음 명령은
example_map에 정의된 IPv4 주소에 작업을 적용하는example_table의example_chain에 규칙을 추가합니다.nft add rule example_table example_chain ip saddr vmap @example_map
# nft add rule example_table example_chain ip saddr vmap @example_mapCopy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 주소 및 해당 작업을
example_map에 추가합니다.nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }# nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 예제에서는 작업에 대한 IPv4 주소 매핑을 정의합니다. 위에서 생성된 규칙과 함께 방화벽은
192.0.2.1의 패킷을 수락하고192.0.2.2에서 패킷을 삭제합니다.선택 사항: 다른 IP 주소 및 action 문을 추가하여 맵을 개선합니다.
nft add element ip example_table example_map { 192.0.2.3 : accept }# nft add element ip example_table example_map { 192.0.2.3 : accept }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 맵에서 항목을 제거합니다.
nft delete element ip example_table example_map { 192.0.2.1 }# nft delete element ip example_table example_map { 192.0.2.1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 규칙 세트를 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.7. 예제: nftables 스크립트를 사용하여 LAN 및 DMZ 보호 링크 복사링크가 클립보드에 복사되었습니다!
RHEL 라우터의 nftables 프레임워크를 사용하여 내부 LAN의 네트워크 클라이언트와 DMZ의 웹 서버를 인터넷 및 기타 네트워크에서 무단 액세스로부터 보호하는 방화벽 스크립트를 작성하고 설치합니다.
이 예는 예시 목적으로만 사용되며 특정 요구 사항이 있는 시나리오를 설명합니다.
방화벽 스크립트는 네트워크 인프라 및 보안 요구 사항에 따라 크게 달라집니다. 사용자 환경에 대한 스크립트를 작성할 때 nftables 방화벽의 개념을 알아보려면 이 예제를 사용합니다.
23.6.7.1. 네트워크 조건 링크 복사링크가 클립보드에 복사되었습니다!
이 예제의 네트워크에는 다음 조건이 있습니다.
라우터는 다음 네트워크에 연결되어 있습니다.
-
인터페이스
enp1s0을 통한 인터넷 -
내부 LAN through 인터페이스
enp7s0 -
enp8s0을 통한 DMZ
-
인터페이스
-
라우터의 인터넷 인터페이스에는 정적 IPv4 주소(
203.0.113.1)와 IPv6 주소(2001:db8:a::1)가 할당되어 있습니다. -
내부 LAN의 클라이언트는
10.0.0.0/24범위의 개인 IPv4 주소만 사용합니다. 결과적으로 LAN에서 인터넷으로 전송되는 경우 소스 네트워크 주소 변환(SNAT)이 필요합니다. -
내부 LAN의 관리자는 IP 주소
10.0.0.100및10.0.0.200을 사용합니다. -
DMZ는
198.51.100.0/24및2001:db8:b::/56범위의 공용 IP 주소를 사용합니다. -
DMZ의 웹 서버는
198.51.100.5및2001:db8:b::5IP 주소를 사용합니다. - 라우터는 LAN 및 DMZ에 있는 호스트에 대한 캐싱 DNS 서버 역할을 합니다.
23.6.7.2. 방화벽 스크립트에 대한 보안 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
다음은 예제 네트워크의 nftables 방화벽에 대한 요구 사항입니다.
라우터는 다음을 수행할 수 있어야 합니다.
- DNS 쿼리를 반복적으로 확인합니다.
- 루프백 인터페이스에서 모든 연결을 수행합니다.
내부 LAN의 클라이언트는 다음을 수행할 수 있어야 합니다.
- 라우터에서 실행 중인 캐싱 DNS 서버를 쿼리합니다.
- DMZ의 HTTPS 서버에 액세스합니다.
- 인터넷의 모든 HTTPS 서버에 액세스합니다.
- 관리자는 SSH를 사용하여 라우터 및 DMZ의 모든 서버에 액세스할 수 있어야 합니다.
DMZ의 웹 서버는 다음을 수행할 수 있어야 합니다.
- 라우터에서 실행 중인 캐싱 DNS 서버를 쿼리합니다.
- 인터넷의 HTTPS 서버에 액세스하여 업데이트를 다운로드합니다.
인터넷의 호스트는 다음을 수행할 수 있어야 합니다.
- DMZ의 HTTPS 서버에 액세스합니다.
또한 다음과 같은 보안 요구 사항이 있습니다.
- 명시적으로 허용되지 않은 연결 시도는 삭제해야 합니다.
- 삭제된 패킷이 기록되어야 합니다.
23.6.7.3. 삭제된 패킷의 로깅 구성 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 systemd 는 삭제된 패킷과 같은 커널 메시지를 저널에 기록합니다. 또한 이러한 항목을 별도의 파일에 기록하도록 rsyslog 서비스를 구성할 수 있습니다. 로그 파일이 무한대로 확장되지 않도록 하려면 순환 정책을 구성합니다.
사전 요구 사항
-
rsyslog패키지가 설치되어 있어야 합니다. -
rsyslog서비스가 실행 중입니다.
절차
다음 콘텐츠를 사용하여
/etc/ECDHE.d/nftables.conf파일을 만듭니다.:msg, startswith, "nft drop" -/var/log/nftables.log & stop
:msg, startswith, "nft drop" -/var/log/nftables.log & stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이 구성을 사용하여
rsyslog서비스는 /var/log/ECDHE 대신/var/log/nftables.log파일에 패킷을로그했습니다.rsyslog서비스를 다시 시작하십시오.systemctl restart rsyslog
# systemctl restart rsyslogCopy to Clipboard Copied! Toggle word wrap Toggle overflow 크기가 10MB를 초과하는 경우
/etc/logrotate.d/nftables.log를 교체하여/var/log/nftables.log를 순환하도록 /etc/logrotate.d/nftables 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow maxage 30설정은 다음 순환 작업 중에 30일이 지난 순환 로그를 제거하도록 정의합니다.
23.6.7.4. nftables 스크립트 작성 및 활성화 링크 복사링크가 클립보드에 복사되었습니다!
이 예는 RHEL 라우터에서 실행되고 DMZ의 내부 LAN과 웹 서버의 클라이언트를 보호하는 nftables 방화벽 스크립트입니다. 예제에 사용된 방화벽의 네트워크 및 요구 사항에 대한 자세한 내용은 방화벽 스크립트에 대한 네트워크 조건 및 보안 요구 사항을 참조하십시오.
이 nftables 방화벽 스크립트는 설명용으로만 사용됩니다. 환경 및 보안 요구 사항에 맞게 조정하지 않고 사용하지 마십시오.
사전 요구 사항
- 네트워크는 네트워크 조건에 설명된 대로 구성됩니다.
절차
다음 콘텐츠를 사용하여
/etc/nftables/firewall.nft스크립트를 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/nftables/firewall.nft스크립트를/etc/sysconfig/nftables.conf파일에 포함합니다.include "/etc/nftables/firewall.nft"
include "/etc/nftables/firewall.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 전달을 활성화합니다.
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow nftables서비스를 활성화하고 시작합니다.systemctl enable --now nftables
# systemctl enable --now nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
선택 사항:
nftables규칙 세트를 확인합니다.nft list ruleset ...
# nft list ruleset ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 방화벽에서 방지하는 액세스를 시도합니다. 예를 들어 DMZ에서 SSH를 사용하여 라우터에 액세스하십시오.
ssh router.example.com ssh: connect to host router.example.com port 22: Network is unreachable
# ssh router.example.com ssh: connect to host router.example.com port 22: Network is unreachableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 로깅 설정에 따라 검색합니다.
차단된 패킷의
systemd저널:journalctl -k -g "nft drop" Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...
# journalctl -k -g "nft drop" Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 차단된 패킷의
/var/log/nftables.log파일:Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...
Oct 14 17:27:18 router kernel: nft drop IN : IN=enp8s0 OUT= MAC=... SRC=198.51.100.5 DST=198.51.100.1 ... PROTO=TCP SPT=40464 DPT=22 ... SYN ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.8. nftables를 사용하여 연결 수 제한 링크 복사링크가 클립보드에 복사되었습니다!
nftables 를 사용하여 연결 수를 제한하거나 지정된 양의 연결을 설정하려는 IP 주소를 차단하여 너무 많은 시스템 리소스를 사용하지 않도록 할 수 있습니다.
23.6.8.1. nftables를 사용하여 연결 수 제한 링크 복사링크가 클립보드에 복사되었습니다!
nft 유틸리티의 ct count 매개변수를 사용하면 IP 주소당 동시 연결 수를 제한할 수 있습니다. 예를 들어 이 기능을 사용하여 각 소스 IP 주소가 호스트에 대한 두 개의 병렬 SSH 연결만 설정할 수 있도록 구성할 수 있습니다.
절차
inet주소 제품군을 사용하여filter테이블을 생성합니다.nft add table inet filter
# nft add table inet filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow inet 필터테이블에입력체인을 추가합니다.nft add chain inet filter input { type filter hook input priority 0 \; }# nft add chain inet filter input { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 주소에 대한 동적 세트를 생성합니다.
nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}# nft add set inet filter limit-ssh { type ipv4_addr\; flags dynamic \;}Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 주소에서 SSH 포트(22)에 동시에 들어오는 연결만 허용하는
입력체인에 규칙을 추가하고 동일한 IP에서 추가 연결을 모두 거부합니다.nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct count over 2 } counter reject# nft add rule inet filter input tcp dport ssh ct state new add @limit-ssh { ip saddr ct count over 2 } counter rejectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
- 동일한 IP 주소에서 호스트로의 두 개 이상의 새 동시 SSH 연결을 설정합니다. 두 연결이 이미 설정된 경우 nftables는 SSH 포트에 대한 연결을 거부합니다.
limit-ssh동적 세트를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow elements항목은 현재 규칙과 일치하는 주소를 표시합니다. 이 예제에서요소는SSH 포트에 활성 연결이 있는 IP 주소를 나열합니다. 출력은 활성 연결 수 또는 연결이 거부된 경우 표시되지 않습니다.
23.6.8.2. 1분 이내에 10개 이상의 새로 들어오는 TCP 연결을 시도하는 IP 주소 차단 링크 복사링크가 클립보드에 복사되었습니다!
1분 이내에 IPv4 TCP 연결을 10개 이상 설정하는 호스트를 일시적으로 차단할 수 있습니다.
절차
ipaddress family를 사용하여필터테이블을 생성합니다.nft add table ip filter
# nft add table ip filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 필터테이블에입력체인을 추가합니다.nft add chain ip filter input { type filter hook input priority 0 \; }# nft add chain ip filter input { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1분 내에 10개 이상의 TCP 연결을 설정하려고 시도하는 소스 주소에서 모든 패킷을 삭제하는 규칙을 추가합니다.
nft add rule ip filter input ip protocol tcp ct state new, untracked meter ratemeter { ip saddr timeout 5m limit rate over 10/minute } drop# nft add rule ip filter input ip protocol tcp ct state new, untracked meter ratemeter { ip saddr timeout 5m limit rate over 10/minute } dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow 시간 초과 5m매개변수는 계측이 오래된 항목으로 채워지지 않도록nftables가 5분 후에 자동으로 항목을 제거하도록 정의합니다.
검증
미터의 콘텐츠를 표시하려면 다음을 입력합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.9. nftables 규칙 디버깅 링크 복사링크가 클립보드에 복사되었습니다!
nftables 프레임워크는 관리자가 규칙을 디버그하고 패킷이 일치하는 경우 다양한 옵션을 제공합니다.
23.6.9.1. 카운터를 사용하여 규칙 생성 링크 복사링크가 클립보드에 복사되었습니다!
규칙이 일치되는지 확인하려면 카운터를 사용할 수 있습니다.
-
기존 규칙에 카운터를 추가하는 프로시저에 대한 자세한 내용은
네트워킹 구성 및 관리의기존 규칙에 카운터 추가를 참조하십시오.
사전 요구 사항
- 규칙을 추가하려는 체인이 있습니다.
프로세스
counter매개 변수를 사용하여 새 규칙을 체인에 추가합니다. 다음 예제에서는 포트 22에서 TCP 트래픽을 허용하는 카운터가 포함된 규칙을 추가하고 이 규칙과 일치하는 패킷 및 트래픽을 계산합니다.nft add rule inet example_table example_chain tcp dport 22 counter accept
# nft add rule inet example_table example_chain tcp dport 22 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 카운터 값을 표시하려면 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.9.2. 기존 규칙에 카운터 추가 링크 복사링크가 클립보드에 복사되었습니다!
규칙이 일치하는지 확인하려면 카운터를 사용할 수 있습니다.
-
카운터를 사용하여 새 규칙을 추가하는 절차에 대한 자세한 내용은
네트워킹 구성 및 관리에서카운터를 사용하여 규칙 생성 을 참조하십시오.
사전 요구 사항
- 카운터를 추가하려는 규칙이 있습니다.
프로세스
프로세스를 포함하여 체인의 규칙을 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 규칙을 교체하지만 카운터 매개 변수를 사용하여
카운터를 추가합니다. 다음 예제에서는 이전 단계에서 표시되는 규칙을 교체하고 카운터를 추가합니다.nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter accept
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 카운터 값을 표시하려면 다음을 수행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.9.3. 기존 규칙과 일치하는 패킷 모니터링 링크 복사링크가 클립보드에 복사되었습니다!
nft monitor 명령과 함께 nftables 의 추적 기능을 사용하면 관리자가 규칙과 일치하는 패킷을 표시할 수 있습니다. 이 규칙과 일치하는 패킷을 모니터링하는 데 사용하는 규칙에 대한 추적을 활성화할 수 있습니다.
사전 요구 사항
- 카운터를 추가하려는 규칙이 있습니다.
프로세스
프로세스를 포함하여 체인의 규칙을 표시합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 규칙을 교체하지만
meta nftrace set 1매개변수를 사용하여 추적 기능을 추가합니다. 다음 예제에서는 이전 단계에서 표시된 규칙을 교체하고 추적을 활성화합니다.nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 accept
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow nft monitor명령을 사용하여 추적을 표시합니다. 다음 예제에서는 명령의 출력을 필터링하여inet example_table example_chain을 포함하는 항목만 표시합니다.nft monitor | grep "inet example_table example_chain" trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240 trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept) ...
# nft monitor | grep "inet example_table example_chain" trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240 trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept) ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 주의추적이 활성화된 규칙 수 및 일치하는 트래픽 양에 따라
nft monitor명령은 많은 출력을 표시할 수 있습니다.grep또는 기타 유틸리티를 사용하여 출력을 필터링합니다.
23.6.10. nftables 규칙 세트 백업 및 복원 링크 복사링크가 클립보드에 복사되었습니다!
nftables 규칙을 파일에 백업하고 나중에 복원할 수 있습니다. 또한 관리자는 규칙과 함께 파일을 사용하여 규칙을 다른 서버로 전송할 수도 있습니다.
23.6.10.1. 파일에 nftables 규칙 세트 백업 링크 복사링크가 클립보드에 복사되었습니다!
nft 유틸리티를 사용하여 파일에 설정된 nftables 규칙을 백업할 수 있습니다.
프로세스
nftables규칙을 백업하려면 다음을 수행합니다.nft 목록 규칙 세트 형식으로 생성된 형식:nft list ruleset > file.nft
# nft list ruleset > file.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow JSON 형식의 경우:
nft -j list ruleset > file.json
# nft -j list ruleset > file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
23.6.10.2. 파일에서 nftables 규칙 세트 복원 링크 복사링크가 클립보드에 복사되었습니다!
파일에서 nftables 규칙 세트를 복원할 수 있습니다.
프로세스
nftables규칙을 복원하려면 다음을 수행합니다.복원할 파일이
nft 목록 규칙 세트로 생성되거나명령이 직접 포함된 형식인 경우:nftnft -f file.nft
# nft -f file.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 복원할 파일이 JSON 형식인 경우:
nft -j -f file.json
# nft -j -f file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow