11package firewall
22
33import (
4+ "fmt"
5+
6+ "github.com/1Panel-dev/1Panel/agent/app/dto"
7+ "github.com/1Panel-dev/1Panel/agent/app/service"
8+ "github.com/1Panel-dev/1Panel/agent/global"
49 "github.com/1Panel-dev/1Panel/agent/utils/firewall"
510 "github.com/1Panel-dev/1Panel/agent/utils/firewall/client/iptables"
611)
@@ -12,13 +17,73 @@ func Init() {
1217 }
1318 clientName := client .Name ()
1419 if clientName == "ufw" || clientName == "iptables" {
15- _ = iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelForward , iptables .ForwardFileName )
16- _ = iptables .LoadRulesFromFile (iptables .NatTab , iptables .Chain1PanelPreRouting , iptables .ForwardFileName1 )
17- _ = iptables .LoadRulesFromFile (iptables .NatTab , iptables .Chain1PanelPostRouting , iptables .ForwardFileName2 )
20+ if err := iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelForward , iptables .ForwardFileName ); err != nil {
21+ global .LOG .Errorf ("load forward rules from file failed, err: %v" , err )
22+ return
23+ }
24+ if err := iptables .LoadRulesFromFile (iptables .NatTab , iptables .Chain1PanelPreRouting , iptables .ForwardFileName1 ); err != nil {
25+ global .LOG .Errorf ("load prerouting rules from file failed, err: %v" , err )
26+ return
27+ }
28+ if err := iptables .LoadRulesFromFile (iptables .NatTab , iptables .Chain1PanelPostRouting , iptables .ForwardFileName2 ); err != nil {
29+ global .LOG .Errorf ("load postrouting rules from file failed, err: %v" , err )
30+ return
31+ }
32+ global .LOG .Infof ("loaded iptables rules for forward from file successfully" )
33+ }
34+ if clientName == "ufw" {
35+ _ = iptables .UnbindChain (iptables .FilterTab , iptables .ChainInput , iptables .Chain1PanelBasicAfter )
36+ _ = iptables .UnbindChain (iptables .FilterTab , iptables .ChainInput , iptables .Chain1PanelBasicBefore )
37+ _ = iptables .UnbindChain (iptables .FilterTab , iptables .ChainInput , iptables .Chain1PanelBasic )
38+ _ = iptables .UnbindChain (iptables .FilterTab , iptables .ChainInput , iptables .Chain1PanelInput )
39+ _ = iptables .UnbindChain (iptables .FilterTab , iptables .ChainOutput , iptables .Chain1PanelOutput )
1840 }
1941 if clientName == "iptables" {
20- _ = iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelBasic , iptables .BasicFileName )
21- _ = iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelInput , iptables .InputFileName )
22- _ = iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelOutput , iptables .OutputFileName )
42+ if err := iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelBasicBefore , iptables .BasicBeforeFileName ); err != nil {
43+ global .LOG .Errorf ("load basic before rules from file failed, err: %v" , err )
44+ return
45+ }
46+ if err := iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelBasic , iptables .BasicFileName ); err != nil {
47+ global .LOG .Errorf ("load basic rules from file failed, err: %v" , err )
48+ return
49+ }
50+ if err := iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelBasicAfter , iptables .BasicAfterFileName ); err != nil {
51+ global .LOG .Errorf ("load basic after rules from file failed, err: %v" , err )
52+ return
53+ }
54+ if err := iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelInput , iptables .InputFileName ); err != nil {
55+ global .LOG .Errorf ("load input rules from file failed, err: %v" , err )
56+ return
57+ }
58+ if err := iptables .LoadRulesFromFile (iptables .FilterTab , iptables .Chain1PanelOutput , iptables .OutputFileName ); err != nil {
59+ global .LOG .Errorf ("load output rules from file failed, err: %v" , err )
60+ return
61+ }
62+ global .LOG .Infof ("loaded iptables rules for basic, input and output from file successfully" )
63+
64+ panelPort := service .LoadPanelPort ()
65+ if len (panelPort ) == 0 {
66+ global .LOG .Errorf ("find 1panel service port failed" )
67+ return
68+ }
69+ if err := iptables .AddRule (iptables .FilterTab , iptables .Chain1PanelBasicBefore , fmt .Sprintf ("-p tcp -m tcp --dport %v -j ACCEPT" , panelPort )); err != nil {
70+ global .LOG .Errorf ("add port accept rule %v failed, err: %v" , panelPort , err )
71+ return
72+ }
73+
74+ iptablesService := service.IptablesService {}
75+ if err := iptablesService .Operate (dto.IptablesOp {Operate : "bind-base" }); err != nil {
76+ global .LOG .Errorf ("bind base chains failed, err: %v" , err )
77+ return
78+ }
79+ if err := iptablesService .Operate (dto.IptablesOp {Name : iptables .Chain1PanelOutput , Operate : "bind" }); err != nil {
80+ global .LOG .Errorf ("bind output chains failed, err: %v" , err )
81+ return
82+ }
83+ if err := iptablesService .Operate (dto.IptablesOp {Name : iptables .Chain1PanelInput , Operate : "bind" }); err != nil {
84+ global .LOG .Errorf ("bind input chains failed, err: %v" , err )
85+ return
86+ }
2387 }
88+
2489}
0 commit comments