Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion agent/utils/firewall/filter/providers/firewalld/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -1060,7 +1060,7 @@ func (systemBackend) Run(ctx context.Context, command filter.NativeCommand) erro
}
timeout := 60 * time.Second
if options > 1 {
timeout = 5 * time.Minute
timeout = 15 * time.Minute
}
var stderr strings.Builder
err := cmd.NewCommandMgr(
Expand Down
2 changes: 1 addition & 1 deletion agent/utils/firewall/filter/safety.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ var (
var ErrVerificationFailed = errors.New("firewall rule verification failed")

func ProtectRuleSet(snapshot RuleSet, ports []PortWhitelist) (RuleSet, error) {
rules := append([]ObservedRule(nil), snapshot.Rules...)
rules := slices.Clone(snapshot.Rules)
whitelist := NewPortWhitelistIndex(ports)
for index := range rules {
if rules[index].ParseStatus == ParseStatusSupported && whitelist.Matches(rules[index].Rule) {
Expand Down
10 changes: 9 additions & 1 deletion frontend/src/components/log/file/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ const getContent = async (pre: boolean) => {
}
isLoading.value = true;
emit('update:isReading', true);
const requestedPage = readReq.page;

let res;
try {
Expand All @@ -290,7 +291,6 @@ const getContent = async (pre: boolean) => {

if (res.data.taskStatus && res.data.taskStatus !== 'Executing') {
isTailDisabled.value = true;
tailLog.value = false;
}

logPath.value = res.data.path;
Expand Down Expand Up @@ -396,6 +396,14 @@ const getContent = async (pre: boolean) => {
}
}
isLoading.value = false;
if (readReq.type === 'task' && res.data.taskStatus && res.data.taskStatus !== 'Executing') {
if (!pre && !res.data.end && res.data.scope !== 'tail' && requestedPage < res.data.total) {
readReq.page = requestedPage + 1;
await getContent(false);
} else {
onCloseLog();
}
}
};

const onCloseLog = async () => {
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/lang/modules/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4179,7 +4179,7 @@ const message = {
'The runtime and permanent firewall configurations differ. Synchronize them first.',
plan_protected_rule: 'This rule is protected and cannot be taken over, changed, or deleted.',
plan_blocked: 'This rule cannot be applied safely. Refresh the rules and try again.',
largeRuleSet: 'There are more than {0} firewall rules. We recommend using iptables or nftables.',
largeRuleSet: 'Too many firewall rules may slow down operations. We recommend using iptables or nftables.',
scopeDefaultMismatch: 'The system default zone is {0}; this page manages only the public zone.',
scopeMissing: 'Managed scope {0} is missing and will be created safely when the first rule is applied.',
scopeUnmanagedActive: 'Other active scopes were detected: {0}. 1Panel will not modify their rules.',
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/lang/modules/es-es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4225,7 +4225,8 @@ const message = {
plan_runtime_permanent_mismatch: 'Las configuraciones activa y permanente difieren. Sincronízalas primero.',
plan_protected_rule: 'Esta regla está protegida y no se puede asumir, modificar ni eliminar.',
plan_blocked: 'La regla no puede aplicarse de forma segura. Actualiza la lista e inténtalo de nuevo.',
largeRuleSet: 'Hay más de {0} reglas de cortafuegos. Se recomienda usar iptables o nftables.',
largeRuleSet:
'Demasiadas reglas de cortafuegos pueden ralentizar las operaciones. Se recomienda usar iptables o nftables.',
scopeDefaultMismatch: 'La zona predeterminada es {0}; esta página solo gestiona la zona public.',
scopeMissing: 'Falta el ámbito gestionado {0}; se creará de forma segura al aplicar la primera regla.',
scopeUnmanagedActive: 'Se detectaron otros ámbitos activos: {0}. 1Panel no modificará sus reglas.',
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/lang/modules/fa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4134,7 +4134,8 @@ const message = {
plan_runtime_permanent_mismatch: 'پیکربندی فعال و دائمی دیوارهٔ آتش متفاوت است. ابتدا آن‌ها را همگام کنید.',
plan_protected_rule: 'این قانون محافظت‌شده است و نمی‌توان آن را مدیریت، تغییر یا حذف کرد.',
plan_blocked: 'این قانون با ایمنی قابل اعمال نیست. فهرست را تازه‌سازی و دوباره تلاش کنید.',
largeRuleSet: 'تعداد قوانین دیوارهٔ آتش بیش از {0} است. استفاده از iptables یا nftables توصیه می‌شود.',
largeRuleSet:
'تعداد زیاد قوانین دیوارهٔ آتش ممکن است عملیات را کند کند. استفاده از iptables یا nftables توصیه می‌شود.',
scopeDefaultMismatch: 'ناحیهٔ پیش‌فرض سامانه {0} است؛ این صفحه فقط ناحیهٔ public را مدیریت می‌کند.',
scopeMissing: 'محدودهٔ مدیریت‌شدهٔ {0} وجود ندارد و هنگام اعمال نخستین قانون به‌صورت امن ایجاد می‌شود.',
scopeUnmanagedActive: 'محدوده‌های فعال دیگری یافت شد: {0}. ‏1Panel قوانین آن‌ها را تغییر نمی‌دهد.',
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/lang/modules/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4160,7 +4160,8 @@ const message = {
plan_runtime_permanent_mismatch: '実行中と永続設定のファイアウォール構成が異なります。先に同期してください。',
plan_protected_rule: 'このルールは保護されており、管理対象化、変更、削除はできません。',
plan_blocked: 'このルールは安全に適用できません。ルールを更新して再試行してください。',
largeRuleSet: 'ファイアウォールルールが {0} 件を超えています。iptables または nftables の使用を推奨します。',
largeRuleSet:
'ファイアウォールルールが多すぎると操作が遅くなる可能性があります。iptables または nftables の使用を推奨します。',
scopeDefaultMismatch: 'システムの既定 zone は {0} です。このページでは public zone のみ管理します。',
scopeMissing: '管理対象スコープ {0} がありません。最初のルール適用時に安全に作成されます。',
scopeUnmanagedActive: '他の有効な範囲が見つかりました:{0}。1Panel はそのルールを変更しません。',
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/lang/modules/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4084,7 +4084,7 @@ const message = {
plan_runtime_permanent_mismatch: '실행 중 구성과 영구 방화벽 구성이 다릅니다. 먼저 동기화하세요.',
plan_protected_rule: '이 규칙은 보호되어 관리 전환, 변경 또는 삭제할 수 없습니다.',
plan_blocked: '이 규칙을 안전하게 적용할 수 없습니다. 목록을 새로 고친 후 다시 시도하세요.',
largeRuleSet: '방화벽 규칙이 {0}개를 초과했습니다. iptables 또는 nftables 사용을 권장합니다.',
largeRuleSet: '방화벽 규칙이 너무 많으면 작업이 느려질 수 있습니다. iptables 또는 nftables 사용을 권장합니다.',
scopeDefaultMismatch: '시스템 기본 zone은 {0}이며 이 페이지는 public zone만 관리합니다.',
scopeMissing: '관리 범위 {0}이(가) 없으며 첫 규칙을 적용할 때 안전하게 생성됩니다.',
scopeUnmanagedActive: '다른 활성 범위가 감지되었습니다: {0}. 1Panel은 해당 규칙을 변경하지 않습니다.',
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/lang/modules/lo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4051,7 +4051,7 @@ const message = {
plan_runtime_permanent_mismatch: 'ຄ່າໄຟວໍທີ່ໃຊ້ງານແລະຄ່າຖາວອນບໍ່ກົງກັນ. ກະລຸນາຊິງກ່ອນ.',
plan_protected_rule: 'ກົດນີ້ຖືກປົກປ້ອງ ແລະບໍ່ສາມາດຮັບເຂົ້າ, ແກ້ໄຂ ຫຼືລຶບໄດ້.',
plan_blocked: 'ບໍ່ສາມາດນຳໃຊ້ກົດນີ້ໄດ້ຢ່າງປອດໄພ. ກະລຸນາໂຫຼດໃໝ່ແລ້ວລອງອີກຄັ້ງ.',
largeRuleSet: 'ມີກົດໄຟວໍຫຼາຍກວ່າ {0} ລາຍການ. ແນະນຳໃຫ້ໃຊ້ iptables ຫຼື nftables.',
largeRuleSet: 'ກົດໄຟວໍທີ່ຫຼາຍເກີນໄປອາດເຮັດໃຫ້ການດຳເນີນງານຊ້າລົງ. ແນະນຳໃຫ້ໃຊ້ iptables ຫຼື nftables.',
scopeDefaultMismatch: 'zone ຄ່າເລີ່ມຕົ້ນແມ່ນ {0}; ໜ້ານີ້ຈັດການສະເພາະ public zone.',
scopeMissing: 'ບໍ່ພົບຂອບເຂດຈັດການ {0}; ລະບົບຈະສ້າງຢ່າງປອດໄພເມື່ອນຳໃຊ້ກົດທຳອິດ.',
scopeUnmanagedActive: 'ພົບຂອບເຂດອື່ນທີ່ໃຊ້ງານ: {0}. 1Panel ຈະບໍ່ແກ້ໄຂກົດເຫຼົ່ານັ້ນ.',
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/lang/modules/ms.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4246,7 +4246,8 @@ const message = {
plan_runtime_permanent_mismatch: 'Konfigurasi tembok api aktif dan kekal berbeza. Segerakkan dahulu.',
plan_protected_rule: 'Peraturan ini dilindungi dan tidak boleh diambil alih, diubah atau dipadam.',
plan_blocked: 'Peraturan ini tidak dapat digunakan dengan selamat. Muat semula senarai dan cuba lagi.',
largeRuleSet: 'Terdapat lebih daripada {0} peraturan tembok api. Penggunaan iptables atau nftables disyorkan.',
largeRuleSet:
'Terlalu banyak peraturan tembok api boleh melambatkan operasi. Penggunaan iptables atau nftables disyorkan.',
scopeDefaultMismatch: 'Zon lalai sistem ialah {0}; halaman ini hanya mengurus zon public.',
scopeMissing: 'Skop terurus {0} tiada dan akan dicipta dengan selamat apabila peraturan pertama digunakan.',
scopeUnmanagedActive: 'Skop aktif lain dikesan: {0}. 1Panel tidak akan mengubah peraturannya.',
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/lang/modules/pt-br.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4263,7 +4263,8 @@ const message = {
plan_runtime_permanent_mismatch: 'As configurações ativa e permanente são diferentes. Sincronize-as primeiro.',
plan_protected_rule: 'Esta regra está protegida e não pode ser assumida, alterada ou excluída.',
plan_blocked: 'A regra não pode ser aplicada com segurança. Atualize a lista e tente novamente.',
largeRuleSet: 'Há mais de {0} regras de firewall. Recomendamos usar iptables ou nftables.',
largeRuleSet:
'Regras de firewall em excesso podem tornar as operações lentas. Recomendamos usar iptables ou nftables.',
scopeDefaultMismatch: 'A zona padrão do sistema é {0}; esta página gerencia apenas a zona public.',
scopeMissing: 'O escopo gerenciado {0} não existe e será criado com segurança ao aplicar a primeira regra.',
scopeUnmanagedActive: 'Outros escopos ativos foram detectados: {0}. O 1Panel não modificará suas regras.',
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/lang/modules/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4231,7 +4231,8 @@ const message = {
plan_runtime_permanent_mismatch: 'Активная и постоянная конфигурации различаются. Сначала синхронизируйте их.',
plan_protected_rule: 'Правило защищено: его нельзя взять под управление, изменить или удалить.',
plan_blocked: 'Правило нельзя безопасно применить. Обновите список и повторите попытку.',
largeRuleSet: 'Количество правил брандмауэра превышает {0}. Рекомендуется использовать iptables или nftables.',
largeRuleSet:
'Слишком большое количество правил брандмауэра может замедлить операции. Рекомендуется использовать iptables или nftables.',
scopeDefaultMismatch: 'Системная зона по умолчанию — {0}; на этой странице управляется только зона public.',
scopeMissing: 'Управляемая область {0} отсутствует и будет безопасно создана при применении первого правила.',
scopeUnmanagedActive: 'Обнаружены другие активные области: {0}. 1Panel не будет изменять их правила.',
Expand Down
3 changes: 2 additions & 1 deletion frontend/src/lang/modules/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4248,7 +4248,8 @@ const message = {
plan_runtime_permanent_mismatch: 'Etkin ve kalıcı güvenlik duvarı yapılandırmaları farklı. Önce eşitleyin.',
plan_protected_rule: 'Bu kural korumalıdır; yönetimi devralınamaz, değiştirilemez veya silinemez.',
plan_blocked: 'Bu kural güvenle uygulanamıyor. Listeyi yenileyip tekrar deneyin.',
largeRuleSet: 'Güvenlik duvarı kural sayısı {0} değerini aşıyor. iptables veya nftables kullanılması önerilir.',
largeRuleSet:
'Çok fazla güvenlik duvarı kuralı işlemleri yavaşlatabilir. iptables veya nftables kullanılması önerilir.',
scopeDefaultMismatch: 'Sistemin varsayılan zone değeri {0}; bu sayfa yalnızca public zone alanını yönetir.',
scopeMissing: 'Yönetilen {0} kapsamı eksik ve ilk kural uygulanırken güvenli şekilde oluşturulacak.',
scopeUnmanagedActive: 'Başka etkin kapsamlar algılandı: {0}. 1Panel bunların kurallarını değiştirmez.',
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/lang/modules/zh-Hant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3896,7 +3896,7 @@ const message = {
plan_runtime_permanent_mismatch: '防火牆執行設定與永久設定不一致,請先完成同步。',
plan_protected_rule: '此規則受到保護,不能認領、修改或刪除。',
plan_blocked: '目前規則無法安全套用,請重新整理規則後再試。',
largeRuleSet: '目前防火牆規則超過 {0} 條,建議使用 iptables 或 nftables。',
largeRuleSet: '防火牆規則過多可能導致操作卡頓,建議使用 iptables 或 nftables。',
scopeDefaultMismatch: '系統預設 zone 為 {0},目前頁面僅管理 public zone。',
scopeMissing: '託管範圍 {0} 尚未建立,套用第一條規則時將以安全方式建立。',
scopeUnmanagedActive: '偵測到其他使用中範圍:{0},1Panel 不會修改其中的規則。',
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/lang/modules/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3944,7 +3944,7 @@ const message = {
plan_runtime_permanent_mismatch: '当前生效的防火墙规则与重启后保留的规则不一致,请先同步后重试。',
plan_protected_rule: '该规则受到保护,不能认领、修改或删除。',
plan_blocked: '暂时无法处理这条规则,本次操作未生效。请刷新后重试;如仍失败,请检查规则状态。',
largeRuleSet: '当前防火墙规则超过 {0} 条,建议使用 iptables 或 nftables。',
largeRuleSet: '防火墙规则过多可能导致操作卡顿,建议使用 iptables 或 nftables。',
scopeDefaultMismatch: '系统默认 zone 为 {0},当前页面仅管理 public zone。',
scopeMissing: '托管范围 {0} 尚未创建,应用首条规则时将以安全方式创建。',
scopeUnmanagedActive: '检测到其他活动范围:{0},1Panel 不会修改其中的规则。',
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/views/host/firewall/rule/import/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@
<template #default="{ row }">{{ displayAddress(row, row.sourceAddress) }}</template>
</el-table-column>
<el-table-column :label="$t('firewall.sourcePort')" min-width="110">
<template #default="{ row }">{{ row.sourcePort || $t('firewall.allPorts') }}</template>
<template #default="{ row }">{{ row.sourcePort || '*' }}</template>
</el-table-column>
<el-table-column :label="$t('firewall.destIP')" min-width="150">
<template #default="{ row }">{{ displayAddress(row, row.destinationAddress) }}</template>
</el-table-column>
<el-table-column :label="$t('firewall.destPort')" min-width="110">
<template #default="{ row }">{{ row.destinationPort || $t('firewall.allPorts') }}</template>
<template #default="{ row }">{{ row.destinationPort || '*' }}</template>
</el-table-column>
<el-table-column :label="$t('firewall.action')" prop="action" min-width="90">
<template #default="{ row }">{{ actionLabel(row.action) }}</template>
Expand Down
4 changes: 2 additions & 2 deletions frontend/src/views/host/firewall/rule/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -898,10 +898,10 @@ const changeRuleFilter = () => {

const notices = computed<DisplayNotice[]>(() => {
const unique = new Map<string, DisplayNotice>();
if (inventoryTotal.value > 200 && isServiceBackend.value) {
if (inventoryTotal.value > 1000 && isServiceBackend.value) {
unique.set('largeRuleSet', {
key: 'largeRuleSet',
text: i18n.global.t('firewall.largeRuleSet', [200]),
text: i18n.global.t('firewall.largeRuleSet'),
});
}
scopeNotices.value.forEach((notice) => {
Expand Down
16 changes: 11 additions & 5 deletions frontend/src/views/host/firewall/sync/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@
</el-table-column>
<el-table-column :label="$t('commons.table.port')" min-width="120">
<template #default="{ row }">
{{ row.rule?.destinationPort || $t('firewall.allPorts') }}
{{ row.rule ? row.rule.destinationPort || '*' : '-' }}
</template>
</el-table-column>
<el-table-column :label="$t('firewall.action')" width="90">
Expand Down Expand Up @@ -347,10 +347,16 @@ const reasonText = (reasonCode?: string, reason?: string) => {
const actionText = (action?: Firewall.Action) => (action ? i18n.global.t(`firewall.${action}`) : '-');

const displayAddress = (rule: Firewall.Rule) => {
const values = [rule.sourceAddress, rule.destinationAddress]
.filter((value): value is string => Boolean(value))
.map((value) => formatHostAddress(value, rule.scope.family));
return values.length > 0 ? values.join(' → ') : i18n.global.t('firewall.anyWhere');
const wildcard =
rule.scope.family === 'ipv6' ? '::/0' : rule.scope.family === 'inet' ? '0.0.0.0/0, ::/0' : '0.0.0.0/0';
const addresses = rule.destinationAddress ? [rule.sourceAddress, rule.destinationAddress] : [rule.sourceAddress];
return addresses
.map((address) =>
address && address !== wildcard
? formatHostAddress(address, rule.scope.family)
: `${wildcard}(${i18n.global.t('firewall.anyWhere')})`,
)
.join(' → ');
};

const dockerAddress = (rule?: Firewall.DockerGuardEndpoint) => {
Expand Down
Loading