This commit is contained in:
aozhiwei 2020-10-28 16:26:18 +08:00
parent 1ba269fb20
commit 156634c3e8
5 changed files with 196 additions and 19 deletions

View File

@ -7,7 +7,10 @@ import (
const ( const (
MT_SERVER_INFO = 0 MT_SERVER_INFO = 0
MT_CONF = iota MT_IP_WHITE_LIST = iota
MT_IP_BLACK_LIST = iota
MT_LAUNCH_WHITE_LIST = iota
MT_LAUNCH_BLACK_LIST = iota
MT_MAX = iota MT_MAX = iota
) )
@ -28,6 +31,26 @@ func (this *MetaMgr) Init() *MetaMgr {
Idx: MT_SERVER_INFO, Idx: MT_SERVER_INFO,
RawMeta: (*mt.ServerInfoMetas)(nil), RawMeta: (*mt.ServerInfoMetas)(nil),
WrapMeta: (*MtwServerInfo)(nil)}, WrapMeta: (*MtwServerInfo)(nil)},
f5.MetaClass{
FileName: configDir + "ip_whitelist.json",
Idx: MT_IP_WHITE_LIST,
RawMeta: (*mt.IpWhiteListMetas)(nil),
WrapMeta: (*MtwIpWhiteList)(nil)},
f5.MetaClass{
FileName: configDir + "ip_blacklist.json",
Idx: MT_IP_BLACK_LIST,
RawMeta: (*mt.IpBlackListMetas)(nil),
WrapMeta: (*MtwIpBlackList)(nil)},
f5.MetaClass{
FileName: configDir + "launch_whitelist.json",
Idx: MT_LAUNCH_BLACK_LIST,
RawMeta: (*mt.LaunchBlackListMetas)(nil),
WrapMeta: (*MtwLaunchBlackList)(nil)},
f5.MetaClass{
FileName: configDir + "launch_blacklist.json",
Idx: MT_LAUNCH_BLACK_LIST,
RawMeta: (*mt.LaunchBlackListMetas)(nil),
WrapMeta: (*MtwLaunchBlackList)(nil)},
} }
this.MetaMgr.RegisterMetaClasses(metaClasses) this.MetaMgr.RegisterMetaClasses(metaClasses)
this.Load() this.Load()
@ -46,3 +69,39 @@ func (this *MetaMgr) GetServer(instance_id int32) *MtwServerInfo {
return nil return nil
} }
} }
func (this *MetaMgr) GetIpWhiteList() *MtwIpWhiteList {
v, ok := this.MetaMgr.GetMetaById(MT_IP_WHITE_LIST, 1).(*MtwIpWhiteList)
if ok {
return v
} else {
return nil
}
}
func (this *MetaMgr) GetIpBlackList() *MtwIpBlackList {
v, ok := this.MetaMgr.GetMetaById(MT_IP_BLACK_LIST, 1).(*MtwIpBlackList)
if ok {
return v
} else {
return nil
}
}
func (this *MetaMgr) GetLaunchWhiteList() *MtwLaunchWhiteList {
v, ok := this.MetaMgr.GetMetaById(MT_LAUNCH_WHITE_LIST, 1).(*MtwLaunchWhiteList)
if ok {
return v
} else {
return nil
}
}
func (this *MetaMgr) GetLaunchBlackList() *MtwLaunchBlackList {
v, ok := this.MetaMgr.GetMetaById(MT_LAUNCH_BLACK_LIST, 1).(*MtwLaunchBlackList)
if ok {
return v
} else {
return nil
}
}

View File

@ -6,10 +6,18 @@ type MtwServerInfo struct {
*mt.ServerInfo *mt.ServerInfo
} }
type MtwWhiteList struct { type MtwIpWhiteList struct {
*mt.WhiteList *mt.IpWhiteList
} }
type MtwBlackList struct { type MtwIpBlackList struct {
*mt.BlackList *mt.IpBlackList
}
type MtwLaunchWhiteList struct {
*mt.LaunchWhiteList
}
type MtwLaunchBlackList struct {
*mt.LaunchBlackList
} }

View File

