mirror of https://github.com/bjdgyc/anylink.git
增加LinkAcl功能,可以限制访问端口
This commit is contained in:
parent
9e0da33c6a
commit
ef95b1f927
|
@ -122,7 +122,7 @@ sh bridge-init.sh
|
||||||
|
|
||||||
## Soft
|
## Soft
|
||||||
|
|
||||||
相关软件下载: https://gitee.com/bjdgyc/anylink-soft
|
相关软件下载: QQ群共享文件: 567510628
|
||||||
|
|
||||||
## Discussion
|
## Discussion
|
||||||
|
|
||||||
|
|
|
@ -2,5 +2,5 @@ package base
|
||||||
|
|
||||||
const (
|
const (
|
||||||
APP_NAME = "AnyLink"
|
APP_NAME = "AnyLink"
|
||||||
APP_VER = "0.1.0"
|
APP_VER = "0.1.1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -83,8 +83,9 @@ func SetGroup(g *Group) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("RouteInclude 错误" + err.Error())
|
return errors.New("RouteInclude 错误" + err.Error())
|
||||||
}
|
}
|
||||||
vn := ValData{Val: v.Val, IpMask: ipMask}
|
|
||||||
routeInclude = append(routeInclude, vn)
|
v.IpMask = ipMask
|
||||||
|
routeInclude = append(routeInclude, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.RouteInclude = routeInclude
|
g.RouteInclude = routeInclude
|
||||||
|
@ -95,8 +96,8 @@ func SetGroup(g *Group) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("RouteExclude 错误" + err.Error())
|
return errors.New("RouteExclude 错误" + err.Error())
|
||||||
}
|
}
|
||||||
vn := ValData{Val: v.Val, IpMask: ipMask}
|
v.IpMask = ipMask
|
||||||
routeExclude = append(routeExclude, vn)
|
routeExclude = append(routeExclude, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.RouteExclude = routeExclude
|
g.RouteExclude = routeExclude
|
||||||
|
@ -108,9 +109,8 @@ func SetGroup(g *Group) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.New("GroupLinkAcl 错误" + err.Error())
|
return errors.New("GroupLinkAcl 错误" + err.Error())
|
||||||
}
|
}
|
||||||
vn := v
|
v.IpNet = ipNet
|
||||||
vn.IpNet = ipNet
|
linkAcl = append(linkAcl, v)
|
||||||
linkAcl = append(linkAcl, vn)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g.LinkAcl = linkAcl
|
g.LinkAcl = linkAcl
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Title</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,6 +1,10 @@
|
||||||
package handler
|
package handler
|
||||||
|
|
||||||
import "github.com/bjdgyc/anylink/sessdata"
|
import (
|
||||||
|
"github.com/bjdgyc/anylink/dbdata"
|
||||||
|
"github.com/bjdgyc/anylink/sessdata"
|
||||||
|
"github.com/songgao/water/waterutil"
|
||||||
|
)
|
||||||
|
|
||||||
func payloadIn(cSess *sessdata.ConnSession, lType sessdata.LType, pType byte, data []byte) bool {
|
func payloadIn(cSess *sessdata.ConnSession, lType sessdata.LType, pType byte, data []byte) bool {
|
||||||
payload := &sessdata.Payload{
|
payload := &sessdata.Payload{
|
||||||
|
@ -13,8 +17,14 @@ func payloadIn(cSess *sessdata.ConnSession, lType sessdata.LType, pType byte, da
|
||||||
}
|
}
|
||||||
|
|
||||||
func payloadInData(cSess *sessdata.ConnSession, payload *sessdata.Payload) bool {
|
func payloadInData(cSess *sessdata.ConnSession, payload *sessdata.Payload) bool {
|
||||||
closed := false
|
// 进行Acl规则判断
|
||||||
|
check := checkLinkAcl(cSess.Group, payload)
|
||||||
|
if !check {
|
||||||
|
// 校验不通过直接丢弃
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
closed := false
|
||||||
select {
|
select {
|
||||||
case cSess.PayloadIn <- payload:
|
case cSess.PayloadIn <- payload:
|
||||||
case <-cSess.CloseChan:
|
case <-cSess.CloseChan:
|
||||||
|
@ -45,3 +55,37 @@ func payloadOutData(cSess *sessdata.ConnSession, payload *sessdata.Payload) bool
|
||||||
|
|
||||||
return closed
|
return closed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Acl规则校验
|
||||||
|
func checkLinkAcl(group *dbdata.Group, payload *sessdata.Payload) bool {
|
||||||
|
if payload.LType == sessdata.LTypeIPData && payload.PType == 0x00 && len(group.LinkAcl) > 0 {
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
ip_dst := waterutil.IPv4Destination(payload.Data)
|
||||||
|
ip_port := waterutil.IPv4DestinationPort(payload.Data)
|
||||||
|
// fmt.Println("sent:", ip_dst, ip_port)
|
||||||
|
|
||||||
|
// 优先放行dns端口
|
||||||
|
for _, v := range group.ClientDns {
|
||||||
|
if v.Val == ip_dst.String() && ip_port == 53 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range group.LinkAcl {
|
||||||
|
// 循环判断ip和端口
|
||||||
|
if v.IpNet.Contains(ip_dst) {
|
||||||
|
if v.Port == ip_port || v.Port == 0 {
|
||||||
|
if v.Action == dbdata.Allow {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue