Filter container interfaces from device discovery and policies
This commit is contained in:
@@ -2,6 +2,7 @@ import crypto from 'node:crypto';
|
||||
import fs from 'node:fs';
|
||||
import net from 'node:net';
|
||||
import { HarborError } from '../../shared/errors.js';
|
||||
import { isDeviceInterface } from '../adapters/neighbors.js';
|
||||
import { fingerprintDirectDevices } from './devicePolicyService.js';
|
||||
|
||||
export const DEVICE_INVENTORY_SCHEMA_VERSION = 2;
|
||||
@@ -12,7 +13,6 @@ const COUNTER_PATTERN = /^\d+$/;
|
||||
const DEVICE_ID_PATTERN = /^dev_[a-f0-9]{16}$/;
|
||||
const MAC_PATTERN = /^[0-9a-f]{2}(?::[0-9a-f]{2}){5}$/;
|
||||
const FINGERPRINT_PATTERN = /^[a-f0-9]{64}$/;
|
||||
const INTERFACE_PATTERN = /^[a-z0-9_.:-]{1,15}$/i;
|
||||
const POLICY_MODES = new Set(['vpn', 'direct']);
|
||||
const POLICY_STATUSES = new Set(['applied', 'applying', 'pending', 'failed']);
|
||||
const PROXY_RECOVERY_ERROR = 'Повреждённый proxy traffic checkpoint восстановлен из корректных данных';
|
||||
@@ -214,7 +214,9 @@ export function migrateDeviceInventoryState(value) {
|
||||
const traffic = state.traffic && typeof state.traffic === 'object' && !Array.isArray(state.traffic)
|
||||
? state.traffic
|
||||
: {};
|
||||
const devices = Array.isArray(state.devices) ? state.devices : [];
|
||||
const devices = Array.isArray(state.devices)
|
||||
? state.devices.filter((device) => isDeviceInterface(device?.interface))
|
||||
: [];
|
||||
const proxyTraffic = normalizeProxyTraffic(traffic.proxy, devices);
|
||||
const rebaselineMacs = new Set((Array.isArray(traffic.rebaselineMacs) ? traffic.rebaselineMacs : [])
|
||||
.map(normalizeMac).filter((mac) => MAC_PATTERN.test(mac)));
|
||||
@@ -314,8 +316,7 @@ export function createDeviceInventoryService({
|
||||
function policyIdentity(device) {
|
||||
return device?.pinned && device.confidence !== 'ambiguous'
|
||||
&& net.isIPv4(String(device.ip || '')) && MAC_PATTERN.test(device.mac)
|
||||
&& INTERFACE_PATTERN.test(String(device.interface || ''))
|
||||
&& !String(device.interface).startsWith('br-');
|
||||
&& isDeviceInterface(device.interface);
|
||||
}
|
||||
|
||||
function directDevices(state) {
|
||||
@@ -523,7 +524,8 @@ export function createDeviceInventoryService({
|
||||
: null,
|
||||
]);
|
||||
const observedAt = result?.observedAt || now().toISOString();
|
||||
const observations = Array.isArray(result?.observations) ? result.observations : [];
|
||||
const observations = (Array.isArray(result?.observations) ? result.observations : [])
|
||||
.filter((observation) => isDeviceInterface(observation?.interface));
|
||||
const identitiesByMac = new Map();
|
||||
for (const observation of observations) {
|
||||
const mac = normalizeMac(observation.mac);
|
||||
|
||||
Reference in New Issue
Block a user