여러 위치에서 nft 규칙을 정의하는 중에 오류가 발생했습니다.

여러 위치에서 nft 규칙을 정의하는 중에 오류가 발생했습니다.

내 nftable 파일이 너무 커졌습니다. 작은 파일로 나누어서 사용해 보았 include으나 오류가 발생했습니다. 여러 부분이 어떻게 결합되는지 이해하지 못할 수도 있습니다.

nftables는 포함된 모든 구성 파일을 읽고 기존 구성과 함께 메모리에 구성 객체를 생성한 다음 한 번의 원자 작업으로 이전 구성을 새 구성으로 교체합니다.

다음은 작동하는 작은 nft 파일입니다(즉, 성공적으로 로드됨).

# OK
table inet filter {
    set deny_ipv4_ipset {
        type ipv4_addr
        flags interval
    }   

    chain geoip {
        type filter hook prerouting priority mangle
        policy accept
        meta iiftype loopback accept
        ct state {related, established} accept
        ip saddr @deny_ipv4_ipset drop
    }   
}

하지만 두 개의 파일로 분할하면 로드되지 않습니다. 파일에 저장하고 "논리적으로" 분할해도 작동하지 않습니다.

# not OK
table inet filter {
    set deny_ipv4_ipset {
        type ipv4_addr
        flags interval
    }
}

table inet filter {
    chain geoip {
        type filter hook prerouting priority mangle
        policy accept
        meta iiftype loopback  accept
        ct state {related, established}  accept
        ip saddr @deny_ipv4_ipset  drop
    }
}

두 번째 파일에서는 다음 오류가 발생합니다.

Error: No such file or directory; did you mean set ‘deny_ipv4_ipset’ in table inet ‘filter’?
ip saddr @deny_ipv4_ipset  drop
         ^^^^^^^^^^^^^^^^

예, Inet 'filter' 테이블의 'deny_ipv4_ipset'을 의미하는데, 이 오류가 발생하는 이유는 무엇입니까?

답변1

말씀하신 것처럼 여러 파일 때문이 아닙니다. 동일한 테이블을 두 번 정의하기 때문이라고 생각합니다. 내가 올바르게 기억한다면 이 기능과 같은 것을 사용할 수 있습니다.

매뉴얼에는 include 사용 예가 있습니다.https://wiki.nftables.org/wiki-nftables/index.php/Classic_perimetral_firewall_example

table inet filter {

        include "./inet-filter-sets.nft"
        include "./inet-filter-preroute-chains.nft"
}

inet-filter-sets.nft

set deny_ipv4_ipset {
    type ipv4_addr
    flags interval
}

관련 정보