8.6. nftables 명령에 verdict 맵 사용
사전이라고도 하는 정성 맵을 사용하면 nft
가 일치 기준을 작업에 매핑하여 패킷 정보를 기반으로 작업을 수행할 수 있습니다.
8.6.1. nftables에서 익명 맵 사용 링크 복사링크가 클립보드에 복사되었습니다!
익명 맵은 규칙에서 직접 사용하는 { match_criteria : action }
구문입니다. 문에는 쉼표로 구분된 여러 매핑이 포함될 수 있습니다.
익명 맵의 단점은 맵을 변경하려면 규칙을 교체해야 한다는 것입니다. 동적 솔루션의 경우 nftables에서 이름이 지정된 맵 사용에 설명된 대로 이름이 지정된 맵 을 사용합니다.
예를 들어 익명 맵을 사용하여 IPv4 및 IPv6 프로토콜의 TCP 및 UDP 패킷을 다른 체인으로 라우팅하여 들어오는 TCP 및 UDP 패킷을 별도로 계산할 수 있습니다.
프로세스
새 테이블을 만듭니다.
nft add table inet example_table
# nft add table inet example_table
Copy 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_packets
Copy 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 counter
Copy 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_packets
Copy 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 counter
Copy 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 맵이 있는 규칙을
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
체인의 카운터는 수신된 패킷 수와 바이트를 모두 표시합니다.
8.6.2. nftables에서 이름이 지정된 맵 사용 링크 복사링크가 클립보드에 복사되었습니다!
nftables
프레임워크는 이름이 지정된 맵을 지원합니다. 이러한 맵은 테이블 내의 여러 규칙에서 사용할 수 있습니다. 익명 맵을 통한 또 다른 이점은 해당 맵을 사용하는 규칙을 교체하지 않고도 이름이 지정된 맵을 업데이트할 수 있다는 것입니다.
이름이 지정된 맵을 생성할 때 요소 유형을 지정해야 합니다.
-
일치하는 부분이 있는 맵의
ipv4_addr
에는192.0.2.1
과 같은 IPv4 주소가 포함되어 있습니다. -
일치하는 부분이 있는 맵의
ipv6_addr
에는2001:db8:1::1
과 같은 IPv6 주소가 포함됩니다. -
일치하는 부분이 있는 맵의
ether_addr
에는52:54:00:6b:66:42
와 같은 MAC( Media Access Control) 주소가 포함됩니다. -
inet_proto
일치하는 부분이 있는 맵의 경우tcp
와 같은 인터넷 프로토콜 유형이 포함되어 있습니다. -
inet_service
일치하는 맵의 경우ssh
또는22
와 같은 인터넷 서비스 이름 포트 번호가 포함되어 있습니다. -
일치하는 부분이 패킷
마크
를 포함하는 맵에 대해 마크합니다. 패킷 마크는 모든 양의 32비트 정수 값(0
~2147483647
)일 수 있습니다. -
카운터
값에 일치하는 부분이 포함된 맵의 카운터입니다. 카운터 값은 양의 64비트 정수 값일 수 있습니다. -
일치하는 부분이
할당량
값이 포함된 맵의 할당량입니다. 할당량 값은 양의 64비트 정수 값일 수 있습니다.
예를 들어 소스 IP 주소를 기반으로 들어오는 패킷을 허용하거나 삭제할 수 있습니다. IP 주소와 작업이 맵에 동적으로 저장되는 동안 이름이 지정된 맵을 사용하여 이 시나리오를 구성하려면 단일 규칙만 필요합니다.
프로세스
테이블을 만듭니다. 예를 들어 IPv4 패킷을 처리하는
example_table
이라는 테이블을 만들려면 다음을 수행합니다.nft add table ip example_table
# nft add table ip example_table
Copy 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 중요쉘이 명령의 마지막으로 message를 해석하지 못하도록 하려면 백슬래시를 사용하여 together을 이스케이프해야 합니다.
빈 맵을 생성합니다. 예를 들어 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_table
의example_chain
에 규칙을 추가하여example_map
에 모두 정의된 IPv4 주소에 작업을 적용합니다.nft add rule example_table example_chain ip saddr vmap @example_map
# nft add rule example_table example_chain ip saddr vmap @example_map
Copy 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