Skip to content

Commit 583c1fe

Browse files
committed
feat: 兼容ufw
1 parent 7047d4b commit 583c1fe

File tree

5 files changed

+83
-15
lines changed

5 files changed

+83
-15
lines changed

internal/service/installer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ func (i *installer) downloadPanel(ctx context.Context, cfg *types.InstallConfig)
507507
}
508508

509509
func (i *installer) configureFirewall(ctx context.Context, cfg *types.InstallConfig) error {
510-
// 安装firewalld
510+
// 安装防火墙
511511
if err := i.firewall.Install(ctx); err != nil {
512512
return err
513513
}

internal/system/firewall.go

Lines changed: 77 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,37 @@ func (f *firewall) Install(ctx context.Context) error {
4545
return fmt.Errorf("%s", i18n.T.Get("Unsupported operating system"))
4646
}
4747

48-
// Debian/Ubuntu 需要先禁用并卸载 ufw
4948
if info.OS == types.OSDebian || info.OS == types.OSUbuntu {
50-
_, _ = f.executor.Run(ctx, "ufw", "disable")
51-
_, _ = f.executor.Run(ctx, "systemctl", "stop", "ufw")
52-
_, _ = f.executor.Run(ctx, "systemctl", "disable", "ufw")
53-
_ = pkgMgr.Remove(ctx, "ufw")
54-
55-
// 还有个傻逼 cloud-init 和 firewalld 冲突
56-
_ = pkgMgr.Remove(ctx, "cloud-init")
49+
return pkgMgr.Install(ctx, "ufw")
5750
}
5851

5952
return pkgMgr.Install(ctx, "firewalld")
6053
}
6154

6255
func (f *firewall) Enable(ctx context.Context) error {
56+
ufw, err := f.isUFW(ctx)
57+
if err != nil {
58+
return err
59+
}
60+
61+
if ufw {
62+
result, err := f.executor.Run(ctx, "ufw", "--force", "enable")
63+
if err != nil {
64+
return err
65+
}
66+
if result.ExitCode != 0 {
67+
return fmt.Errorf("%s: %s", i18n.T.Get("Failed to enable firewall"), result.Stderr)
68+
}
69+
return nil
70+
}
71+
72+
// firewalld
6373
result, err := f.executor.Run(ctx, "systemctl", "enable", "--now", "firewalld")
6474
if err != nil {
6575
return err
6676
}
6777
if result.ExitCode != 0 {
68-
return fmt.Errorf("%s: %s", i18n.T.Get("Failed to enable firewalld"), result.Stderr)
78+
return fmt.Errorf("%s: %s", i18n.T.Get("Failed to enable firewall"), result.Stderr)
6979
}
7080

7181
// 设置默认zone
@@ -74,7 +84,24 @@ func (f *firewall) Enable(ctx context.Context) error {
7484
}
7585

7686
func (f *firewall) AddPort(ctx context.Context, port int, protocol string) error {
87+
ufw, err := f.isUFW(ctx)
88+
if err != nil {
89+
return err
90+
}
91+
7792
portStr := fmt.Sprintf("%d/%s", port, protocol)
93+
94+
if ufw {
95+
result, err := f.executor.Run(ctx, "ufw", "allow", portStr)
96+
if err != nil {
97+
return err
98+
}
99+
if result.ExitCode != 0 {
100+
return fmt.Errorf("%s %s: %s", i18n.T.Get("Failed to add port"), portStr, result.Stderr)
101+
}
102+
return nil
103+
}
104+
78105
result, err := f.executor.Run(ctx, "firewall-cmd", "--permanent", "--zone=public", "--add-port="+portStr)
79106
if err != nil {
80107
return err
@@ -86,7 +113,24 @@ func (f *firewall) AddPort(ctx context.Context, port int, protocol string) error
86113
}
87114

88115
func (f *firewall) RemovePort(ctx context.Context, port int, protocol string) error {
116+
ufw, err := f.isUFW(ctx)
117+
if err != nil {
118+
return err
119+
}
120+
89121
portStr := fmt.Sprintf("%d/%s", port, protocol)
122+
123+
if ufw {
124+
result, err := f.executor.Run(ctx, "ufw", "delete", "allow", portStr)
125+
if err != nil {
126+
return err
127+
}
128+
if result.ExitCode != 0 {
129+
return fmt.Errorf("%s %s: %s", i18n.T.Get("Failed to remove port"), portStr, result.Stderr)
130+
}
131+
return nil
132+
}
133+
90134
result, err := f.executor.Run(ctx, "firewall-cmd", "--permanent", "--zone=public", "--remove-port="+portStr)
91135
if err != nil {
92136
return err
@@ -98,6 +142,22 @@ func (f *firewall) RemovePort(ctx context.Context, port int, protocol string) er
98142
}
99143

100144
func (f *firewall) Reload(ctx context.Context) error {
145+
ufw, err := f.isUFW(ctx)
146+
if err != nil {
147+
return err
148+
}
149+
150+
if ufw {
151+
result, err := f.executor.Run(ctx, "ufw", "reload")
152+
if err != nil {
153+
return err
154+
}
155+
if result.ExitCode != 0 {
156+
return fmt.Errorf("%s: %s", i18n.T.Get("Failed to reload firewall"), result.Stderr)
157+
}
158+
return nil
159+
}
160+
101161
result, err := f.executor.Run(ctx, "firewall-cmd", "--reload")
102162
if err != nil {
103163
return err
@@ -107,3 +167,11 @@ func (f *firewall) Reload(ctx context.Context) error {
107167
}
108168
return nil
109169
}
170+
171+
func (f *firewall) isUFW(ctx context.Context) (bool, error) {
172+
info, err := f.detector.Detect(ctx)
173+
if err != nil {
174+
return false, err
175+
}
176+
return info.OS == types.OSDebian || info.OS == types.OSUbuntu, nil
177+
}

pkg/embed/locales/helper.pot

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ msgid "Failed to enable"
184184
msgstr ""
185185

186186
#: internal/system/firewall.go:65
187-
msgid "Failed to enable firewalld"
187+
msgid "Failed to enable firewall"
188188
msgstr ""
189189

190190
#: internal/service/mounter.go:147

pkg/embed/locales/zh_CN/helper.po

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,8 @@ msgid "Failed to enable"
192192
msgstr "启用失败"
193193

194194
#: internal/system/firewall.go:65
195-
msgid "Failed to enable firewalld"
196-
msgstr "启用 firewalld 失败"
195+
msgid "Failed to enable firewall"
196+
msgstr "启用防火墙失败"
197197

198198
#: internal/service/mounter.go:147
199199
msgid "Failed to get UUID"

pkg/embed/locales/zh_TW/helper.po

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,8 @@ msgid "Failed to enable"
192192
msgstr "啟用失敗"
193193

194194
#: internal/system/firewall.go:65
195-
msgid "Failed to enable firewalld"
196-
msgstr "啟用 firewalld 失敗"
195+
msgid "Failed to enable firewall"
196+
msgstr "啟用防火牆失敗"
197197

198198
#: internal/service/mounter.go:147
199199
msgid "Failed to get UUID"

0 commit comments

Comments
 (0)