mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-12-20 06:18:56 +08:00
fix: Fix firewalld range port forwarding failure issue (#11390)
This commit is contained in:
parent
863ee5c172
commit
c08e83e5d4
14 changed files with 41 additions and 35 deletions
|
|
@ -9,7 +9,6 @@ import (
|
||||||
"github.com/1Panel-dev/1Panel/agent/global"
|
"github.com/1Panel-dev/1Panel/agent/global"
|
||||||
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
|
"github.com/1Panel-dev/1Panel/agent/utils/cmd"
|
||||||
"github.com/1Panel-dev/1Panel/agent/utils/controller"
|
"github.com/1Panel-dev/1Panel/agent/utils/controller"
|
||||||
"github.com/1Panel-dev/1Panel/agent/utils/re"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Firewall struct{}
|
type Firewall struct{}
|
||||||
|
|
@ -119,24 +118,20 @@ func (f *Firewall) ListForward() ([]FireInfo, error) {
|
||||||
}
|
}
|
||||||
var datas []FireInfo
|
var datas []FireInfo
|
||||||
for _, line := range strings.Split(stdout, "\n") {
|
for _, line := range strings.Split(stdout, "\n") {
|
||||||
line = strings.TrimFunc(line, func(r rune) bool {
|
line = strings.TrimSpace(line)
|
||||||
return r <= 32
|
parts := strings.Split(line, ":")
|
||||||
})
|
if len(parts) < 4 {
|
||||||
if re.GetRegex(re.FirewalldForwardPattern).MatchString(line) {
|
continue
|
||||||
match := re.GetRegex(re.FirewalldForwardPattern).FindStringSubmatch(line)
|
|
||||||
if len(match) < 4 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if len(match[4]) == 0 {
|
|
||||||
match[4] = "127.0.0.1"
|
|
||||||
}
|
|
||||||
datas = append(datas, FireInfo{
|
|
||||||
Port: match[1],
|
|
||||||
Protocol: match[2],
|
|
||||||
TargetIP: match[4],
|
|
||||||
TargetPort: match[3],
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
if parts[3] == "toaddr=" {
|
||||||
|
parts[3] = "127.0.0.1"
|
||||||
|
}
|
||||||
|
datas = append(datas, FireInfo{
|
||||||
|
Port: strings.TrimPrefix(parts[0], "port="),
|
||||||
|
Protocol: strings.TrimPrefix(parts[1], "proto="),
|
||||||
|
TargetIP: strings.TrimPrefix(parts[3], "toaddr="),
|
||||||
|
TargetPort: strings.TrimPrefix(parts[2], "toport="),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
return datas, nil
|
return datas, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func AddForward(protocol, srcPort, dest, destPort, iface string, save bool) error {
|
func AddForward(protocol, srcPort, dest, destPort, iface string, save bool) error {
|
||||||
// iptabels destPort 范围端口规则为:%d-%d
|
srcPort = strings.ReplaceAll(srcPort, "-", ":")
|
||||||
destPort = strings.ReplaceAll(destPort, ":", "-")
|
itemDstPort := strings.ReplaceAll(destPort, "-", ":")
|
||||||
if dest != "" && dest != "127.0.0.1" && dest != "localhost" {
|
if dest != "" && dest != "127.0.0.1" && dest != "localhost" {
|
||||||
iptablesArg := fmt.Sprintf("-A %s", Chain1PanelPreRouting)
|
iptablesArg := fmt.Sprintf("-A %s", Chain1PanelPreRouting)
|
||||||
if iface != "" {
|
if iface != "" {
|
||||||
|
|
@ -18,15 +18,15 @@ func AddForward(protocol, srcPort, dest, destPort, iface string, save bool) erro
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := Run(NatTab, fmt.Sprintf("-A %s -d %s -p %s --dport %s -j MASQUERADE", Chain1PanelPostRouting, dest, protocol, destPort)); err != nil {
|
if err := Run(NatTab, fmt.Sprintf("-A %s -d %s -p %s --dport %s -j MASQUERADE", Chain1PanelPostRouting, dest, protocol, itemDstPort)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := Run(FilterTab, fmt.Sprintf("-A %s -d %s -p %s --dport %s -j ACCEPT", Chain1PanelForward, dest, protocol, destPort)); err != nil {
|
if err := Run(FilterTab, fmt.Sprintf("-A %s -d %s -p %s --dport %s -j ACCEPT", Chain1PanelForward, dest, protocol, itemDstPort)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := Run(FilterTab, fmt.Sprintf("-A %s -s %s -p %s --sport %s -j ACCEPT", Chain1PanelForward, dest, protocol, destPort)); err != nil {
|
if err := Run(FilterTab, fmt.Sprintf("-A %s -s %s -p %s --sport %s -j ACCEPT", Chain1PanelForward, dest, protocol, itemDstPort)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -43,20 +43,21 @@ func AddForward(protocol, srcPort, dest, destPort, iface string, save bool) erro
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteForward(num string, protocol, srcPort, dest, destPort, iface string) error {
|
func DeleteForward(num string, protocol, srcPort, dest, destPort, iface string) error {
|
||||||
|
itemDstPort := strings.ReplaceAll(destPort, "-", ":")
|
||||||
if err := Run(NatTab, fmt.Sprintf("-D %s %s", Chain1PanelPreRouting, num)); err != nil {
|
if err := Run(NatTab, fmt.Sprintf("-D %s %s", Chain1PanelPreRouting, num)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if dest != "" && dest != "127.0.0.1" && dest != "localhost" {
|
if dest != "" && dest != "127.0.0.1" && dest != "localhost" {
|
||||||
if err := Run(NatTab, fmt.Sprintf("-D %s -d %s -p %s --dport %s -j MASQUERADE", Chain1PanelPostRouting, dest, protocol, destPort)); err != nil {
|
if err := Run(NatTab, fmt.Sprintf("-D %s -d %s -p %s --dport %s -j MASQUERADE", Chain1PanelPostRouting, dest, protocol, itemDstPort)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := Run(FilterTab, fmt.Sprintf("-D %s -d %s -p %s --dport %s -j ACCEPT", Chain1PanelForward, dest, protocol, destPort)); err != nil {
|
if err := Run(FilterTab, fmt.Sprintf("-D %s -d %s -p %s --dport %s -j ACCEPT", Chain1PanelForward, dest, protocol, itemDstPort)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := Run(FilterTab, fmt.Sprintf("-D %s -s %s -p %s --sport %s -j ACCEPT", Chain1PanelForward, dest, protocol, destPort)); err != nil {
|
if err := Run(FilterTab, fmt.Sprintf("-D %s -s %s -p %s --sport %s -j ACCEPT", Chain1PanelForward, dest, protocol, itemDstPort)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ const (
|
||||||
ComposeDisallowedCharsPattern = `[^a-z0-9_-]+`
|
ComposeDisallowedCharsPattern = `[^a-z0-9_-]+`
|
||||||
ComposeEnvVarPattern = `\$\{([^}]+)\}`
|
ComposeEnvVarPattern = `\$\{([^}]+)\}`
|
||||||
DiskKeyValuePattern = `([A-Za-z0-9_]+)=("([^"\\]|\\.)*"|[^ \t]+)`
|
DiskKeyValuePattern = `([A-Za-z0-9_]+)=("([^"\\]|\\.)*"|[^ \t]+)`
|
||||||
FirewalldForwardPattern = `^port=(\d{1,5}):proto=(.+?):toport=(\d{1,5}):toaddr=(.*)$`
|
|
||||||
ValidatorNamePattern = `^[a-zA-Z\p{Han}]{1}[a-zA-Z0-9_\p{Han}]{0,30}$`
|
ValidatorNamePattern = `^[a-zA-Z\p{Han}]{1}[a-zA-Z0-9_\p{Han}]{0,30}$`
|
||||||
ValidatorIPPattern = `^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$`
|
ValidatorIPPattern = `^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$`
|
||||||
DomainPattern = `^([\w\p{Han}\-\*]{1,100}\.){1,10}([\w\p{Han}\-]{1,24}|[\w\p{Han}\-]{1,24}\.[\w\p{Han}\-]{1,24})(:\d{1,5})?$`
|
DomainPattern = `^([\w\p{Han}\-\*]{1,100}\.){1,10}([\w\p{Han}\-]{1,24}|[\w\p{Han}\-]{1,24}\.[\w\p{Han}\-]{1,24})(:\d{1,5})?$`
|
||||||
|
|
@ -41,7 +40,6 @@ func Init() {
|
||||||
ComposeDisallowedCharsPattern,
|
ComposeDisallowedCharsPattern,
|
||||||
ComposeEnvVarPattern,
|
ComposeEnvVarPattern,
|
||||||
DiskKeyValuePattern,
|
DiskKeyValuePattern,
|
||||||
FirewalldForwardPattern,
|
|
||||||
ValidatorNamePattern,
|
ValidatorNamePattern,
|
||||||
ValidatorIPPattern,
|
ValidatorIPPattern,
|
||||||
DomainPattern,
|
DomainPattern,
|
||||||
|
|
|
||||||
|
|
@ -2964,7 +2964,7 @@ const message = {
|
||||||
targetPort: 'Destination port',
|
targetPort: 'Destination port',
|
||||||
forwardHelper1: 'If you want to forward to the local port, the destination IP should be set to "127.0.0.1".',
|
forwardHelper1: 'If you want to forward to the local port, the destination IP should be set to "127.0.0.1".',
|
||||||
forwardHelper2: 'Leave the destination IP blank to forward to the local port.',
|
forwardHelper2: 'Leave the destination IP blank to forward to the local port.',
|
||||||
forwardPortHelper: 'Support port range, e.g. 80:90',
|
forwardPortHelper: 'Supports port ranges, e.g. 8080-8089',
|
||||||
forwardInboundInterface: 'Forward Inbound Network Interface',
|
forwardInboundInterface: 'Forward Inbound Network Interface',
|
||||||
exportHelper: 'About to export {0} firewall rules. Continue?',
|
exportHelper: 'About to export {0} firewall rules. Continue?',
|
||||||
importSuccess: 'Successfully imported {0} rules',
|
importSuccess: 'Successfully imported {0} rules',
|
||||||
|
|
|
||||||
|
|
@ -2941,6 +2941,7 @@ const message = {
|
||||||
targetPort: 'Puerto de destino',
|
targetPort: 'Puerto de destino',
|
||||||
forwardHelper1: 'Si quieres reenviar al puerto local, la IP de destino debe ser "127.0.0.1".',
|
forwardHelper1: 'Si quieres reenviar al puerto local, la IP de destino debe ser "127.0.0.1".',
|
||||||
forwardHelper2: 'Deja en blanco la IP de destino para reenviar al puerto local.',
|
forwardHelper2: 'Deja en blanco la IP de destino para reenviar al puerto local.',
|
||||||
|
forwardPortHelper: 'Admite rangos de puertos, ej.: 8080-8089',
|
||||||
forwardInboundInterface: 'Interfaz de Red de Entrada para Reenvío',
|
forwardInboundInterface: 'Interfaz de Red de Entrada para Reenvío',
|
||||||
exportHelper: 'A punto de exportar {0} reglas de firewall. ¿Continuar?',
|
exportHelper: 'A punto de exportar {0} reglas de firewall. ¿Continuar?',
|
||||||
importSuccess: 'Se importaron correctamente {0} reglas',
|
importSuccess: 'Se importaron correctamente {0} reglas',
|
||||||
|
|
|
||||||
|
|
@ -2882,6 +2882,7 @@ const message = {
|
||||||
targetPort: '宛先ポート',
|
targetPort: '宛先ポート',
|
||||||
forwardHelper1: 'ローカルポートに転送する場合は、宛先IPを「127.0.0.1」に設定する必要があります。',
|
forwardHelper1: 'ローカルポートに転送する場合は、宛先IPを「127.0.0.1」に設定する必要があります。',
|
||||||
forwardHelper2: '宛先IPを空白のままにして、ローカルポートに転送します。',
|
forwardHelper2: '宛先IPを空白のままにして、ローカルポートに転送します。',
|
||||||
|
forwardPortHelper: 'ポート範囲をサポートします。例: 8080-8089',
|
||||||
forwardInboundInterface: '転送入站ネットワークインターフェース',
|
forwardInboundInterface: '転送入站ネットワークインターフェース',
|
||||||
exportHelper: '{0} 件のファイアウォールルールをエクスポートします。続行しますか?',
|
exportHelper: '{0} 件のファイアウォールルールをエクスポートします。続行しますか?',
|
||||||
importSuccess: '{0} 件のルールを正常にインポートしました',
|
importSuccess: '{0} 件のルールを正常にインポートしました',
|
||||||
|
|
|
||||||
|
|
@ -2827,6 +2827,7 @@ const message = {
|
||||||
targetPort: '대상 포트',
|
targetPort: '대상 포트',
|
||||||
forwardHelper1: "로컬 포트로 전달하려면, 대상 IP 를 '127.0.0.1'로 설정해야 합니다.",
|
forwardHelper1: "로컬 포트로 전달하려면, 대상 IP 를 '127.0.0.1'로 설정해야 합니다.",
|
||||||
forwardHelper2: '대상 IP 를 비워두면 로컬 포트로 전달됩니다.',
|
forwardHelper2: '대상 IP 를 비워두면 로컬 포트로 전달됩니다.',
|
||||||
|
forwardPortHelper: '포트 범위를 지원합니다, 예: 8080-8089',
|
||||||
forwardInboundInterface: '포워딩 인바운드 네트워크 인터페이스',
|
forwardInboundInterface: '포워딩 인바운드 네트워크 인터페이스',
|
||||||
exportHelper: '{0}개의 방화벽 규칙을 내보내려고 합니다. 계속하시겠습니까?',
|
exportHelper: '{0}개의 방화벽 규칙을 내보내려고 합니다. 계속하시겠습니까?',
|
||||||
importSuccess: '{0}개의 규칙을 성공적으로 가져왔습니다',
|
importSuccess: '{0}개의 규칙을 성공적으로 가져왔습니다',
|
||||||
|
|
|
||||||
|
|
@ -2944,6 +2944,7 @@ const message = {
|
||||||
targetPort: 'Port sasaran',
|
targetPort: 'Port sasaran',
|
||||||
forwardHelper1: 'Jika anda ingin memajukan ke port tempatan, IP sasaran harus ditetapkan kepada "127.0.0.1".',
|
forwardHelper1: 'Jika anda ingin memajukan ke port tempatan, IP sasaran harus ditetapkan kepada "127.0.0.1".',
|
||||||
forwardHelper2: 'Biarkan IP sasaran kosong untuk memajukan ke port tempatan.',
|
forwardHelper2: 'Biarkan IP sasaran kosong untuk memajukan ke port tempatan.',
|
||||||
|
forwardPortHelper: 'Menyokong julat port, cth: 8080-8089',
|
||||||
forwardInboundInterface: 'Antara Muka Rangkaian Masukan Penerusan',
|
forwardInboundInterface: 'Antara Muka Rangkaian Masukan Penerusan',
|
||||||
exportHelper: 'Akan mengeksport {0} peraturan firewall. Teruskan?',
|
exportHelper: 'Akan mengeksport {0} peraturan firewall. Teruskan?',
|
||||||
importSuccess: '{0} peraturan berjaya diimport',
|
importSuccess: '{0} peraturan berjaya diimport',
|
||||||
|
|
|
||||||
|
|
@ -2949,6 +2949,7 @@ const message = {
|
||||||
forwardHelper1:
|
forwardHelper1:
|
||||||
'Se você deseja redirecionar para a porta local, o IP de destino deve ser definido como "127.0.0.1".',
|
'Se você deseja redirecionar para a porta local, o IP de destino deve ser definido como "127.0.0.1".',
|
||||||
forwardHelper2: 'Deixe o IP de destino em branco para redirecionar para a porta local.',
|
forwardHelper2: 'Deixe o IP de destino em branco para redirecionar para a porta local.',
|
||||||
|
forwardPortHelper: 'Suporta intervalos de portas, ex. 8080-8089',
|
||||||
forwardInboundInterface: 'Interface de Rede de Entrada para Encaminhamento',
|
forwardInboundInterface: 'Interface de Rede de Entrada para Encaminhamento',
|
||||||
exportHelper: 'Prestes a exportar {0} regras de firewall. Continuar?',
|
exportHelper: 'Prestes a exportar {0} regras de firewall. Continuar?',
|
||||||
importSuccess: '{0} regras importadas com sucesso',
|
importSuccess: '{0} regras importadas com sucesso',
|
||||||
|
|
|
||||||
|
|
@ -2942,7 +2942,8 @@ const message = {
|
||||||
forwardHelper1:
|
forwardHelper1:
|
||||||
'Если вы хотите перенаправить на локальный порт, целевой IP должен быть установлен как "127.0.0.1".',
|
'Если вы хотите перенаправить на локальный порт, целевой IP должен быть установлен как "127.0.0.1".',
|
||||||
forwardHelper2: 'Оставьте целевой IP пустым для перенаправления на локальный порт.',
|
forwardHelper2: 'Оставьте целевой IP пустым для перенаправления на локальный порт.',
|
||||||
forwardInboundInterface: '转发入站Сетевой интерфейс для пересылки входящего трафика网卡',
|
forwardPortHelper: 'Поддерживает диапазоны портов, напр. 8080-8089',
|
||||||
|
forwardInboundInterface: 'Сетевой интерфейс для пересылки входящего трафика',
|
||||||
exportHelper: 'Собираюсь экспортировать {0} правил брандмауэра. Продолжить?',
|
exportHelper: 'Собираюсь экспортировать {0} правил брандмауэра. Продолжить?',
|
||||||
importSuccess: 'Успешно импортировано {0} правил',
|
importSuccess: 'Успешно импортировано {0} правил',
|
||||||
importPartialSuccess: 'Импорт завершён: {0} успешно, {1} с ошибкой',
|
importPartialSuccess: 'Импорт завершён: {0} успешно, {1} с ошибкой',
|
||||||
|
|
|
||||||
|
|
@ -3002,6 +3002,7 @@ const message = {
|
||||||
targetPort: 'Hedef port',
|
targetPort: 'Hedef port',
|
||||||
forwardHelper1: 'Yerel porta yönlendirmek istiyorsanız, hedef IP "127.0.0.1" olarak ayarlanmalıdır.',
|
forwardHelper1: 'Yerel porta yönlendirmek istiyorsanız, hedef IP "127.0.0.1" olarak ayarlanmalıdır.',
|
||||||
forwardHelper2: 'Yerel porta yönlendirmek için hedef IP’yi boş bırakın.',
|
forwardHelper2: 'Yerel porta yönlendirmek için hedef IP’yi boş bırakın.',
|
||||||
|
forwardPortHelper: 'Port aralıklarını destekler, örn.: 8080-8089',
|
||||||
forwardInboundInterface: 'İletme Gelen Ağ Arayüzü',
|
forwardInboundInterface: 'İletme Gelen Ağ Arayüzü',
|
||||||
exportHelper: '{0} güvenlik duvarı kuralını dışa aktarmak üzere. Devam etmek istiyor musunuz?',
|
exportHelper: '{0} güvenlik duvarı kuralını dışa aktarmak üzere. Devam etmek istiyor musunuz?',
|
||||||
importSuccess: '{0} kural başarıyla içe aktarıldı',
|
importSuccess: '{0} kural başarıyla içe aktarıldı',
|
||||||
|
|
|
||||||
|
|
@ -2749,6 +2749,7 @@ const message = {
|
||||||
targetPort: '目標埠',
|
targetPort: '目標埠',
|
||||||
forwardHelper1: '如果是本機埠轉發,目標 IP 為:127.0.0.1',
|
forwardHelper1: '如果是本機埠轉發,目標 IP 為:127.0.0.1',
|
||||||
forwardHelper2: '如果目標 IP 不填寫,預設為本機埠轉發',
|
forwardHelper2: '如果目標 IP 不填寫,預設為本機埠轉發',
|
||||||
|
forwardPortHelper: '支援端口範圍,如:8080-8089',
|
||||||
forwardInboundInterface: '轉發入站網路介面',
|
forwardInboundInterface: '轉發入站網路介面',
|
||||||
exportHelper: '即將導出 {0} 條防火牆規則,是否繼續?',
|
exportHelper: '即將導出 {0} 條防火牆規則,是否繼續?',
|
||||||
importSuccess: '成功匯入 {0} 條規則',
|
importSuccess: '成功匯入 {0} 條規則',
|
||||||
|
|
|
||||||
|
|
@ -497,7 +497,7 @@ const message = {
|
||||||
changePassword: '改密',
|
changePassword: '改密',
|
||||||
changeConnHelper: '此操作将修改当前数据库 {0},是否继续?',
|
changeConnHelper: '此操作将修改当前数据库 {0},是否继续?',
|
||||||
changePasswordHelper: '当前数据库已经关联应用,修改密码将同步修改应用中数据库密码,修改后重启生效。',
|
changePasswordHelper: '当前数据库已经关联应用,修改密码将同步修改应用中数据库密码,修改后重启生效。',
|
||||||
recoverTimeoutHelper: '为 -1 表示不限制超时时间',
|
recoverTimeoutHelper: '-1 表示不限制超时时间',
|
||||||
|
|
||||||
portHelper: '该端口为容器对外暴露端口,修改需要单独保存并且重启容器!',
|
portHelper: '该端口为容器对外暴露端口,修改需要单独保存并且重启容器!',
|
||||||
|
|
||||||
|
|
@ -2749,7 +2749,7 @@ const message = {
|
||||||
targetPort: '目标端口',
|
targetPort: '目标端口',
|
||||||
forwardHelper1: '如果是本机端口转发,目标IP为:127.0.0.1',
|
forwardHelper1: '如果是本机端口转发,目标IP为:127.0.0.1',
|
||||||
forwardHelper2: '如果目标IP不填写,则默认为本机端口转发',
|
forwardHelper2: '如果目标IP不填写,则默认为本机端口转发',
|
||||||
forwardPortHelper: '支持端口范围,如:80:90',
|
forwardPortHelper: '支持端口范围,如:8080-8089',
|
||||||
forwardInboundInterface: '转发入站网卡',
|
forwardInboundInterface: '转发入站网卡',
|
||||||
exportHelper: '即将导出 {0} 条防火墙规则,是否继续?',
|
exportHelper: '即将导出 {0} 条防火墙规则,是否继续?',
|
||||||
importSuccess: '成功导入 {0} 条规则',
|
importSuccess: '成功导入 {0} 条规则',
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,11 @@
|
||||||
<span class="input-help">{{ $t('firewall.forwardPortHelper') }}</span>
|
<span class="input-help">{{ $t('firewall.forwardPortHelper') }}</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="$t('firewall.forwardInboundInterface')" prop="interface">
|
<el-form-item
|
||||||
|
v-if="dialogData.fireName !== 'firewalld'"
|
||||||
|
:label="$t('firewall.forwardInboundInterface')"
|
||||||
|
prop="interface"
|
||||||
|
>
|
||||||
<el-select class="w-full" v-model="dialogData.rowData!.interface">
|
<el-select class="w-full" v-model="dialogData.rowData!.interface">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in interfaceOptions"
|
v-for="item in interfaceOptions"
|
||||||
|
|
@ -105,8 +109,8 @@ function checkPortRule(rule: any, value: string, callback: any) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return callback(new Error(i18n.global.t('firewall.portFormatError')));
|
return callback(new Error(i18n.global.t('firewall.portFormatError')));
|
||||||
}
|
}
|
||||||
if (value.indexOf(':') !== -1) {
|
if (value.indexOf('-') !== -1) {
|
||||||
const ports = value.split(':');
|
const ports = value.split('-');
|
||||||
if (ports.length !== 2) {
|
if (ports.length !== 2) {
|
||||||
return callback(new Error(i18n.global.t('firewall.portFormatError')));
|
return callback(new Error(i18n.global.t('firewall.portFormatError')));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue