NetScaler Block Access Using Location Database Based on User’s Country

使用地理位置

准备环境

​ 出奇的简单:2个命令行命令,问题就解决了!/var/netscaler/inbuilt_db/ 中有内置位置文件:其中一个用于 IP v4 ( Citrix_Netscaler_InBuilt_GeoIP_DB_IPv4 ),另一个用于IPv6(Citrix_Netscaler_InBuilt_GeoIP_DB_IPv6 )。这些文件来自 GeoLite。

​ 不幸的是,这个数据库可能不适合您的需要。也许您想为您的公司使用“私有”地理定位数据库(10.0.0.1-10.127.255.255.254 是欧洲,10.128.0.1 到 10.240.255.254 是亚洲,10.241.0.1 到 10.255.254 是非洲,其余的是美洲)。所以你必须自己创建一个数据库。这在CTX130155 中有描述。也许,您想将更新的版本导入您的 Citrix ADC / NetScaler?因此,您可以从GeoLite下载文件并使用此工具将其转换为 Citrix AD/NetScaler 。

必须将地理位置文件导入 ADC:

img

add locationFile /var/netscaler/inbuilt_db/Citrix_Netscaler_InBuilt_GeoIP_DB_IPv4
set locationParameter -matchWildcardtoany YES

​ 这将在 /var/netscaler/locdb/nslocation.db 创建一个位置文件。当然,同样可以使用 GUI 来完成。第二行代码将允许通配符匹配位置,即 .AT....* 代表奥地利,而不是指定欧洲。

img

​ 这个数据库可以很容易地测试。

img

nsmap -d -t <ip>

​ 将返回此 IP 地址的地理位置信息。我测试了我自己的网络服务器的 IP,发现它位于欧洲/奥地利。那太棒了!大惊喜!

使用响应策略

创建响应者策略

在实际创建响应者策略之前,我们应该考虑哪种操作最合适。

响应者允许 NOOP、DROP 和 RESET。还有一些自定义操作(重定向、响应、重定向和响应 HTML 页面)。

我们的计划是对某些用户隐藏我们的服务器,所以我认为静默删除是最合适的方法。这意味着,假装什么都没有。重置会给出太多反馈,这意味着:“我在那里,但我不想回应你的请求”。我们可以做定制的响应,响应 500(内部服务器错误),但我没有看到和简单删除相比的优势。

所以我将创建一个策略来删除朝鲜用户:

add responder policy res_pol_drop_NorthKorea "CLIENT.IP.SRC.MATCHES_LOCATION(\"*.KP.*.*.*.*\")" DROP -logAction log_locationInformation

Creating a Citrix ADC / NetScaler responder policy blocking connections from a specivic country

您可能会看到,我添加了自定义日志记录策略。这当然是一个可选步骤。日志记录策略如下所示:

add audit messageaction log_locationInformation NOTICE "\"dropped request for \" + CLIENT.IP.SRC + \" from \" + CLIENT.IP.SRC.LOCATION" 
add responder policy res_pol_drop_NorthKorea "CLIENT.IP.SRC.MATCHES_LOCATION(\"*.KP.*.*.*.*\")" DROP -logAction log_locationInformation

Citrix ADC / NetScaler:记录有关客户端位置的详细信息

输出看起来像这样:

img

拒绝或允许来自多个国家/地区的访问

如果您想删除所有但连接来自奥地利的连接,您可以创建一个带有表达式的策略

CLIENT.IP.SRC.MATCHES_LOCATION(\"*.AT.*.*.*.*\").NOT

但是几个呢?比方说,保加利亚、葡萄牙和爱尔兰?

CLIENT.IP.SRC.MATCHES_LOCATION(\"*.BG.*.*.*.*\").NOT||CLIENT.IP.SRC.MATCHES_LOCATION(\"*.PT.*.*.*.*\").NOT ||CLIENT.IP.SRC.MATCHES_LOCATION(\"*.IE.*.*.*.*\").NOT

基于用户国家/地区的位置数据库来阻止对网站的访问

1.从http://dev.maxmind.com/geoip/legacy/geolite/下载CSV格式的GeoLite国家/地区数据库

2.上传到NetScaler设备上的/var/geoip文件夹(手动创建)

3.运行以下命令以导入位置文件:

add locationfile /var/geoip/GeoIPCountryWhois.csv -format GeoIP-Country

4.运行以下命令以验证文件是否已导入:

# show locationparameter
Static Proximity
—————-
Database mode: Internal
Flushing: Idle; Loading: Idle
Context: geographic
Qualifier 1 label: Continent
Qualifier 2 label: Country
Qualifier 3 label: Region
Qualifier 4 label: City
Qualifier 5 label: ISP
Qualifier 6 label: Organization
Location file (format: geoip-country):
/var/geoip/GeoIPCountryWhois.csv
Lines: 150241 Warnings: 0 Errors: 0
Current static entries: 150241 Current custom entries: 0
Done
  1. 运行以下命令来创建“响应者”策略:
    add responder policy Drop-Non-American-IPs_resppol "CLIENT.IP.SRC.MATCHES_LOCATION(\"*.US.*.*.*.*\").NOT && CLIENT.IP.SRC.MATCHES_LOCATION(\"*.CA.*.*.*.*\").NOT" DROP
    
  2. 运行以下命令,将策略绑定到虚拟服务器:
    bind lb vserver -policyName Drop-Non-American-IPs_resppol -priority 100
    
  3. 运行以下命令允许通配符查询:
    set locationParameter -matchWildcardtoany YES
    
  4. 可选:将本地IP添加到位置->自定义条目:
    add location 10.0.0.0 10.255.255.255 "North America.CA.*.*.*.*"
    

基于http头部的IP使用策略

  1. 创建patset

在responder中调用patset去判断IP地址属于CA或者US.

add policy patset ps_geo_country
bind policy patset ps_geo_country CA -index 1
bind policy patset ps_geo_country US -index 2
  1. 创建策略

在HTTP请求头部中提取x-realm-sec-cip这个头部的值并转换为IP,同时判断第一个字符的中的IP是不是属于CA或者US如果不属于则拒绝.

add responder policy res_pl_drop_bad_geo "HTTP.REQ.HEADER(\"x-realm-sec-cip\").TYPECAST_IP_ADDRESS_T.LOCATION.GET(1).EQUALS_ANY(\"ps_geo_country\").NOT" NOOP -logAction LOG_SRC_LOCATION
Work Blog » NetScaler Block Access Using Location Database Based on User’s Country
分享到:
赞(0) 打赏

评论抢沙发

评论前必须登录!

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