检查本地防火墙
(message *pb.NodeStreamMessage)
| 367 | |
| 368 | // 检查本地防火墙 |
| 369 | func (this *APIStream) handleCheckLocalFirewall(message *pb.NodeStreamMessage) error { |
| 370 | var dataMessage = &messageconfigs.CheckLocalFirewallMessage{} |
| 371 | err := json.Unmarshal(message.DataJSON, dataMessage) |
| 372 | if err != nil { |
| 373 | this.replyFail(message.RequestId, "decode message data failed: "+err.Error()) |
| 374 | return nil |
| 375 | } |
| 376 | |
| 377 | // nft |
| 378 | if dataMessage.Name == "nftables" { |
| 379 | if runtime.GOOS != "linux" { |
| 380 | this.replyFail(message.RequestId, "not Linux system") |
| 381 | return nil |
| 382 | } |
| 383 | |
| 384 | nft, err := executils.LookPath("nft") |
| 385 | if err != nil { |
| 386 | this.replyFail(message.RequestId, "'nft' not found: "+err.Error()) |
| 387 | return nil |
| 388 | } |
| 389 | |
| 390 | var cmd = executils.NewTimeoutCmd(10*time.Second, nft, "--version") |
| 391 | cmd.WithStdout() |
| 392 | err = cmd.Run() |
| 393 | if err != nil { |
| 394 | this.replyFail(message.RequestId, "get version failed: "+err.Error()) |
| 395 | return nil |
| 396 | } |
| 397 | |
| 398 | var outputString = cmd.Stdout() |
| 399 | var versionMatches = regexp.MustCompile(`nftables v([\d.]+)`).FindStringSubmatch(outputString) |
| 400 | if len(versionMatches) <= 1 { |
| 401 | this.replyFail(message.RequestId, "can not get nft version") |
| 402 | return nil |
| 403 | } |
| 404 | var version = versionMatches[1] |
| 405 | |
| 406 | var result = maps.Map{ |
| 407 | "version": version, |
| 408 | } |
| 409 | |
| 410 | var protectionConfig = sharedNodeConfig.DDoSProtection |
| 411 | err = firewalls.SharedDDoSProtectionManager.Apply(protectionConfig) |
| 412 | if err != nil { |
| 413 | this.replyFail(message.RequestId, dataMessage.Name+" was installed, but apply DDoS protection config failed: "+err.Error()) |
| 414 | } else { |
| 415 | this.replyOk(message.RequestId, string(result.AsJSON())) |
| 416 | } |
| 417 | } else { |
| 418 | this.replyFail(message.RequestId, "invalid firewall name '"+dataMessage.Name+"'") |
| 419 | } |
| 420 | |
| 421 | return nil |
| 422 | } |
| 423 | |
| 424 | // 修改API地址 |
| 425 | func (this *APIStream) handleChangeAPINode(message *pb.NodeStreamMessage) error { |
no test coverage detected