ipset x에서 y까지 IP 범위를 추가하는 방법

ipset x에서 y까지 IP 범위를 추가하는 방법

이 81.212.0.0/14 IP 범위를 ipset에 추가해야 합니다. 하지만 /16 이하로는 계산되지 않습니다. 81.212.0.0에서 81.215.255.255까지 IP 주소를 추가하고 싶습니다. /14 외에 다른 방법이 있나요?

특정 IP 범위의 연결을 허용하려고 합니다.

내가 시도한 것:

ipset -A 허용 목록 81.212.0.0/14

내가 기대한 것:

이렇게 하면 81.212.0.0 - 81.215.255.255 사이의 연결이 허용됩니다. PS: 그 외에 다른 모든 규칙은 정상적으로 작동합니다.

문제는 81.212.0.0/14가 65535보다 IP가 더 많다는 것입니다. 어쩌면 알 수도 있겠네요.

답변1

문제는 81.212.0.0/14가 65535보다 IP가 더 많다는 것입니다. 어쩌면 알 수도 있겠네요.

당신은 아마 바로 여기 있을 겁니다. 유형의 IPset을 사용하는 경우 hash저장할 수 있는 최대 요소 수는 maxelem매개변수를 통해 설정할 수 있습니다. IPset을 생성할 때 기본값은 maxelem65536입니다. 해싱 유형을 사용하는 경우 bitmap지도의 최대 크기인 65536개의 주소가 있습니다.

그런데 IPset을 어떤 용도로 사용하고 있나요? 단순히 전체 /14 세그먼트를 일치시키는 경우 해시 기반 IPset은 단순한 네트워크 주소 및 마스크 기반 일치보다 효율성이 훨씬 떨어집니다.

그러나 초기 세트를 설정하고 나중에 특정 IP 주소를 선택적으로 제거하려는 경우에는 IPset을 사용하는 것이 좋습니다.

그럼에도 불구하고, 단계적으로 폐지될 것으로 예상되는 IP 수가 상대적으로 적다면, 지금 하고 있는 일의 의미를 뒤집어 마스크 기반 매칭을 일반 규칙으로 사용하고 IP 세트 기반 매칭을 기본 규칙으로 사용하는 것이 현명할 수 있습니다. 예외.

그것은 다음과 같습니다:

iptables -N maybeAllow81_212
iptables -A maybeAllow81_212 -m set --match-set denyiplist_81_212 src -j DROP
iptables -A maybeAllow81_212 -j ACCEPT

iptables -A INPUT -s 81.212.0.0/14 -j maybeAllow81_212

이러한 방식으로 81.212.0.0/14 내에서 발생하지 않는 모든 트래픽은 기본 INPUT 체인에서 처리될 수 있으며 기본적으로 32비트 AND 및 32비트 비교라는 두 가지 어셈블리 명령만 필요합니다. 이보다 더 빨리 갈 수는 없습니다.

해당 세그먼트 내의 모든 트래픽은 maybeAllow81_212해시 일치를 수행하는 하위 체인으로 전환되고(반전된 훨씬 작은 세트를 사용하여 일치하도록!) 모든 사람이 허용하도록 합니다.아니요한 그룹을 매칭하여 통과하세요.

답변2

이는 컬렉션이 최대 /16 네트워크만 허용하는 allowiplist유형 (하위 유형 중 하나)이거나  기본 제한이 65535개 요소(하위 유형 중 하나)인 유형 이기 때문일 수 있습니다 .bitmap:iphash:ip

컬렉션의 특정 유형을 볼 수 있습니다.

ipset -t list allowiplist

hash:net/16 아래의 네트워크에 액세스하려면 (모든 종류의) IPset 유형을 사용해야 합니다 .

그러나 이러한 유형은 bitmap:ip 또는 hash:ip 유형 hash:net과 같은 실제 범위를 허용하지 않습니다 .81.212.5.13-81.212.7.4

maxelem 유형 제한을 확장할 수 있지만 hash:ip이는 유효한 솔루션이 아닙니다.

그러니 정말 필요하다면범위iptables/16 네트워크를 넘어 겹치는 부분의 경우 고유한 일치 유형을 사용하는 것이 좋습니다 -m iprange(전체 설정에서 가능한 경우).

관련 정보