nftables의 inet family는 IPv4와 IPv6 패킷을 모두 처리할 수 있지만, ip saddr 같은 주소 selector는 IPv4에, ip6 daddr 같은 selector는 IPv6에 적용됩니다. inet table에 있다는 이유만으로 주소 조건이 두 계열에 모두 적용되는 것은 아닙니다.
규칙을 읽을 때 family와 expression을 따로 확인해야 합니다. 두 주소 계열에 공통으로 적용되는 transport 또는 connection-tracking 조건도 주소 selector와 구분합니다.
inet은 처리 범위이고 ip·ip6는 주소 조건입니다
nftables의 inet table은 IPv4와 IPv6 트래픽을 함께 다룰 수 있습니다. 하지만 한 규칙 안의 모든 주소 조건이 두 계열에 자동으로 적용된다는 뜻은 아닙니다. Netfilter 프로젝트 문서는 inet table의 ip expression은 IPv4 패킷에, ip6 expression은 IPv6 패킷에 적용되는 예를 제시합니다. 두 주소 계열에 모두 적용되는 조건은 별도의 공통 expression으로 작성해야 합니다.
따라서 규칙을 볼 때는 첫째 table의 family, 둘째 각 selector가 검사하는 필드와 주소 계열, 셋째 packet path에서 해당 chain에 도달하는지를 분리해서 읽습니다. inet이라는 이름만 확인하고 IPv6까지 동일하게 제한된다고 판단하면 주소 계열 조건을 놓치게 됩니다.
교육용 규칙을 주소 계열별로 대입합니다
아래는 규칙 해석을 연습하기 위한 예시입니다. 실제 장비에서 실행한 ruleset이나 공식 시험 문제를 옮긴 것이 아닙니다. 192.0.2.10은 문서용 IPv4 주소이고 2001:db8::10은 문서용 IPv6 주소라고 놓고, 세 가지 조건을 비교합니다.
| 규칙 조건 예 | IPv4 패킷 | IPv6 패킷 | 판정 |
|---|---|---|---|
| ip saddr 192.0.2.10 | 일치 가능 | 주소 계열 불일치 | IPv4 source 조건 |
| ip6 daddr 2001:db8::10 | 주소 계열 불일치 | 일치 가능 | IPv6 destination 조건 |
| tcp dport 443 | TCP이면 일치 가능 | TCP이면 일치 가능 | 주소 계열 한정이 없는 transport 조건 |
‘일치 가능’은 다른 표현식과 hook 조건도 모두 만족한다는 뜻이 아닙니다. 예컨대 tcp dport 443 조건은 두 주소 계열에서 볼 수 있지만, 규칙이 실제로 실행되려면 패킷이 해당 base chain의 hook에 도달해야 합니다. counter가 증가하지 않는 이유가 주소 expression인지, chain hook인지, 앞선 drop인지 별도로 확인해야 합니다.
규칙을 안전하게 점검하는 따라 하기
- nft list ruleset으로 현재 표시되는 설정을 조회합니다. 이 명령은 ruleset을 변경하지 않습니다.
- 각 table의 family를 확인합니다. ip·ip6·inet 중 무엇인지 적습니다.
- 규칙마다 주소 표현식 앞의 ip 또는 ip6 표기를 찾아 IPv4·IPv6 어느 쪽을 검사하는지 표시합니다.
- tcp·udp 포트, ct state처럼 주소 계열이 아닌 조건을 분리해 두 주소 유형 모두에 대입합니다.
- 마지막으로 chain의 hook과 priority를 확인합니다. 올바른 주소 조건도 패킷이 그 chain에 오지 않으면 관찰되지 않습니다.
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ip saddr 192.0.2.10 tcp dport 443 accept
ip6 daddr 2001:db8::10 tcp dport 443 accept
tcp dport 443 counter
}
}첫 accept 규칙은 IPv4 source가 지정 주소와 같은 경우에만 주소 조건을 만족합니다. 두 번째는 IPv6 destination 조건입니다. 마지막 규칙의 tcp dport 443은 IPv4·IPv6 양쪽 TCP 패킷에서 조건을 검사할 수 있지만, 예시 chain의 앞 규칙이나 다른 chain에서 이미 처리된 상황까지 이 한 조각만으로 결론 내릴 수는 없습니다.
자주 하는 실수: table 이름이 공통 적용을 보장한다고 봅니다
inet은 두 주소 family의 패킷을 table에서 함께 다룰 수 있게 하지만, 주소 비교 expression의 계열을 없애지는 않습니다. IPv4 조건 하나만 쓴 규칙이 IPv6도 막는다고 답하거나, 반대로 inet table이므로 ip 조건은 효력이 없다고 말하는 것은 모두 부정확합니다. 주소 조건은 해당 계열에 일치하고, 그 외 공통 조건은 별도로 평가됩니다.
또 IPv6가 장비나 인터페이스에서 비활성화된 경우에는 IPv6 규칙이 보인다는 사실만으로 IPv6 연결이 가능하다고 말할 수 없습니다. 커널·nftables 버전, 실제 주소 구성, hook과 라우팅을 함께 고려해야 합니다. 이 사례는 규칙의 의미를 읽는 교육용 해석이며 IPv6를 시험 삼아 노출하거나 차단하는 절차가 아닙니다.
회상 연습
교육용 질문입니다. 규칙에서 ip saddr로 출발지 주소를 비교합니다. 출발지 주소가 IPv6인 패킷도 이 조건과 일치할까요? 다른 어떤 항목도 확인해야 하나요?
IPv4와 IPv6 규칙을 구분하는 문제를 더 연습하려면 정보보안기사 덱 구성을 확인할 수 있습니다.
정답을 가리고 확인해 보세요
이 글을 위해 만든 학습 예시이며 공식 기출문제나 판매 카드의 인용이 아닙니다.
inet table의 ip saddr 규칙은 IPv6 패킷의 출발지 주소와도 일치합니까?
정답과 해설 확인
아니요. ip saddr는 IPv4 조건입니다. IPv6 source는 ip6 saddr로 표현해야 하며 chain hook 등 나머지 조건도 확인해야 합니다.Netfilter 프로젝트의 nftables families 문서는 inet table이 양쪽 패킷을 처리하더라도 ip와 ip6 규칙은 각각 해당 주소 family 패킷에 적용된다고 설명합니다.