mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-07 18:50:27 +08:00
WAF策略增加记录区域封禁日志选项
This commit is contained in:
@@ -1114,7 +1114,7 @@ func (this *HTTPRequest) requestRemoteAddr(supportVar bool) string {
|
|||||||
// 获取请求的客户端地址列表
|
// 获取请求的客户端地址列表
|
||||||
func (this *HTTPRequest) requestRemoteAddrs() (result []string) {
|
func (this *HTTPRequest) requestRemoteAddrs() (result []string) {
|
||||||
// X-Forwarded-For
|
// X-Forwarded-For
|
||||||
forwardedFor := this.RawReq.Header.Get("X-Forwarded-For")
|
var forwardedFor = this.RawReq.Header.Get("X-Forwarded-For")
|
||||||
if len(forwardedFor) > 0 {
|
if len(forwardedFor) > 0 {
|
||||||
commaIndex := strings.Index(forwardedFor, ",")
|
commaIndex := strings.Index(forwardedFor, ",")
|
||||||
if commaIndex > 0 {
|
if commaIndex > 0 {
|
||||||
@@ -1139,13 +1139,16 @@ func (this *HTTPRequest) requestRemoteAddrs() (result []string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remote-Addr
|
// Remote-Addr
|
||||||
remoteAddr := this.RawReq.RemoteAddr
|
{
|
||||||
host, _, err := net.SplitHostPort(remoteAddr)
|
var remoteAddr = this.RawReq.RemoteAddr
|
||||||
if err == nil {
|
host, _, err := net.SplitHostPort(remoteAddr)
|
||||||
result = append(result, host)
|
if err == nil {
|
||||||
} else {
|
result = append(result, host)
|
||||||
result = append(result, remoteAddr)
|
} else {
|
||||||
|
result = append(result, remoteAddr)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,17 +55,19 @@ func (this *HTTPRequest) doWAFRequest() (blocked bool) {
|
|||||||
|
|
||||||
var forceLog = false
|
var forceLog = false
|
||||||
var forceLogRequestBody = false
|
var forceLogRequestBody = false
|
||||||
|
var forceLogRegionDenying = false
|
||||||
if this.ReqServer.HTTPFirewallPolicy != nil &&
|
if this.ReqServer.HTTPFirewallPolicy != nil &&
|
||||||
this.ReqServer.HTTPFirewallPolicy.IsOn &&
|
this.ReqServer.HTTPFirewallPolicy.IsOn &&
|
||||||
this.ReqServer.HTTPFirewallPolicy.Log != nil &&
|
this.ReqServer.HTTPFirewallPolicy.Log != nil &&
|
||||||
this.ReqServer.HTTPFirewallPolicy.Log.IsOn {
|
this.ReqServer.HTTPFirewallPolicy.Log.IsOn {
|
||||||
forceLog = true
|
forceLog = true
|
||||||
forceLogRequestBody = this.ReqServer.HTTPFirewallPolicy.Log.RequestBody
|
forceLogRequestBody = this.ReqServer.HTTPFirewallPolicy.Log.RequestBody
|
||||||
|
forceLogRegionDenying = this.ReqServer.HTTPFirewallPolicy.Log.RegionDenying
|
||||||
}
|
}
|
||||||
|
|
||||||
// 当前服务的独立设置
|
// 当前服务的独立设置
|
||||||
if this.web.FirewallPolicy != nil && this.web.FirewallPolicy.IsOn {
|
if this.web.FirewallPolicy != nil && this.web.FirewallPolicy.IsOn {
|
||||||
blocked, breakChecking := this.checkWAFRequest(this.web.FirewallPolicy, forceLog, forceLogRequestBody)
|
blocked, breakChecking := this.checkWAFRequest(this.web.FirewallPolicy, forceLog, forceLogRequestBody, forceLogRegionDenying)
|
||||||
if blocked {
|
if blocked {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -76,7 +78,7 @@ func (this *HTTPRequest) doWAFRequest() (blocked bool) {
|
|||||||
|
|
||||||
// 公用的防火墙设置
|
// 公用的防火墙设置
|
||||||
if this.ReqServer.HTTPFirewallPolicy != nil && this.ReqServer.HTTPFirewallPolicy.IsOn {
|
if this.ReqServer.HTTPFirewallPolicy != nil && this.ReqServer.HTTPFirewallPolicy.IsOn {
|
||||||
blocked, breakChecking := this.checkWAFRequest(this.ReqServer.HTTPFirewallPolicy, forceLog, forceLogRequestBody)
|
blocked, breakChecking := this.checkWAFRequest(this.ReqServer.HTTPFirewallPolicy, forceLog, forceLogRequestBody, forceLogRegionDenying)
|
||||||
if blocked {
|
if blocked {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -88,15 +90,21 @@ func (this *HTTPRequest) doWAFRequest() (blocked bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *HTTPRequest) checkWAFRequest(firewallPolicy *firewallconfigs.HTTPFirewallPolicy, forceLog bool, logRequestBody bool) (blocked bool, breakChecking bool) {
|
func (this *HTTPRequest) checkWAFRequest(firewallPolicy *firewallconfigs.HTTPFirewallPolicy, forceLog bool, logRequestBody bool, logDenying bool) (blocked bool, breakChecking bool) {
|
||||||
// 检查配置是否为空
|
// 检查配置是否为空
|
||||||
if firewallPolicy == nil || !firewallPolicy.IsOn || firewallPolicy.Inbound == nil || !firewallPolicy.Inbound.IsOn || firewallPolicy.Mode == firewallconfigs.FirewallModeBypass {
|
if firewallPolicy == nil || !firewallPolicy.IsOn || firewallPolicy.Inbound == nil || !firewallPolicy.Inbound.IsOn || firewallPolicy.Mode == firewallconfigs.FirewallModeBypass {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查IP白名单
|
// 检查IP白名单
|
||||||
remoteAddrs := this.requestRemoteAddrs()
|
var remoteAddrs []string
|
||||||
inbound := firewallPolicy.Inbound
|
if len(this.remoteAddr) > 0 {
|
||||||
|
remoteAddrs = []string{this.remoteAddr}
|
||||||
|
} else {
|
||||||
|
remoteAddrs = this.requestRemoteAddrs()
|
||||||
|
}
|
||||||
|
|
||||||
|
var inbound = firewallPolicy.Inbound
|
||||||
if inbound == nil {
|
if inbound == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -167,13 +175,17 @@ func (this *HTTPRequest) checkWAFRequest(firewallPolicy *firewallconfigs.HTTPFir
|
|||||||
if len(regionConfig.DenyCountryIds) > 0 && len(result.Country) > 0 {
|
if len(regionConfig.DenyCountryIds) > 0 && len(result.Country) > 0 {
|
||||||
countryId := iplibrary.SharedCountryManager.Lookup(result.Country)
|
countryId := iplibrary.SharedCountryManager.Lookup(result.Country)
|
||||||
if countryId > 0 && lists.ContainsInt64(regionConfig.DenyCountryIds, countryId) {
|
if countryId > 0 && lists.ContainsInt64(regionConfig.DenyCountryIds, countryId) {
|
||||||
// TODO 可以配置对封禁的处理方式等
|
this.firewallPolicyId = firewallPolicy.Id
|
||||||
// TODO 需要记录日志信息
|
|
||||||
this.writer.WriteHeader(http.StatusForbidden)
|
this.writer.WriteHeader(http.StatusForbidden)
|
||||||
this.writer.Close()
|
this.writer.Close()
|
||||||
|
|
||||||
// 停止日志
|
// 停止日志
|
||||||
this.disableLog = true
|
if !logDenying {
|
||||||
|
this.disableLog = true
|
||||||
|
} else {
|
||||||
|
this.tags = append(this.tags, "denyCountry")
|
||||||
|
}
|
||||||
|
|
||||||
return true, false
|
return true, false
|
||||||
}
|
}
|
||||||
@@ -181,15 +193,19 @@ func (this *HTTPRequest) checkWAFRequest(firewallPolicy *firewallconfigs.HTTPFir
|
|||||||
|
|
||||||
// 检查省份封禁
|
// 检查省份封禁
|
||||||
if len(regionConfig.DenyProvinceIds) > 0 && len(result.Province) > 0 {
|
if len(regionConfig.DenyProvinceIds) > 0 && len(result.Province) > 0 {
|
||||||
provinceId := iplibrary.SharedProvinceManager.Lookup(result.Province)
|
var provinceId = iplibrary.SharedProvinceManager.Lookup(result.Province)
|
||||||
if provinceId > 0 && lists.ContainsInt64(regionConfig.DenyProvinceIds, provinceId) {
|
if provinceId > 0 && lists.ContainsInt64(regionConfig.DenyProvinceIds, provinceId) {
|
||||||
// TODO 可以配置对封禁的处理方式等
|
this.firewallPolicyId = firewallPolicy.Id
|
||||||
// TODO 需要记录日志信息
|
|
||||||
this.writer.WriteHeader(http.StatusForbidden)
|
this.writer.WriteHeader(http.StatusForbidden)
|
||||||
this.writer.Close()
|
this.writer.Close()
|
||||||
|
|
||||||
// 停止日志
|
// 停止日志
|
||||||
this.disableLog = true
|
if !logDenying {
|
||||||
|
this.disableLog = true
|
||||||
|
} else {
|
||||||
|
this.tags = append(this.tags, "denyProvince")
|
||||||
|
}
|
||||||
|
|
||||||
return true, false
|
return true, false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user