我如何才能阻止整个主机(互联网提供商),或者只允许一个国家进行 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 的一部分,因此您需要进行一些修改才能启用它。
答案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
警告:规则太多会使您的连接速度变慢,因为传入的数据包将与您添加的每条规则进行匹配。