사용 사례:오늘은 iptables를 사용하는 홈 라우터가 있습니다. 많은 규칙에 대해 더 관리하기 쉬운 것 같아서 nftables로 변환하는 것을 고려 중입니다.
오늘 iptables에서 설정한 것 중 하나는 "국가 블록" ipset입니다. 여기에는 대부분의 임의 포트 검색/해킹 시도를 포괄하는 국가 CIDR 블록이 포함되어 있습니다. 불행하게도 nftables는 내 기존 IPset에서 직접 작동하지 않지만 이를 nftables IPset으로 변환하는 것은 매우 간단합니다.
질문:거대한 nftables 파일을 피하기 위해 "국가" 세트를 별도의 파일로 분리하기로 결정했습니다. nftables는 다른 파일을 쉽게 포함할 수 있으므로 이는 nftables에서 예상되는 동작과 정확히 일치하는 것 같습니다. 나는 국가를 다음과 같이 정의합니다.
table ip country-block {
set country-block {
type ipv4_addr;
flags interval;
elements = { /* CIDR blocks here */ }
}
}
이것은 잘로드됩니다. 이제 방화벽 필터에 사용하고 싶습니다. 기본 구성 파일 "table inet filter"에 테이블이 정의되어 있습니다. 여기에 규칙을 추가하고 싶습니다.
ip saddr @country-block drop
답변을 검색한 후 이것이 IP 세트를 참조하는 유일한 방법입니다. 불행히도 오류가 발생합니다.
Error: Could not process rule: Set 'country-block' does not exist
내가 만든 국가 블록 네임스페이스로 해석되기를 바라면서 "country-block@country-block"을 참조하려고 시도했지만 작동하지 않았습니다.
Error: syntax error, unexpected drop
ip saddr country-block@country-block drop
^^^^
다른 테이블의 컬렉션을 참조하는 방법을 아는 사람이 있나요? 나는 모든 컬렉션을 하나의 "필터" 테이블로 축소하고 모두 하나의 파일에 유지하고 싶지 않습니다. 정말 추악한 혼란이 될 것입니다.
추신: 이 "nftables"에 태그를 지정하려고 시도했지만 분명히 이것은 새 태그이고 새 태그를 생성하는 데 필요한 위임이 없습니다. 필요한 담당자를 갖춘 어떤 친절한 영혼이 이것을 적절하게 표시할 수 있습니까?
답변1
nftables 개발자 메일링 리스트에 문의한 후 답변을 받았습니다. 간단히 대답하자면 다른 테이블의 집합을 참조하는 것이 불가능하다는 것입니다.
그러나 적어도 내 컬렉션을 별도의 파일에 저장하고 @include를 통해 가져올 수는 있었습니다. 이렇게 하면 IPset을 하나의 거대한 구성 파일에 모두 넣을 필요 없이 관리하기가 더 쉬워집니다. 구문은 다음과 같습니다.
# nftables.conf
include "/etc/nftables.country-block"
table inet filter {
set country-block {
type ipv4_addr; flags interval;
elements = $country_block_list
}
}
# nftables.country-block
define country_block_list = {
# comma-separated CIDR blocks here
}
하지만 이 글을 쓰는 시점(2016년 12월 21일)에는 최신 nftables 소스 코드에서 구축된 nft 명령줄 유틸리티가 필요하다는 점에 주목할 가치가 있습니다. 현재 사용 가능한 최신 버전(nftables v0.6)에서는 위 구성이 다음을 사용하기 때문입니다. 오류. nftables에는꽤 좋은 위키소스에서 빌드하고 설치하는 방법을 간략히 설명합니다. 새 버전이 출시되고 모든 다른 배포판에 적용되면 몇 달 안에 이것이 필요하지 않을 것으로 예상됩니다.