큰 IP 범위 목록(CIDR)이 있는 Iptables가 포함된 Ipset

큰 IP 범위 목록(CIDR)이 있는 Iptables가 포함된 Ipset

여기에서 IP 주소 범위 차단에 대한 몇 가지 답변을 읽었으며 iptables이전에 이미 이 목적으로 사용한 적이 있습니다. ipset와 함께 사용하는 것이 좋습니다 iptables.

설치만 했어요IP세트아직 구성하지 않았습니다.

이 사이트를 찾았어요ip2location.com국가별로 금지할 IP 목록을 생성합니다. 우리 사이트를 정기적으로 타겟팅하는 5개 국가를 선택했는데 목록이 엄청나네요.256000행.

  • 이 대규모 목록을 사용할 때 서버 속도가 느려지나요 ipset?(IPtable만 사용하여 이 작업을 시도하기 전에는 이렇게 큰 파일이 성능을 저하시킬 수 있는지 의문을 제기했습니다.)
  • 그렇다면 이를 수행하는 방법은 무엇입니까? 현재 나는 pass2ban을 사용하고 있지만 nginx에 대한 구성이 올바르게 설정되지 않은 것 같습니다(정규식으로 가정합니다). 어쨌든 좀 더 강력한 방법이 필요합니다.
  • 마지막으로, 나는 이 목록을 더 작게 만들 만큼 CIDR을 이해한다고 주장하지 않습니다(가능한 경우 유사한 IP 범위를 집계).

예를 들어, /21 항목이 여러 개 있습니다.

185.179.152.0/22

온라인 도구에 따르면 이 해결 방법은 185.179입니다.152.0 ~ 185.179.155.255

항목 수를 줄이는 쉬운 방법은 없다고 생각하므로 구현 및 성능 문제에 대한 조언을 부탁드립니다.

답변1

라는 명령줄 유틸리티가 있습니다 aggregate. CIDR 넷블록 목록을 가져와 연속 블록을 해당하는 더 큰 블록으로 집계합니다. 또한 중복된 넷블록도 제거합니다.

예를 들어:

$ aggregate -q << EOF
> 192.168.0.0/24
> 192.168.1.0/24
EOF
192.168.0.0/23

CIDR 블록만 포함된 텍스트 파일을 제공하면 이를 집계하여 목록 크기를 줄입니다.

매뉴얼 페이지에서:

DESCRIPTION
       Takes  a list of prefixes in conventional format on stdin, and performs
       two optimisations to attempt to reduce the length of the prefix list.

       The first optimisation is to remove any supplied prefixes which are su‐
       perfluous because they are already included in another supplied prefix.
       For example, 203.97.2.0/24 would be removed if 203.97.0.0/17  was  also
       supplied.

       The  second  optimisation identifies adjacent prefixes that can be com‐
       bined under a single, shorter-length prefix. For example, 203.97.2.0/24
       and 203.97.3.0/24 can be combined into the single prefix 203.97.2.0/23.

aggregateUbuntu를 포함한 대부분의 주요 Linux 배포판에 패키지되어 있습니다.

(해당 웹 사이트에서 목록을 가져와 집계하려고 시도했지만 아무 일도 일어나지 않았으므로 이미 집계되었을 수 있습니다. 두 개 이상의 IPset을 사용할 수 있으며 이는 아마도 여기서 수행하는 가장 좋은 방법일 것입니다.)

답변2

일반적으로 IPset 목록의 최대 길이는 65536개 요소이므로 차단하려는 각 국가마다 별도의 목록을 사용해야 할 수도 있습니다.

hash:net 세트를 사용하면 금지하려는 CIDR 레코드를 직접 추가할 수 있습니다. 확인하고 싶을 수도 있습니다https://www.ipdeny.com/ipblocks/국가 수준 블록의 경우

귀하의 질문에 관해서는

  • ipset은 시스템 속도를 크게 저하시키지 않아야 합니다. 세트를 유지하기 위해 일부 메모리를 사용하지만 그렇지 않으면 로드가 눈에 띄지 않아야 합니다.
  • 공격자가 모든 국가의 클라우드/vps 서버를 사용할 수 있으므로 fall2ban을 유지하는 것이 좋습니다.

마지막으로 특정 국가를 차단하기 위해 ipset과 함께 iptables를 사용하는 것과 관련된 유사한 질문이 많이 있으므로 iptables 설정 세부 사항은 다루지 않겠습니다. 그냥 확인하세요. https://askubuntu.com/questions/868334/block-china-with-iptables또는 유사한

답변3

당신은xt_geoip대신 xtable 애드온을 사용하시겠습니까?

geoip 대 ipset xt_geoip는 (아마도) 가장 효율적인 형식인 (압축되지 않은) 압축된 blob을 사용합니다. 한 국가를 커널에 로드하는 데 드는 비용은 디스크에 있는 파일만큼입니다.

ipset은 임의의 IPaddr–IPaddr 범위를 지원하지 않으므로 예를 들어 여러 Network/Prefixlength 항목을 사용하여 대략적인 범위를 계산해야 합니다. 또한 해시 세트 유형이 사용되는 경우 해시 및/또는 트리의 특성으로 인해 일부 버킷이 비어 있거나 추가 메타데이터가 필요하다고 가정할 수 있습니다. 따라서 ipset 기반 geoip의 메모리 공간은 당연히 더 큽니다. 사용자 보고서1특정 경우에는 두 배 더 높아질 수 있음을 나타냅니다(iptreemap).

xt_geoip의 조회 시간은 O(log2(ranges))이므로 20,000 범위 내의 주소를 조회하려면 각각 주소 비교(최대 3회)가 포함된 최대 15회의 반복이 필요합니다. ipset은 해싱에 Jenkins3을 사용하는데, 이는 자체적으로 특정 시간 비용이 듭니다.

지금까지 경험적 타이밍 테스트는 수행되지 않았습니다.

관련 정보