mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-11-04 19:16:22 +08:00 
			
		
		
		
	增加LinkAcl功能,可以限制访问端口
This commit is contained in:
		@@ -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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user