Nftables에 대해 이해할 수 없는 이상한 문제가 있습니다.
내 상태를 초래한 일련의 명령은 다음과 같습니다.
~# nft add table inet firewall
~# nft add set inet firewall blacklist4 \{ typeof ip saddr \; flags interval \; auto-merge \; \}
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/25 \}
~# nft add element inet firewall blacklist4 \{ 192.0.2.128/25 \}
~# nft -a list ruleset
table inet firewall { # handle 0
set blacklist4 { # handle 0
typeof ip saddr
flags interval
auto-merge
elements = { 192.0.2.0/25, 192.0.2.128/25 }
}
}
여태까지는 그런대로 잘됐다. /24
네트워크의 두 부분을 하나의 레코드로 자동으로 병합하지 않는다는 점에 유의하십시오 . 이는 제가 예상했던 것입니다. 그리고 저는 이것을 처음으로 알아차린 사람이 아니라는 것을 깨달았습니다.https://www.spinics.net/lists/netfilter/msg58958.html
이제 이 상태에서는 "결합된" 또는 "부분" 범위 요소를 추가할 수 없습니다.
~# nft add element inet firewall blacklist4 \{ 192.0.2.128/26 \}
Error: interval overlaps with an existing one
add element inet firewall blacklist4 { 192.0.2.128/26 }
^^^^^^^^^^^^^^
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.128/26 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/24 \}
Error: interval overlaps with an existing one
add element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
따라서 이 두 요소를 제거하고 다음을 확인하십시오.
~# nft delete element inet firewall blacklist4 \{ 192.0.2.0/24 \}
Error: interval not found in set
delete element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^
Error: Could not process rule: No such file or directory
delete element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft delete element inet firewall blacklist4 \{ 192.0.2.0/25 \}
~# nft delete element inet firewall blacklist4 \{ 192.0.2.128/25 \}
~# nft -a list ruleset
table inet firewall { # handle 0
set blacklist4 { # handle 0
typeof ip saddr
flags interval
auto-merge
}
}
앞서 언급한 대로 "파일이 존재합니다"라는 이유로 병합된 파일을 먼저 삭제하려고 했습니다. 그러나 제거할 때는 존재하지 않고 추가할 때만 존재한다는 것이 밝혀졌습니다. 마지막 명령은 컬렉션이 비어 있음을 보여주었습니다. 이제 뭔가를 추가해 보겠습니다.
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/24 \}
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/24 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/25 \}
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/25 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft add element inet firewall blacklist4 \{ 192.0.2.0/26 \}
Error: Could not process rule: File exists
add element inet firewall blacklist4 { 192.0.2.0/26 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
~# nft -a list ruleset
table inet firewall { # handle 0
set blacklist4 { # handle 0
typeof ip saddr
flags interval
auto-merge
}
}
동일한 슈퍼블록이나 부분 블록을 추가할 수 없습니다. "파일이 존재합니다"라는 메시지가 나타납니다. 왜? 어디? list 명령은 컬렉션이 비어 있다고 계속 말합니다.
이제 어떻게 다시 추가하나요?
이 설정은 장치를 세척하여 재설정할 수 있습니다. 그러나 이 테스트 세트는 비어 있지만 실제로는 다른 데이터가 있을 수 있습니다. 세트가 없이 생성된 경우 auto-merge
삭제하면 flags interval
예상대로 작동하지만 단일 IP 주소에 대해서만 작동합니다.
이것이 OpenVZ 시스템 3.10.0-1160.42.2.vz7.184.10 #1 SMP Fri Dec 31 04:05:16 MSK 2021 x86_64 GNU/Linux
에 연결될 수 있습니까?
nft 버전은 nftables v0.9.8 (E.D.S.)
시스템이 새로 업데이트된 Debian Bullseye입니다.