使用地理位置
准备环境
出奇的简单: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:
add locationFile /var/netscaler/inbuilt_db/Citrix_Netscaler_InBuilt_GeoIP_DB_IPv4
set locationParameter -matchWildcardtoany YES
这将在 /var/netscaler/locdb/nslocation.db 创建一个位置文件。当然,同样可以使用 GUI 来完成。第二行代码将允许通配符匹配位置,即 .AT....* 代表奥地利,而不是指定欧洲。
这个数据库可以很容易地测试。
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
您可能会看到,我添加了自定义日志记录策略。这当然是一个可选步骤。日志记录策略如下所示:
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
输出看起来像这样:
拒绝或允许来自多个国家/地区的访问
如果您想删除所有但连接来自奥地利的连接,您可以创建一个带有表达式的策略
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
- 运行以下命令来创建“响应者”策略:
add responder policy Drop-Non-American-IPs_resppol "CLIENT.IP.SRC.MATCHES_LOCATION(\"*.US.*.*.*.*\").NOT && CLIENT.IP.SRC.MATCHES_LOCATION(\"*.CA.*.*.*.*\").NOT" DROP
- 运行以下命令,将策略绑定到虚拟服务器:
bind lb vserver -policyName Drop-Non-American-IPs_resppol -priority 100
- 运行以下命令允许通配符查询:
set locationParameter -matchWildcardtoany YES
- 可选:将本地IP添加到位置->自定义条目:
add location 10.0.0.0 10.255.255.255 "North America.CA.*.*.*.*"
基于http头部的IP使用策略
- 创建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
- 创建策略
在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
文章目录
评论抢沙发