무료 TCP 포트가 필요한 유틸리티가 있습니다. 기존 구성 파일을 변경하고 싶지 않기 때문에 nftables에 규칙을 동적으로 추가할 수 있어야 합니다.
입력 규칙을 포함하는 filter라는 inet 테이블이 있습니다.
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
# existing rules
}
}
규칙을 추가하는 것은 쉽습니다. 예를 들면 다음과 같습니다.
nft add rule inet filter input tcp dport { 4848 } ct state new,established counter accept
여기서 질문은 이것을 멱등적인 방식으로 수행하는 방법입니다.
- 같은 명령을 두 번, 두 번 실행하면정확히 똑같다규칙이 생성되었습니다.
nft delete rule inet filter input handle ##
변경되는 핸들 번호가 필요하고 이를 사용하여nft -n -a list ruleset | grep ...
핸들 번호를 해결하는 것은 옳지 않다고 느껴집니다.- 새 체인을 추가
nft -f
하고 매번 새로 고치는 것도 위에서 언급한 대로 작동하지 않습니다.여기:
이것은아니요체인은 거부(또는 삭제) 규칙이 있는 체인보다 (허용 규칙의 형태로) 더 광범위한 액세스를 제공할 수 있습니다.
답변1
컬렉션을 사용하면 관리하기가 더 쉽습니다.
table inet filter {
set myport_tcp {
type inet_service
elements = { 4848 }
}
chain input {
type filter hook input priority 0; policy drop;
# existing rules
tcp dport @myport_tcp ct state new,established counter accept
# more existing rules
}
}
다음과 같은 방법으로 컬렉션을 지울 수 있습니다.
nft flush set inet filter myport_tcp
다음과 같은 방법으로 컬렉션에 새 포트를 추가할 수 있습니다.
nft add element inet filter myport_tcp elements = { 4949 }
또는 다음을 통해 컬렉션에 여러 포트를 추가합니다.
nft add element inet filter myport_tcp elements = { 14949, 9494 }