mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	Linux下自动添加端口到Firewalld
This commit is contained in:
		@@ -349,10 +349,18 @@ func (this *APINode) listenPorts(apiNode *models.APINode) (isListening bool) {
 | 
				
			|||||||
		remotelogs.Error("API_NODE", "decode http config: "+err.Error())
 | 
							remotelogs.Error("API_NODE", "decode http config: "+err.Error())
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						var ports = []int{}
 | 
				
			||||||
	isListening = false
 | 
						isListening = false
 | 
				
			||||||
	if httpConfig != nil && httpConfig.IsOn && len(httpConfig.Listen) > 0 {
 | 
						if httpConfig != nil && httpConfig.IsOn && len(httpConfig.Listen) > 0 {
 | 
				
			||||||
		for _, listen := range httpConfig.Listen {
 | 
							for _, listen := range httpConfig.Listen {
 | 
				
			||||||
			for _, addr := range listen.Addresses() {
 | 
								for _, addr := range listen.Addresses() {
 | 
				
			||||||
 | 
									// 收集Port
 | 
				
			||||||
 | 
									_, port, _ := net.SplitHostPort(addr)
 | 
				
			||||||
 | 
									var portInt = types.Int(port)
 | 
				
			||||||
 | 
									if portInt > 0 && !lists.ContainsInt(ports, portInt) {
 | 
				
			||||||
 | 
										ports = append(ports, portInt)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				listener, err := net.Listen("tcp", addr)
 | 
									listener, err := net.Listen("tcp", addr)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					remotelogs.Error("API_NODE", "listening '"+addr+"' failed: "+err.Error()+", we will try to listen port only")
 | 
										remotelogs.Error("API_NODE", "listening '"+addr+"' failed: "+err.Error()+", we will try to listen port only")
 | 
				
			||||||
@@ -401,6 +409,13 @@ func (this *APINode) listenPorts(apiNode *models.APINode) (isListening bool) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		for _, listen := range httpsConfig.Listen {
 | 
							for _, listen := range httpsConfig.Listen {
 | 
				
			||||||
			for _, addr := range listen.Addresses() {
 | 
								for _, addr := range listen.Addresses() {
 | 
				
			||||||
 | 
									// 收集Port
 | 
				
			||||||
 | 
									_, port, _ := net.SplitHostPort(addr)
 | 
				
			||||||
 | 
									var portInt = types.Int(port)
 | 
				
			||||||
 | 
									if portInt > 0 && !lists.ContainsInt(ports, portInt) {
 | 
				
			||||||
 | 
										ports = append(ports, portInt)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				listener, err := net.Listen("tcp", addr)
 | 
									listener, err := net.Listen("tcp", addr)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					remotelogs.Error("API_NODE", "listening '"+addr+"' failed: "+err.Error()+", we will try to listen port only")
 | 
										remotelogs.Error("API_NODE", "listening '"+addr+"' failed: "+err.Error()+", we will try to listen port only")
 | 
				
			||||||
@@ -440,6 +455,13 @@ func (this *APINode) listenPorts(apiNode *models.APINode) (isListening bool) {
 | 
				
			|||||||
	if restHTTPConfig != nil && restHTTPConfig.IsOn && len(restHTTPConfig.Listen) > 0 {
 | 
						if restHTTPConfig != nil && restHTTPConfig.IsOn && len(restHTTPConfig.Listen) > 0 {
 | 
				
			||||||
		for _, listen := range restHTTPConfig.Listen {
 | 
							for _, listen := range restHTTPConfig.Listen {
 | 
				
			||||||
			for _, addr := range listen.Addresses() {
 | 
								for _, addr := range listen.Addresses() {
 | 
				
			||||||
 | 
									// 收集Port
 | 
				
			||||||
 | 
									_, port, _ := net.SplitHostPort(addr)
 | 
				
			||||||
 | 
									var portInt = types.Int(port)
 | 
				
			||||||
 | 
									if portInt > 0 && !lists.ContainsInt(ports, portInt) {
 | 
				
			||||||
 | 
										ports = append(ports, portInt)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				listener, err := net.Listen("tcp", addr)
 | 
									listener, err := net.Listen("tcp", addr)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					remotelogs.Error("API_NODE", "listening REST 'http://"+addr+"' failed: "+err.Error())
 | 
										remotelogs.Error("API_NODE", "listening REST 'http://"+addr+"' failed: "+err.Error())
 | 
				
			||||||
@@ -473,6 +495,13 @@ func (this *APINode) listenPorts(apiNode *models.APINode) (isListening bool) {
 | 
				
			|||||||
		len(restHTTPSConfig.SSLPolicy.Certs) > 0 {
 | 
							len(restHTTPSConfig.SSLPolicy.Certs) > 0 {
 | 
				
			||||||
		for _, listen := range restHTTPSConfig.Listen {
 | 
							for _, listen := range restHTTPSConfig.Listen {
 | 
				
			||||||
			for _, addr := range listen.Addresses() {
 | 
								for _, addr := range listen.Addresses() {
 | 
				
			||||||
 | 
									// 收集Port
 | 
				
			||||||
 | 
									_, port, _ := net.SplitHostPort(addr)
 | 
				
			||||||
 | 
									var portInt = types.Int(port)
 | 
				
			||||||
 | 
									if portInt > 0 && !lists.ContainsInt(ports, portInt) {
 | 
				
			||||||
 | 
										ports = append(ports, portInt)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				listener, err := net.Listen("tcp", addr)
 | 
									listener, err := net.Listen("tcp", addr)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					remotelogs.Error("API_NODE", "listening REST 'https://"+addr+"' failed: "+err.Error())
 | 
										remotelogs.Error("API_NODE", "listening REST 'https://"+addr+"' failed: "+err.Error())
 | 
				
			||||||
@@ -500,6 +529,11 @@ func (this *APINode) listenPorts(apiNode *models.APINode) (isListening bool) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// add to local firewall
 | 
				
			||||||
 | 
						if len(ports) > 0 {
 | 
				
			||||||
 | 
							utils.AddPortsToFirewall(ports)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										28
									
								
								internal/utils/firewall.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								internal/utils/firewall.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package utils
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/types"
 | 
				
			||||||
 | 
						"os/exec"
 | 
				
			||||||
 | 
						"runtime"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func AddPortsToFirewall(ports []int) {
 | 
				
			||||||
 | 
						for _, port := range ports {
 | 
				
			||||||
 | 
							// Linux
 | 
				
			||||||
 | 
							if runtime.GOOS == "linux" {
 | 
				
			||||||
 | 
								// firewalld
 | 
				
			||||||
 | 
								firewallCmd, _ := exec.LookPath("firewall-cmd")
 | 
				
			||||||
 | 
								if len(firewallCmd) > 0 {
 | 
				
			||||||
 | 
									err := exec.Command(firewallCmd, "--add-port="+types.String(port)+"/tcp").Run()
 | 
				
			||||||
 | 
									if err == nil {
 | 
				
			||||||
 | 
										remotelogs.Println("API_NODE", "add port '"+types.String(port)+"' to firewalld")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										_ = exec.Command(firewallCmd, "--add-port="+types.String(port)+"/tcp", "--permanent").Run()
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user