暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

防火墙阻止国外IP访问

生有可恋 2022-06-22
5980

很多国内网站实际上并没有国外用户,如果用户群体主要是国内用户,如何在防火墙上设置IP策略阻止国外用户访问网站?


这里的难点是如何定义一个IP是属于国内还是国外。我们不可能对每个IP去查询它的归属地。实际上所有IP都是由五大管理机构进行分配的,我们可以从他们发布的分配信息中去查询一个IP段是属于哪个国家的。IP地址段的分配详情可以在以下文件中查看:

  • http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest


将其下载下来后可以对文件内容进行处理,内容摘要如下:

    apnic|AU|ipv4|1.0.0.0|256|20110811|assigned
    apnic|CN|ipv4|1.0.1.0|256|20110414|allocated
    apnic|CN|ipv4|1.0.2.0|512|20110414|allocated
    apnic|AU|ipv4|1.0.4.0|1024|20110412|allocated
    apnic|CN|ipv4|1.0.8.0|2048|20110412|allocated

    其中第2列是国家代码,第4列是IP地址的网段,第6列是这个段的IP地址数量。我们可以对内容进行处理,保留或去掉国内地址,从而得到国外地址。处理代码如下:

      #!python3


      import re
      import math


      pattern_ip = re.compile(r'.*ipv4.*((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)).*')


      f = open('delegated-apnic-latest')


      # apnic|CN|ipv4|1.0.8.0|2048|20110412|allocated
      line = f.readline()
      while line:
      ip = line
      line = f.readline()
      match = pattern_ip.search(ip)
      if not match:
      continue
      s = ip.split('|')
      mask = 32 - int(math.log(int(s[4]),2))
      if s[1] == 'CN':
      continue
      # print("%s %s/%d" % (s[1],s[3],mask))
      print("%s/%d" % (s[3],mask))


      f.close()


      处理后的IP信息如下:

        $ python3 ipproc.py
        1.0.0.0/24
        1.0.4.0/22
        1.0.16.0/20
        1.0.64.0/18
        1.0.128.0/17
        1.1.1.0/24
        1.1.64.0/18
        1.1.128.0/17

        这里的格式是网段加掩码的格式,如果想得到IP地址段范围的格式可以使用工具cidr-merger进行IP地址的合并或扩展,cidr-merger工具下载地址如下,有linux或windows版:

        • https://github.com/zhanhb/cidr-merger/releases/tag/v1.1.3


        工具使用方法为:

          $ head -5 iplist.log
          1.0.0.0/24
          1.0.4.0/22
          1.0.16.0/20
          1.0.64.0/18
          1.0.128.0/17
          $ ./cidr-merger -r iplist.log
          1.0.0.0-1.0.0.255
          1.0.4.0-1.0.7.255
          1.0.16.0-1.0.31.255
          1.0.64.0-1.0.255.255
          1.1.1.0-1.1.1.255


          将处理过的IP段写入防火墙规则即可阻止国外IP访问。

          文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论