@usex/mikrotik-mcp 4.7.0 → 4.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -28
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/dist/shared/{cli-38m6waxx.js → cli-s2s6hryh.js} +4689 -3226
- package/dist/shared/{cli-jd7xqp2f.js → cli-xfa5x65h.js} +1 -1
- package/dist/shared/{library-31wz8hdh.js → library-6zh75zhp.js} +1 -1
- package/dist/shared/{library-fs4nps73.js → library-wm3vc8kq.js} +4689 -3226
- package/package.json +1 -1
- package/prompts/security-hardening-sweep.md +132 -0
- package/prompts/setup-eoip-tunnel-between-sites.md +119 -0
- package/prompts/setup-gre-tunnel-between-sites.md +163 -0
- package/prompts/setup-ipip-tunnel-between-sites.md +110 -0
- package/prompts/setup-openvpn-tunnel-between-sites.md +136 -0
- package/prompts/setup-sstp-tunnel-between-sites.md +136 -0
- package/prompts/setup-tunnel-between-sites.md +55 -8
- package/prompts/setup-v2ray-container-proxy.md +203 -0
- package/prompts/setup-vxlan-tunnel-between-sites.md +129 -0
- package/prompts/setup-wireguard-tunnel-between-sites.md +183 -0
- package/schemas/README.md +1 -1
- package/schemas/tool-catalog.json +658 -2
- package/schemas/tools/add_firewall_default_deny.json +25 -0
- package/schemas/tools/apply_security_hardening_fixes.json +25 -0
- package/schemas/tools/audit_account_hygiene.json +7 -0
- package/schemas/tools/audit_address_list_enforcement.json +7 -0
- package/schemas/tools/audit_certificate_hygiene.json +7 -0
- package/schemas/tools/audit_connection_tracking_helpers.json +7 -0
- package/schemas/tools/audit_dns_resolver_exposure.json +7 -0
- package/schemas/tools/audit_firewall_default_deny.json +7 -0
- package/schemas/tools/audit_ip_service_exposure.json +7 -0
- package/schemas/tools/audit_ipv6_firewall_baseline.json +7 -0
- package/schemas/tools/audit_kernel_ip_hardening.json +7 -0
- package/schemas/tools/audit_management_plane_exposure.json +7 -0
- package/schemas/tools/audit_network_segmentation.json +7 -0
- package/schemas/tools/audit_ssh_hardening.json +7 -0
- package/schemas/tools/bootstrap_ipv6_firewall_baseline.json +25 -0
- package/schemas/tools/enforce_address_list_blocking.json +25 -0
- package/schemas/tools/fix_certificate_crl_policy.json +25 -0
- package/schemas/tools/fix_password_policy.json +25 -0
- package/schemas/tools/harden_connection_tracking_helpers.json +25 -0
- package/schemas/tools/harden_dns_resolver_exposure.json +25 -0
- package/schemas/tools/harden_ip_service_exposure.json +25 -0
- package/schemas/tools/harden_kernel_ip_settings.json +25 -0
- package/schemas/tools/harden_management_plane_exposure.json +25 -0
- package/schemas/tools/harden_ssh_service.json +25 -0
- package/schemas/tools/run_security_hardening_audit.json +29 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.9.0",
|
|
4
4
|
"generated": "by scripts/gen-schemas.ts — do not edit by hand",
|
|
5
|
-
"toolCount":
|
|
5
|
+
"toolCount": 819,
|
|
6
6
|
"tools": [
|
|
7
7
|
{
|
|
8
8
|
"name": "find_tools",
|
|
@@ -15359,6 +15359,662 @@
|
|
|
15359
15359
|
"additionalProperties": false
|
|
15360
15360
|
}
|
|
15361
15361
|
},
|
|
15362
|
+
{
|
|
15363
|
+
"name": "audit_firewall_default_deny",
|
|
15364
|
+
"title": "Audit Firewall Default-Deny",
|
|
15365
|
+
"risk": "read",
|
|
15366
|
+
"annotations": {
|
|
15367
|
+
"readOnlyHint": true,
|
|
15368
|
+
"idempotentHint": true,
|
|
15369
|
+
"openWorldHint": false
|
|
15370
|
+
},
|
|
15371
|
+
"description": "Read-only. Walks `/ip firewall filter` input and forward chains and reports whether each chain ends in an ENFORCED default-deny (a final unconditional drop/reject). Separately flags the field trap where an accept is followed by a matching drop that is disabled=yes — the chain looks protected but everything falls through (severity critical, its own finding_id). Remediate with add_firewall_default_deny.",
|
|
15372
|
+
"inputSchema": {
|
|
15373
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15374
|
+
"type": "object",
|
|
15375
|
+
"properties": {},
|
|
15376
|
+
"additionalProperties": false
|
|
15377
|
+
}
|
|
15378
|
+
},
|
|
15379
|
+
{
|
|
15380
|
+
"name": "audit_address_list_enforcement",
|
|
15381
|
+
"title": "Audit Address-List Enforcement",
|
|
15382
|
+
"risk": "read",
|
|
15383
|
+
"annotations": {
|
|
15384
|
+
"readOnlyHint": true,
|
|
15385
|
+
"idempotentHint": true,
|
|
15386
|
+
"openWorldHint": false
|
|
15387
|
+
},
|
|
15388
|
+
"description": "Read-only. Cross-references every address-list that is WRITTEN by an add-src/dst-to-address-list rule against every list READ by a drop/reject (or escalation) rule, across `/ip firewall filter` and `/ip firewall raw`. Flags lists that are populated but never blocked (the classic 'we detect scanners/DDoS but never drop them' gap). Correctly does NOT flag staged escalation ladders (stage1→stage2→stage3→blacklist) whose final list is enforced. Folds in a low-severity note when detection lives entirely in filter with nothing in raw. Remediate with enforce_address_list_blocking.",
|
|
15389
|
+
"inputSchema": {
|
|
15390
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15391
|
+
"type": "object",
|
|
15392
|
+
"properties": {},
|
|
15393
|
+
"additionalProperties": false
|
|
15394
|
+
}
|
|
15395
|
+
},
|
|
15396
|
+
{
|
|
15397
|
+
"name": "audit_kernel_ip_hardening",
|
|
15398
|
+
"title": "Audit Kernel IP Hardening",
|
|
15399
|
+
"risk": "read",
|
|
15400
|
+
"annotations": {
|
|
15401
|
+
"readOnlyHint": true,
|
|
15402
|
+
"idempotentHint": true,
|
|
15403
|
+
"openWorldHint": false
|
|
15404
|
+
},
|
|
15405
|
+
"description": "Read-only. Checks `/ip settings` (and `/ipv6 settings`) for tcp-syncookies, rp-filter (recommends strict on single-WAN, loose on multi-WAN — detected by counting default routes), accept-source-route, and accept-redirects. Remediate with harden_kernel_ip_settings.",
|
|
15406
|
+
"inputSchema": {
|
|
15407
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15408
|
+
"type": "object",
|
|
15409
|
+
"properties": {},
|
|
15410
|
+
"additionalProperties": false
|
|
15411
|
+
}
|
|
15412
|
+
},
|
|
15413
|
+
{
|
|
15414
|
+
"name": "audit_ipv6_firewall_baseline",
|
|
15415
|
+
"title": "Audit IPv6 Firewall Baseline",
|
|
15416
|
+
"risk": "read",
|
|
15417
|
+
"annotations": {
|
|
15418
|
+
"readOnlyHint": true,
|
|
15419
|
+
"idempotentHint": true,
|
|
15420
|
+
"openWorldHint": false
|
|
15421
|
+
},
|
|
15422
|
+
"description": "Read-only. When IPv6 is enabled and/or forwarding with no default-deny in `/ipv6 firewall filter`, surfaces the exposure as TWO mutually-exclusive remediation options (distinct finding_ids): Option A bootstrap a minimal safe IPv6 filter (accept established/related, keep RFC 4890 ICMPv6, default-deny); Option B disable IPv6 forwarding when no IPv6 address is in use. Marks needs_live_verification when zero IPv6 addresses are assigned (latent exposure). Apply exactly one option via bootstrap_ipv6_firewall_baseline.",
|
|
15423
|
+
"inputSchema": {
|
|
15424
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15425
|
+
"type": "object",
|
|
15426
|
+
"properties": {},
|
|
15427
|
+
"additionalProperties": false
|
|
15428
|
+
}
|
|
15429
|
+
},
|
|
15430
|
+
{
|
|
15431
|
+
"name": "audit_ssh_hardening",
|
|
15432
|
+
"title": "Audit SSH Hardening",
|
|
15433
|
+
"risk": "read",
|
|
15434
|
+
"annotations": {
|
|
15435
|
+
"readOnlyHint": true,
|
|
15436
|
+
"idempotentHint": true,
|
|
15437
|
+
"openWorldHint": false
|
|
15438
|
+
},
|
|
15439
|
+
"description": "Read-only. Checks `/ip ssh`: strong-crypto (auto-fixable), RSA host-key below 2048 bits and host-key-type (report-only recommendation to migrate to ed25519 — regeneration invalidates known_hosts, so never auto-applied), and always-allow-password-login. Remediate the auto-fixable parts with harden_ssh_service.",
|
|
15440
|
+
"inputSchema": {
|
|
15441
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15442
|
+
"type": "object",
|
|
15443
|
+
"properties": {},
|
|
15444
|
+
"additionalProperties": false
|
|
15445
|
+
}
|
|
15446
|
+
},
|
|
15447
|
+
{
|
|
15448
|
+
"name": "audit_ip_service_exposure",
|
|
15449
|
+
"title": "Audit IP Service Exposure",
|
|
15450
|
+
"risk": "read",
|
|
15451
|
+
"annotations": {
|
|
15452
|
+
"readOnlyHint": true,
|
|
15453
|
+
"idempotentHint": true,
|
|
15454
|
+
"openWorldHint": false
|
|
15455
|
+
},
|
|
15456
|
+
"description": "Read-only. For every enabled `/ip service` with address=\"\" (unrestricted), checks whether an input firewall rule already scopes its port to trusted sources — if so it is NOT flagged (avoids the Winbox false positive). Always flags telnet if enabled (cleartext). Flags a 7.15+ reverse-proxy enabled with address=\"\" and warns about multi-WAN reachability. Remediate with harden_ip_service_exposure.",
|
|
15457
|
+
"inputSchema": {
|
|
15458
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15459
|
+
"type": "object",
|
|
15460
|
+
"properties": {},
|
|
15461
|
+
"additionalProperties": false
|
|
15462
|
+
}
|
|
15463
|
+
},
|
|
15464
|
+
{
|
|
15465
|
+
"name": "audit_connection_tracking_helpers",
|
|
15466
|
+
"title": "Audit Connection-Tracking Helpers",
|
|
15467
|
+
"risk": "read",
|
|
15468
|
+
"annotations": {
|
|
15469
|
+
"readOnlyHint": true,
|
|
15470
|
+
"idempotentHint": true,
|
|
15471
|
+
"openWorldHint": false
|
|
15472
|
+
},
|
|
15473
|
+
"description": "Read-only. Flags enabled `/ip firewall service-port` helpers (h323, sip, pptp, irc, rtsp, udplite, dccp, sctp, tftp) with no corresponding active service (e.g. pptp helper on with no pptp-server/client). Most are needs_manual_review (static config can't fully prove non-use); pptp with no server/client is auto-fixable. Remediate with harden_connection_tracking_helpers.",
|
|
15474
|
+
"inputSchema": {
|
|
15475
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15476
|
+
"type": "object",
|
|
15477
|
+
"properties": {},
|
|
15478
|
+
"additionalProperties": false
|
|
15479
|
+
}
|
|
15480
|
+
},
|
|
15481
|
+
{
|
|
15482
|
+
"name": "audit_management_plane_exposure",
|
|
15483
|
+
"title": "Audit Management-Plane Exposure",
|
|
15484
|
+
"risk": "read",
|
|
15485
|
+
"annotations": {
|
|
15486
|
+
"readOnlyHint": true,
|
|
15487
|
+
"idempotentHint": true,
|
|
15488
|
+
"openWorldHint": false
|
|
15489
|
+
},
|
|
15490
|
+
"description": "Read-only. Bundles the smaller management-plane checks: mac-server / mac-winbox allowed-interface-list=all, bandwidth-server unrestricted, romon enabled, neighbor discovery scope, and default-named SNMP communities with open addresses. Most are report-only (the correct LAN interface-list is site-specific); bandwidth-server disable is auto-fixable. Remediate the auto-fixable parts with harden_management_plane_exposure.",
|
|
15491
|
+
"inputSchema": {
|
|
15492
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15493
|
+
"type": "object",
|
|
15494
|
+
"properties": {},
|
|
15495
|
+
"additionalProperties": false
|
|
15496
|
+
}
|
|
15497
|
+
},
|
|
15498
|
+
{
|
|
15499
|
+
"name": "audit_account_hygiene",
|
|
15500
|
+
"title": "Audit Account Hygiene",
|
|
15501
|
+
"risk": "read",
|
|
15502
|
+
"annotations": {
|
|
15503
|
+
"readOnlyHint": true,
|
|
15504
|
+
"idempotentHint": true,
|
|
15505
|
+
"openWorldHint": false
|
|
15506
|
+
},
|
|
15507
|
+
"description": "Read-only, audit-only by design. Checks `/user settings` password policy (minimum-password-length, minimum-categories), flags enabled accounts with obviously-temporary names (test/demo/temp/guest/admin) across /user, /ppp secret and /user-manager, and flags read-tier groups granted broad protocol access. Account deletion and group policy are manual decisions (needs_manual_review). The password-policy settings can be applied with the narrow fix_password_policy tool.",
|
|
15508
|
+
"inputSchema": {
|
|
15509
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15510
|
+
"type": "object",
|
|
15511
|
+
"properties": {},
|
|
15512
|
+
"additionalProperties": false
|
|
15513
|
+
}
|
|
15514
|
+
},
|
|
15515
|
+
{
|
|
15516
|
+
"name": "audit_certificate_hygiene",
|
|
15517
|
+
"title": "Audit Certificate Hygiene (CRL)",
|
|
15518
|
+
"risk": "read",
|
|
15519
|
+
"annotations": {
|
|
15520
|
+
"readOnlyHint": true,
|
|
15521
|
+
"idempotentHint": true,
|
|
15522
|
+
"openWorldHint": false
|
|
15523
|
+
},
|
|
15524
|
+
"description": "Read-only. Adds the CRL-policy check that cert_expiry_audit does not cover: flags `/certificate settings` crl-use=no / crl-download=no when certificate-based services (OpenVPN with client/server cert verification, SSTP with a certificate) are in active use. Remediate with fix_certificate_crl_policy.",
|
|
15525
|
+
"inputSchema": {
|
|
15526
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15527
|
+
"type": "object",
|
|
15528
|
+
"properties": {},
|
|
15529
|
+
"additionalProperties": false
|
|
15530
|
+
}
|
|
15531
|
+
},
|
|
15532
|
+
{
|
|
15533
|
+
"name": "audit_network_segmentation",
|
|
15534
|
+
"title": "Audit Network Segmentation",
|
|
15535
|
+
"risk": "read",
|
|
15536
|
+
"annotations": {
|
|
15537
|
+
"readOnlyHint": true,
|
|
15538
|
+
"idempotentHint": true,
|
|
15539
|
+
"openWorldHint": false
|
|
15540
|
+
},
|
|
15541
|
+
"description": "Read-only, report-only (no fix — this is architecture, not a bug). Flags a single PHYSICAL interface carrying multiple non-overlapping subnets where one is a DHCP client pool and another hosts server-like (NAT-target) addresses — a proxy for 'servers and clients share one L2 domain with no VLAN isolation'. Reports the topology fact as proven and the isolation-absence claim as needs_live_verification, and includes a concrete suggested VLAN plan. Never auto-applied.",
|
|
15542
|
+
"inputSchema": {
|
|
15543
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15544
|
+
"type": "object",
|
|
15545
|
+
"properties": {},
|
|
15546
|
+
"additionalProperties": false
|
|
15547
|
+
}
|
|
15548
|
+
},
|
|
15549
|
+
{
|
|
15550
|
+
"name": "audit_dns_resolver_exposure",
|
|
15551
|
+
"title": "Audit DNS Resolver Exposure",
|
|
15552
|
+
"risk": "read",
|
|
15553
|
+
"annotations": {
|
|
15554
|
+
"readOnlyHint": true,
|
|
15555
|
+
"idempotentHint": true,
|
|
15556
|
+
"openWorldHint": false
|
|
15557
|
+
},
|
|
15558
|
+
"description": "Read-only. Flags `/ip dns allow-remote-requests=yes` when port 53 is not restricted to trusted sources on BOTH TCP and UDP by an input firewall rule (catches the field trap where a rule covers only one transport). Remediate with harden_dns_resolver_exposure.",
|
|
15559
|
+
"inputSchema": {
|
|
15560
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15561
|
+
"type": "object",
|
|
15562
|
+
"properties": {},
|
|
15563
|
+
"additionalProperties": false
|
|
15564
|
+
}
|
|
15565
|
+
},
|
|
15566
|
+
{
|
|
15567
|
+
"name": "add_firewall_default_deny",
|
|
15568
|
+
"title": "Add Firewall Default-Deny",
|
|
15569
|
+
"risk": "dangerous",
|
|
15570
|
+
"annotations": {
|
|
15571
|
+
"destructiveHint": true,
|
|
15572
|
+
"openWorldHint": false
|
|
15573
|
+
},
|
|
15574
|
+
"description": "Applies default-deny remediations by finding_id from a prior audit_firewall_default_deny run: inserts the canonical safe tail (accept established/related/untracked → drop invalid → final unconditional drop), and/or re-enables a specific disabled catch-all drop (a separate finding_id, since re-enabling a deliberately-disabled rule is a different risk than inserting a new tail). DRY RUN unless confirm=true. Snapshots first and runs inside Safe Mode (auto-revert on lockout). Idempotent: a re-run finds nothing to add.",
|
|
15575
|
+
"inputSchema": {
|
|
15576
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15577
|
+
"type": "object",
|
|
15578
|
+
"properties": {
|
|
15579
|
+
"finding_ids": {
|
|
15580
|
+
"minItems": 1,
|
|
15581
|
+
"type": "array",
|
|
15582
|
+
"items": {
|
|
15583
|
+
"type": "string"
|
|
15584
|
+
},
|
|
15585
|
+
"description": "Specific finding_id(s) from a prior audit_firewall_default_deny run to remediate."
|
|
15586
|
+
},
|
|
15587
|
+
"confirm": {
|
|
15588
|
+
"default": false,
|
|
15589
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15590
|
+
"type": "boolean"
|
|
15591
|
+
}
|
|
15592
|
+
},
|
|
15593
|
+
"required": [
|
|
15594
|
+
"finding_ids",
|
|
15595
|
+
"confirm"
|
|
15596
|
+
],
|
|
15597
|
+
"additionalProperties": false
|
|
15598
|
+
}
|
|
15599
|
+
},
|
|
15600
|
+
{
|
|
15601
|
+
"name": "enforce_address_list_blocking",
|
|
15602
|
+
"title": "Enforce Address-List Blocking",
|
|
15603
|
+
"risk": "dangerous",
|
|
15604
|
+
"annotations": {
|
|
15605
|
+
"destructiveHint": true,
|
|
15606
|
+
"openWorldHint": false
|
|
15607
|
+
},
|
|
15608
|
+
"description": "For each unenforced-list finding_id from a prior audit_address_list_enforcement run, inserts a drop rule matching that list (src- or dst- as appropriate) positioned before the chain's default-deny tail. DRY RUN unless confirm=true. Snapshots first and runs inside Safe Mode.",
|
|
15609
|
+
"inputSchema": {
|
|
15610
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15611
|
+
"type": "object",
|
|
15612
|
+
"properties": {
|
|
15613
|
+
"finding_ids": {
|
|
15614
|
+
"minItems": 1,
|
|
15615
|
+
"type": "array",
|
|
15616
|
+
"items": {
|
|
15617
|
+
"type": "string"
|
|
15618
|
+
},
|
|
15619
|
+
"description": "Specific finding_id(s) from a prior audit_address_list_enforcement run to remediate."
|
|
15620
|
+
},
|
|
15621
|
+
"confirm": {
|
|
15622
|
+
"default": false,
|
|
15623
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15624
|
+
"type": "boolean"
|
|
15625
|
+
}
|
|
15626
|
+
},
|
|
15627
|
+
"required": [
|
|
15628
|
+
"finding_ids",
|
|
15629
|
+
"confirm"
|
|
15630
|
+
],
|
|
15631
|
+
"additionalProperties": false
|
|
15632
|
+
}
|
|
15633
|
+
},
|
|
15634
|
+
{
|
|
15635
|
+
"name": "harden_kernel_ip_settings",
|
|
15636
|
+
"title": "Harden Kernel IP Settings",
|
|
15637
|
+
"risk": "write-idempotent",
|
|
15638
|
+
"annotations": {
|
|
15639
|
+
"destructiveHint": false,
|
|
15640
|
+
"idempotentHint": true,
|
|
15641
|
+
"openWorldHint": false
|
|
15642
|
+
},
|
|
15643
|
+
"description": "Applies `/ip settings set` (and `/ipv6 settings set`) corrections for the kernel-hardening finding_ids from a prior audit_kernel_ip_hardening run. DRY RUN unless confirm=true. Snapshots first.",
|
|
15644
|
+
"inputSchema": {
|
|
15645
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15646
|
+
"type": "object",
|
|
15647
|
+
"properties": {
|
|
15648
|
+
"finding_ids": {
|
|
15649
|
+
"minItems": 1,
|
|
15650
|
+
"type": "array",
|
|
15651
|
+
"items": {
|
|
15652
|
+
"type": "string"
|
|
15653
|
+
},
|
|
15654
|
+
"description": "Specific finding_id(s) from a prior audit_kernel_ip_hardening run to remediate."
|
|
15655
|
+
},
|
|
15656
|
+
"confirm": {
|
|
15657
|
+
"default": false,
|
|
15658
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15659
|
+
"type": "boolean"
|
|
15660
|
+
}
|
|
15661
|
+
},
|
|
15662
|
+
"required": [
|
|
15663
|
+
"finding_ids",
|
|
15664
|
+
"confirm"
|
|
15665
|
+
],
|
|
15666
|
+
"additionalProperties": false
|
|
15667
|
+
}
|
|
15668
|
+
},
|
|
15669
|
+
{
|
|
15670
|
+
"name": "bootstrap_ipv6_firewall_baseline",
|
|
15671
|
+
"title": "Bootstrap IPv6 Firewall Baseline",
|
|
15672
|
+
"risk": "dangerous",
|
|
15673
|
+
"annotations": {
|
|
15674
|
+
"destructiveHint": true,
|
|
15675
|
+
"openWorldHint": false
|
|
15676
|
+
},
|
|
15677
|
+
"description": "Applies ONE of the two mutually-exclusive IPv6 baseline finding_ids from a prior audit_ipv6_firewall_baseline run (bootstrap filter, or disable forwarding). Pass exactly one option's finding_id. DRY RUN unless confirm=true. Snapshots first and runs inside Safe Mode.",
|
|
15678
|
+
"inputSchema": {
|
|
15679
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15680
|
+
"type": "object",
|
|
15681
|
+
"properties": {
|
|
15682
|
+
"finding_ids": {
|
|
15683
|
+
"minItems": 1,
|
|
15684
|
+
"type": "array",
|
|
15685
|
+
"items": {
|
|
15686
|
+
"type": "string"
|
|
15687
|
+
},
|
|
15688
|
+
"description": "Specific finding_id(s) from a prior audit_ipv6_firewall_baseline run to remediate."
|
|
15689
|
+
},
|
|
15690
|
+
"confirm": {
|
|
15691
|
+
"default": false,
|
|
15692
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15693
|
+
"type": "boolean"
|
|
15694
|
+
}
|
|
15695
|
+
},
|
|
15696
|
+
"required": [
|
|
15697
|
+
"finding_ids",
|
|
15698
|
+
"confirm"
|
|
15699
|
+
],
|
|
15700
|
+
"additionalProperties": false
|
|
15701
|
+
}
|
|
15702
|
+
},
|
|
15703
|
+
{
|
|
15704
|
+
"name": "harden_ssh_service",
|
|
15705
|
+
"title": "Harden SSH Service",
|
|
15706
|
+
"risk": "dangerous",
|
|
15707
|
+
"annotations": {
|
|
15708
|
+
"destructiveHint": true,
|
|
15709
|
+
"openWorldHint": false
|
|
15710
|
+
},
|
|
15711
|
+
"description": "Applies the auto-fixable SSH finding_ids from a prior audit_ssh_hardening run (currently strong-crypto=yes). Host-key regeneration is NEVER auto-applied (report-only). DRY RUN unless confirm=true. Snapshots first and runs inside Safe Mode.",
|
|
15712
|
+
"inputSchema": {
|
|
15713
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15714
|
+
"type": "object",
|
|
15715
|
+
"properties": {
|
|
15716
|
+
"finding_ids": {
|
|
15717
|
+
"minItems": 1,
|
|
15718
|
+
"type": "array",
|
|
15719
|
+
"items": {
|
|
15720
|
+
"type": "string"
|
|
15721
|
+
},
|
|
15722
|
+
"description": "Specific finding_id(s) from a prior audit_ssh_hardening run to remediate."
|
|
15723
|
+
},
|
|
15724
|
+
"confirm": {
|
|
15725
|
+
"default": false,
|
|
15726
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15727
|
+
"type": "boolean"
|
|
15728
|
+
}
|
|
15729
|
+
},
|
|
15730
|
+
"required": [
|
|
15731
|
+
"finding_ids",
|
|
15732
|
+
"confirm"
|
|
15733
|
+
],
|
|
15734
|
+
"additionalProperties": false
|
|
15735
|
+
}
|
|
15736
|
+
},
|
|
15737
|
+
{
|
|
15738
|
+
"name": "harden_ip_service_exposure",
|
|
15739
|
+
"title": "Harden IP Service Exposure",
|
|
15740
|
+
"risk": "dangerous",
|
|
15741
|
+
"annotations": {
|
|
15742
|
+
"destructiveHint": true,
|
|
15743
|
+
"openWorldHint": false
|
|
15744
|
+
},
|
|
15745
|
+
"description": "For the service-exposure finding_ids from a prior audit_ip_service_exposure run, restricts the service address or disables it (telnet/reverse-proxy default to disable). DRY RUN unless confirm=true. Snapshots first and runs inside Safe Mode.",
|
|
15746
|
+
"inputSchema": {
|
|
15747
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15748
|
+
"type": "object",
|
|
15749
|
+
"properties": {
|
|
15750
|
+
"finding_ids": {
|
|
15751
|
+
"minItems": 1,
|
|
15752
|
+
"type": "array",
|
|
15753
|
+
"items": {
|
|
15754
|
+
"type": "string"
|
|
15755
|
+
},
|
|
15756
|
+
"description": "Specific finding_id(s) from a prior audit_ip_service_exposure run to remediate."
|
|
15757
|
+
},
|
|
15758
|
+
"confirm": {
|
|
15759
|
+
"default": false,
|
|
15760
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15761
|
+
"type": "boolean"
|
|
15762
|
+
}
|
|
15763
|
+
},
|
|
15764
|
+
"required": [
|
|
15765
|
+
"finding_ids",
|
|
15766
|
+
"confirm"
|
|
15767
|
+
],
|
|
15768
|
+
"additionalProperties": false
|
|
15769
|
+
}
|
|
15770
|
+
},
|
|
15771
|
+
{
|
|
15772
|
+
"name": "harden_connection_tracking_helpers",
|
|
15773
|
+
"title": "Harden Connection-Tracking Helpers",
|
|
15774
|
+
"risk": "write-idempotent",
|
|
15775
|
+
"annotations": {
|
|
15776
|
+
"destructiveHint": false,
|
|
15777
|
+
"idempotentHint": true,
|
|
15778
|
+
"openWorldHint": false
|
|
15779
|
+
},
|
|
15780
|
+
"description": "Disables the auto-fixable helper finding_ids from a prior audit_connection_tracking_helpers run, one at a time. DRY RUN unless confirm=true. Snapshots first.",
|
|
15781
|
+
"inputSchema": {
|
|
15782
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15783
|
+
"type": "object",
|
|
15784
|
+
"properties": {
|
|
15785
|
+
"finding_ids": {
|
|
15786
|
+
"minItems": 1,
|
|
15787
|
+
"type": "array",
|
|
15788
|
+
"items": {
|
|
15789
|
+
"type": "string"
|
|
15790
|
+
},
|
|
15791
|
+
"description": "Specific finding_id(s) from a prior audit_connection_tracking_helpers run to remediate."
|
|
15792
|
+
},
|
|
15793
|
+
"confirm": {
|
|
15794
|
+
"default": false,
|
|
15795
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15796
|
+
"type": "boolean"
|
|
15797
|
+
}
|
|
15798
|
+
},
|
|
15799
|
+
"required": [
|
|
15800
|
+
"finding_ids",
|
|
15801
|
+
"confirm"
|
|
15802
|
+
],
|
|
15803
|
+
"additionalProperties": false
|
|
15804
|
+
}
|
|
15805
|
+
},
|
|
15806
|
+
{
|
|
15807
|
+
"name": "harden_management_plane_exposure",
|
|
15808
|
+
"title": "Harden Management-Plane Exposure",
|
|
15809
|
+
"risk": "write-idempotent",
|
|
15810
|
+
"annotations": {
|
|
15811
|
+
"destructiveHint": false,
|
|
15812
|
+
"idempotentHint": true,
|
|
15813
|
+
"openWorldHint": false
|
|
15814
|
+
},
|
|
15815
|
+
"description": "Applies the auto-fixable management-plane finding_ids from a prior audit run (e.g. disabling an unused bandwidth-server). Site-specific restrictions remain report-only. DRY RUN unless confirm=true. Snapshots first.",
|
|
15816
|
+
"inputSchema": {
|
|
15817
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15818
|
+
"type": "object",
|
|
15819
|
+
"properties": {
|
|
15820
|
+
"finding_ids": {
|
|
15821
|
+
"minItems": 1,
|
|
15822
|
+
"type": "array",
|
|
15823
|
+
"items": {
|
|
15824
|
+
"type": "string"
|
|
15825
|
+
},
|
|
15826
|
+
"description": "Specific finding_id(s) from a prior audit_management_plane_exposure run to remediate."
|
|
15827
|
+
},
|
|
15828
|
+
"confirm": {
|
|
15829
|
+
"default": false,
|
|
15830
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15831
|
+
"type": "boolean"
|
|
15832
|
+
}
|
|
15833
|
+
},
|
|
15834
|
+
"required": [
|
|
15835
|
+
"finding_ids",
|
|
15836
|
+
"confirm"
|
|
15837
|
+
],
|
|
15838
|
+
"additionalProperties": false
|
|
15839
|
+
}
|
|
15840
|
+
},
|
|
15841
|
+
{
|
|
15842
|
+
"name": "fix_password_policy",
|
|
15843
|
+
"title": "Fix Password Policy",
|
|
15844
|
+
"risk": "write-idempotent",
|
|
15845
|
+
"annotations": {
|
|
15846
|
+
"destructiveHint": false,
|
|
15847
|
+
"idempotentHint": true,
|
|
15848
|
+
"openWorldHint": false
|
|
15849
|
+
},
|
|
15850
|
+
"description": "Narrow companion to audit_account_hygiene: applies ONLY the `/user settings` password-policy finding_ids (minimum-password-length, minimum-categories). Touches nothing else — account deletion and group policy are never automated. DRY RUN unless confirm=true. Snapshots first.",
|
|
15851
|
+
"inputSchema": {
|
|
15852
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15853
|
+
"type": "object",
|
|
15854
|
+
"properties": {
|
|
15855
|
+
"finding_ids": {
|
|
15856
|
+
"minItems": 1,
|
|
15857
|
+
"type": "array",
|
|
15858
|
+
"items": {
|
|
15859
|
+
"type": "string"
|
|
15860
|
+
},
|
|
15861
|
+
"description": "Specific finding_id(s) from a prior audit_account_hygiene run to remediate."
|
|
15862
|
+
},
|
|
15863
|
+
"confirm": {
|
|
15864
|
+
"default": false,
|
|
15865
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15866
|
+
"type": "boolean"
|
|
15867
|
+
}
|
|
15868
|
+
},
|
|
15869
|
+
"required": [
|
|
15870
|
+
"finding_ids",
|
|
15871
|
+
"confirm"
|
|
15872
|
+
],
|
|
15873
|
+
"additionalProperties": false
|
|
15874
|
+
}
|
|
15875
|
+
},
|
|
15876
|
+
{
|
|
15877
|
+
"name": "fix_certificate_crl_policy",
|
|
15878
|
+
"title": "Fix Certificate CRL Policy",
|
|
15879
|
+
"risk": "write-idempotent",
|
|
15880
|
+
"annotations": {
|
|
15881
|
+
"destructiveHint": false,
|
|
15882
|
+
"idempotentHint": true,
|
|
15883
|
+
"openWorldHint": false
|
|
15884
|
+
},
|
|
15885
|
+
"description": "Sets crl-use=yes / crl-download=yes for the certificate finding_id from a prior audit_certificate_hygiene run. Note: CRL download needs outbound reachability to the CRL distribution point (may need a firewall allowance). DRY RUN unless confirm=true. Snapshots first.",
|
|
15886
|
+
"inputSchema": {
|
|
15887
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15888
|
+
"type": "object",
|
|
15889
|
+
"properties": {
|
|
15890
|
+
"finding_ids": {
|
|
15891
|
+
"minItems": 1,
|
|
15892
|
+
"type": "array",
|
|
15893
|
+
"items": {
|
|
15894
|
+
"type": "string"
|
|
15895
|
+
},
|
|
15896
|
+
"description": "Specific finding_id(s) from a prior audit_certificate_hygiene run to remediate."
|
|
15897
|
+
},
|
|
15898
|
+
"confirm": {
|
|
15899
|
+
"default": false,
|
|
15900
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15901
|
+
"type": "boolean"
|
|
15902
|
+
}
|
|
15903
|
+
},
|
|
15904
|
+
"required": [
|
|
15905
|
+
"finding_ids",
|
|
15906
|
+
"confirm"
|
|
15907
|
+
],
|
|
15908
|
+
"additionalProperties": false
|
|
15909
|
+
}
|
|
15910
|
+
},
|
|
15911
|
+
{
|
|
15912
|
+
"name": "harden_dns_resolver_exposure",
|
|
15913
|
+
"title": "Harden DNS Resolver Exposure",
|
|
15914
|
+
"risk": "dangerous",
|
|
15915
|
+
"annotations": {
|
|
15916
|
+
"destructiveHint": true,
|
|
15917
|
+
"openWorldHint": false
|
|
15918
|
+
},
|
|
15919
|
+
"description": "For the DNS finding_id from a prior audit_dns_resolver_exposure run, either restricts input port 53 (TCP+UDP) or disables allow-remote-requests (when the resolver only serves the router's own DHCP clients). DRY RUN unless confirm=true. Snapshots first and runs inside Safe Mode.",
|
|
15920
|
+
"inputSchema": {
|
|
15921
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15922
|
+
"type": "object",
|
|
15923
|
+
"properties": {
|
|
15924
|
+
"finding_ids": {
|
|
15925
|
+
"minItems": 1,
|
|
15926
|
+
"type": "array",
|
|
15927
|
+
"items": {
|
|
15928
|
+
"type": "string"
|
|
15929
|
+
},
|
|
15930
|
+
"description": "Specific finding_id(s) from a prior audit_dns_resolver_exposure run to remediate."
|
|
15931
|
+
},
|
|
15932
|
+
"confirm": {
|
|
15933
|
+
"default": false,
|
|
15934
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
15935
|
+
"type": "boolean"
|
|
15936
|
+
}
|
|
15937
|
+
},
|
|
15938
|
+
"required": [
|
|
15939
|
+
"finding_ids",
|
|
15940
|
+
"confirm"
|
|
15941
|
+
],
|
|
15942
|
+
"additionalProperties": false
|
|
15943
|
+
}
|
|
15944
|
+
},
|
|
15945
|
+
{
|
|
15946
|
+
"name": "run_security_hardening_audit",
|
|
15947
|
+
"title": "Run Full Security Hardening Audit",
|
|
15948
|
+
"risk": "read",
|
|
15949
|
+
"annotations": {
|
|
15950
|
+
"readOnlyHint": true,
|
|
15951
|
+
"idempotentHint": true,
|
|
15952
|
+
"openWorldHint": false
|
|
15953
|
+
},
|
|
15954
|
+
"description": "Runs EVERY security-hardening category against the device in one pass (firewall default-deny, address-list enforcement, kernel IP hardening, IPv6 baseline, SSH, IP service exposure, connection-tracking helpers, management-plane exposure, account hygiene, certificate CRL policy, network segmentation, DNS resolver exposure) and returns a single severity-ranked report. Every finding carries a stable finding_id, category, severity, confidence (proven vs needs_live_verification) and — where safe — an automated fix. Pure read, no confirm needed. Feed the finding_ids you choose into apply_security_hardening_fixes. Narrow to one category with the audit_* tools; for the broader firewall analysis use firewall_audit, and for the scored compliance grade use run_compliance_audit.",
|
|
15955
|
+
"inputSchema": {
|
|
15956
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15957
|
+
"type": "object",
|
|
15958
|
+
"properties": {
|
|
15959
|
+
"categories": {
|
|
15960
|
+
"description": "Narrow to specific categories. Available: firewall_default_deny, address_list_enforcement, kernel_ip_hardening, ipv6_firewall_baseline, ssh_hardening, ip_service_exposure, connection_tracking_helpers, management_plane_exposure, account_hygiene, certificate_hygiene, network_segmentation, dns_resolver_exposure. Omit for all.",
|
|
15961
|
+
"type": "array",
|
|
15962
|
+
"items": {
|
|
15963
|
+
"type": "string",
|
|
15964
|
+
"enum": [
|
|
15965
|
+
"firewall_default_deny",
|
|
15966
|
+
"address_list_enforcement",
|
|
15967
|
+
"kernel_ip_hardening",
|
|
15968
|
+
"ipv6_firewall_baseline",
|
|
15969
|
+
"ssh_hardening",
|
|
15970
|
+
"ip_service_exposure",
|
|
15971
|
+
"connection_tracking_helpers",
|
|
15972
|
+
"management_plane_exposure",
|
|
15973
|
+
"account_hygiene",
|
|
15974
|
+
"certificate_hygiene",
|
|
15975
|
+
"network_segmentation",
|
|
15976
|
+
"dns_resolver_exposure"
|
|
15977
|
+
]
|
|
15978
|
+
}
|
|
15979
|
+
}
|
|
15980
|
+
},
|
|
15981
|
+
"additionalProperties": false
|
|
15982
|
+
}
|
|
15983
|
+
},
|
|
15984
|
+
{
|
|
15985
|
+
"name": "apply_security_hardening_fixes",
|
|
15986
|
+
"title": "Apply Security Hardening Fixes",
|
|
15987
|
+
"risk": "dangerous",
|
|
15988
|
+
"annotations": {
|
|
15989
|
+
"destructiveHint": true,
|
|
15990
|
+
"openWorldHint": false
|
|
15991
|
+
},
|
|
15992
|
+
"description": "Applies specific finding_ids from a prior run_security_hardening_audit, dispatching each to its category's remediation in a SAFE ORDER (firewall default-deny and address-list enforcement before service-exposure before helper/hygiene), all wrapped in ONE Safe-Mode session with ONE pre-change snapshot. Returns a per-finding success/failure result plus the snapshot id (roll back with diff_config_snapshots). DRY RUN unless confirm=true. NEVER accepts a blanket 'fix everything' flag — you must pass explicit finding_ids sourced from an audit.",
|
|
15993
|
+
"inputSchema": {
|
|
15994
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15995
|
+
"type": "object",
|
|
15996
|
+
"properties": {
|
|
15997
|
+
"finding_ids": {
|
|
15998
|
+
"minItems": 1,
|
|
15999
|
+
"type": "array",
|
|
16000
|
+
"items": {
|
|
16001
|
+
"type": "string"
|
|
16002
|
+
},
|
|
16003
|
+
"description": "Explicit finding_id(s) from a prior run_security_hardening_audit. No blanket apply."
|
|
16004
|
+
},
|
|
16005
|
+
"confirm": {
|
|
16006
|
+
"default": false,
|
|
16007
|
+
"description": "Must be true to write. false (default) returns a dry-run preview and changes nothing.",
|
|
16008
|
+
"type": "boolean"
|
|
16009
|
+
}
|
|
16010
|
+
},
|
|
16011
|
+
"required": [
|
|
16012
|
+
"finding_ids",
|
|
16013
|
+
"confirm"
|
|
16014
|
+
],
|
|
16015
|
+
"additionalProperties": false
|
|
16016
|
+
}
|
|
16017
|
+
},
|
|
15362
16018
|
{
|
|
15363
16019
|
"name": "setup_port_knock",
|
|
15364
16020
|
"title": "Set Up Port-Knock Guardian",
|