Iptables 阻止主机

Iptables 阻止主机

我如何才能阻止整个主机(互联网提供商),或者只允许一个国家进行 ssh 登录?

答案1

1.)查找特定 ISP 的 IP 地址:

您必须使用 Google 搜索 WHOIS 记录。您还可以获取 ip2location 数据库,这应该会有所帮助。

2.)您需要的命令是:$ iptables -A INPUT -s 192.168.100.0/24 -j DROP

将 IP(192.168.100.0)替换为要阻止的范围的起始 IP,并将后面的数字替换为网络掩码(参见:http://www.computerhope.com/jargon/n/netmask.htm来计算出你需要的数字)取决于你想以块为单位走多远。

答案2

iptables GeoIP 扩展允许您创建按国家/地区匹配的规则。遗憾的是,GeoIP 不是标准 iptables/netfilter 的一部分,因此您需要进行一些修改才能启用它。

这是 Debian 5.0 的教程

答案3

博客 你可以选择你想要屏蔽的国家。(即)

CN 中国

现在,如果你想获取中国整个 IP 范围,只需在以下地址查询

http://blogama.org/country_query.php?country=CN 

我发现这有点乏味,所以我编写了一个脚本:

    #!/usr/bin/env ruby

    %w(uri net/http optparse).each {|r| require r}

    options = {}

    optparser = OptionParser.new do |opts|

      opts.banner = "Usage: #{File.basename($0)} [options]"
      opts.on('-c','--country COUNTRY', 'Country to generate iptables rules ie: CH') do |f|
        options[:country] = f
      end

      options[:list] = false
      opts.on('-l','--list', ' List all countries') do |r|
          options[:list] = true
      end

      opts.on_tail('-h','--help', 'Show options') do |o|
        puts opts
        exit
      end

    end

    optparser.parse(ARGV)

    if ARGV.length == 0
      puts optparser
      exit
    end

    url = 'http://blogama.org/country.txt'
    list = Net::HTTP.get(URI.parse(url))

    if options[:list]
      puts list
      exit
    end

    query = 'http://blogama.org/country_query.php?country=' + options[:country]

    Dir.mkdir("blocked") if ! File.directory?("blocked")
    f = File.open("blocked/" + options[:country] + ".block","w")

    range = Net::HTTP.get(URI.parse(query))
    ips = range.split(/\n/)
    ips.each do |ip|
      rule = "iptables -A INPUT #{ip} -j DROP\n"
      f.write(rule)
    end

该脚本将根据你选择的国家/地区生成一个具有 iptables 语法的列表。之后,你可以将该文件添加到你的规则中

# Blocked IP range
. ./ipblock

警告:规则太多会使您的连接速度变慢,因为传入的数据包将与您添加的每条规则进行匹配。

相关内容