나는 다음을 가지고 있습니다 nftables.conf
:
table inet nat {
set blocked {
type ipv4_addr
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
ip daddr @blocked counter drop;
oifname "ppp0" masquerade;
iifname "br-3e4d90a574de" masquerade;
}
}
세트 blocked
는명명된 집합동적으로 업데이트할 수 있습니다. 이 세트 내에서 차단할 IP 세트를 갖고 싶고 각 IP에 대해 업데이트될 것입니다.N분. 저장하기 위해원자성, 그래요아니요updateblock.sh
목록을 업데이트하려면 다음( )을 사용하십시오 .
#!/bin/bash
sudo nft flush set inet nat blocked
sudo nft add element inet nat blocked {$nodes}
대신에 blockediplist.ruleset
:
#!/usr/sbin/nft -f
flush set inet nat blocked
add element inet nat blocked { <example_ip> }
나는 다음과 같은 일련의 명령을 사용합니다.
nft -f /etc/nftables.conf
nft -f blockediplist.ruleset
그러나 이러한 변경 사항은 blockediplist.ruleset
즉시 적용되지 않습니다. 이러한 IP가 nft list ruleset
및 에 존재하기 때문에 이제 규칙 세트에 새 IP가 포함되어 있다는 것을 알고 있습니다 nft list set inet nat blocked
. 그냥 사용해도 nft add element inet nat blocked { <IP> }
바로 IP가 차단되지는 않습니다.
또 다른 접근 방식은 새 컬렉션을 정의하고 nftables.conf
전체 컬렉션을 다시 로드하는 것입니다. 하지만 이는 좋지 않고 비효율적인 방법이라고 생각합니다.
blockediplist.ruleset
변경 사항을 즉시 적용하도록 하는 방법이 있습니까 ?
고쳐 쓰다:ping을 하지 않은 IP를 차단하면 즉시 차단된다는 사실을 방금 발견했습니다. 하지만 차단 목록에 IP가 추가되면 차단하는 데 시간이 걸립니다. IP를 설정하려고 하면 netdev ingress
바로 차단됩니다. 아마도 이 조사 방법을 통해 뭔가가 밝혀질 수도 있을 것입니다.
답변1
nat 후크(다른 모든 후크와 마찬가지로)는 Netfilter에서 nftables에 제공됩니다. NAT 후크는 특별합니다. 연결의 첫 번째 패킷만 이 후크를 통과합니다. conntrack에 의해 이미 추적된 연결에 대한 다른 모든 패킷은 더 이상 NAT 후크를 통과하지 않고 직접 전송됩니다.연결하다이 흐름에 대해 구성된 NAT 작업을 진행합니다.
이는 삭제를 위해 이 후크를 절대 사용해서는 안되는 이유를 설명합니다. 이는 NAT 여부에 관계없이 이미 추적된 연결에는 영향을 미치지 않습니다.
트래픽을 떨어뜨리는 부분의 후크 유형을 에서 으로 변경하면 됩니다 type nat
. type filter
반대쪽으로iptables테이블은 하나의 후크 유형으로 제한되지 않습니다. 실제로 이 경우에는 여러 유형을 사용해야 합니다.놓다테이블에 로컬이며 두 테이블 간에 공유할 수 없습니다. 같은 이유로 이 테이블은 inet nat
NAT만 수행하는 것이 아니기 때문에 논리적으로 더 이상 호출되어서는 안 됩니다(그러나 이름을 바꾸지는 않았습니다).
그래서 결국:
nftables.conf
:
table inet nat {
set blocked {
type ipv4_addr
}
chain block {
type filter hook postrouting priority 0; policy accept;
ip daddr @blocked counter drop
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
oifname "ppp0" masquerade
iifname "br-3e4d90a574de" masquerade
}
}
지금:
모든 패킷은 체인에 의해 검사되므로
inet nat block
그룹blocked
은 다음 트래픽이 영향을 받을 때까지 기다릴 필요 없이 즉시 트래픽에 영향을 미칠 수 있습니다.평소와 같이 새 흐름의 첫 번째 패킷(임시 conntrack 상태 NEW)만 체인을 통과합니다
inet nat postrouting
.
또한 iifname "br-3e4d90a574de" masquerade;
충분히 새로운 커널(Linux커널 >= 5.5): 이전에는 라우팅 후 후크가 나가는 인터페이스에 의한 필터링만 지원했습니다. 또한 이는 Docker 관련 인터페이스처럼 보이며 이러한 종류의 규칙을 추가하면 브리지 인터페이스를 참조하므로 Docker와 상호 작용할 수 있습니다(예: 동일한 네트워크에 있는 두 컨테이너 간의 NAT 트래픽일 수 있음). 이는 Docker가 브리지된 트래픽을 가능하게 하기 때문입니다.nftables(또한iptables) 로드하여br_netfilter
기준 치수).