iptables阻止主机

如何阻止整个主机(互联网提供商),或只允许一个国家的sshlogin?

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

您必须使用Google并searchWHOISlogging。 你也可以得到一个ip2location数据库应该帮助。

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

将IP(192.168.100.0)replace为要阻止的范围的起始IP,然后用networking掩码replace该数字(请参阅: http : //www.computerhope.com/jargon/n/netmask.htm以计算出您的数字需要)取决于你想走多远,块式。

iptables GeoIP扩展允许您创build按国家匹配的规则。 不幸的是,GeoIP不是标准的iptables / netfilter的一部分,所以你需要绕开一点才能启用它。

这里是Debian 5.0的教程 。

在博客,你可以select你想阻止的国家。 (即)

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 

该脚本将根据您select的国家/地区使用iptables语法生成一个列表。之后,您可以将该文件添加到您的规则

 # Blocked IP range . ./ipblock 

警告 :太多的规则会让你连接速度变慢,因为传入的数据包将与你添加的每个规则相匹配。