@ -1,20 +1,110 @@
package main package main
type RiskMgr struct { import (
"net/http"
"sync"
"fmt"
"q5"
)
type RiskMgr struct {
ipWhiteList map[string]int32
ipWhiteListMutex sync.RWMutex
ipBlackList map[string]int32
ipBlackListMutex sync.RWMutex
launchWhiteList map[string]int32
launchWhiteListMutex sync.RWMutex
launchBlackList map[string]int32
launchBlackListMutex sync.RWMutex
} }
func (this* RiskMgr) Init() *RiskMgr { func (this* RiskMgr) Init() *RiskMgr {
this.ipWhiteListMutex.Lock()
this.ipBlackListMutex.Lock()
this.launchWhiteListMutex.Lock()
this.launchBlackListMutex.Lock()
defer this.ipWhiteListMutex.Unlock()
defer this.ipBlackListMutex.Unlock()
defer this.launchWhiteListMutex.Unlock()
defer this.launchBlackListMutex.Unlock()
this.ipWhiteList = make(map[string]int32)
this.ipBlackList = make(map[string]int32)
this.launchWhiteList = make(map[string]int32)
this.launchBlackList = make(map[string]int32)
for _, val := range G.MetaMgr.GetIpWhiteList().GetList() {
this.ipWhiteList[val] = 1
}
for _, val := range G.MetaMgr.GetIpBlackList().GetList() {
this.ipBlackList[val] = 1
}
for _, val := range G.MetaMgr.GetLaunchWhiteList().GetList() {
this.launchWhiteList[val] = 1
}
for _, val := range G.MetaMgr.GetLaunchBlackList().GetList() {
this.launchBlackList[val] = 1
}
G.HttpServer.RegisterHandle("Analyse", "isOpen", this.__analyseIsOpen)
return this return this
} }
func (this* RiskMgr) UnInit() { func (this* RiskMgr) UnInit() {
} }
func (this* RiskMgr) InWhiteList(ip string) bool { func (this* RiskMgr) InIpWhiteList(ip string) bool {
return false this.ipWhiteListMutex.Lock()
defer this.ipWhiteListMutex.Unlock()
_, ok := this.ipWhiteList[ip]
return ok
} }
func (this* RiskMgr) InBlackList(ip string) bool { func (this* RiskMgr) InIpBlackList(ip string) bool {
return false this.ipBlackListMutex.Lock()
defer this.ipBlackListMutex.Unlock()
_, ok := this.ipBlackList[ip]
return ok
}
func (this* RiskMgr) InLaunchWhiteList(launchInfo string) bool {
this.launchWhiteListMutex.Lock()
defer this.launchWhiteListMutex.Unlock()
_, ok := this.launchWhiteList[launchInfo]
return ok
}
func (this* RiskMgr) InLaunchBlackList(launchInfo string) bool {
this.launchBlackListMutex.Lock()
defer this.launchBlackListMutex.Unlock()
_, ok := this.launchBlackList[launchInfo]
return ok
}
func (this *RiskMgr) __analyseIsOpen(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
w.Write([]byte(fmt.Sprintf(`{"errcode":0, "errmsg":"", "is_open":%d}`, 1)))
return
}
remoteAddr := q5.GetRequestRemoteAddr(r)
if G.RiskMgr.InIpWhiteList(remoteAddr) {
w.Write([]byte(fmt.Sprintf(`{"errcode":0, "errmsg":"", "is_open":%d}`, 1)))
return
}
if G.RiskMgr.InIpBlackList(remoteAddr) {
w.Write([]byte(fmt.Sprintf(`{"errcode":0, "errmsg":"", "is_open":%d}`, 0)))
return
}
launchInfo := q5.GetPostBody(r).GetString()
if G.RiskMgr.InLaunchWhiteList(launchInfo) {
w.Write([]byte(fmt.Sprintf(`{"errcode":0, "errmsg":"", "is_open":%d}`, 1)))
return
}
if G.RiskMgr.InLaunchBlackList(launchInfo) {
w.Write([]byte(fmt.Sprintf(`{"errcode":0, "errmsg":"", "is_open":%d}`, 0)))
return
}
} }

View File

@ -14,22 +14,42 @@ message ServerInfoMetas
repeated ServerInfo values = 1; repeated ServerInfo values = 1;
} }
message WhiteList message IpWhiteList
{ {
repeated string ip_tables = 1; repeated string list = 1;
} }
message WhiteListMetas message IpWhiteListMetas
{ {
repeated WhiteList values = 1; repeated IpWhiteList values = 1;
} }
message BlackList message IpBlackList
{ {
repeated string ip_tables = 1; repeated string list = 1;
} }
message BlackListMetas message IpBlackListMetas
{ {
repeated WhiteList values = 1; repeated IpWhiteList values = 1;
}
message LaunchWhiteList
{
repeated string list = 1;
}
message LaunchWhiteListMetas
{
repeated LaunchWhiteList values = 1;
}
message LaunchBlackList
{
repeated string list = 1;
}
message LaunchBlackListMetas
{
repeated IpWhiteList values = 1;
} }

2
third_party/q5 vendored

@ -1 +1 @@
Subproject commit 7442ad5d81333a6a5c6968dc0df5b1f86e9d4d73 Subproject commit 933ed5c972526defdfc035714f769ac10e0ce8c5