Roadmap #4

Open
opened 2026-08-31 09:20:53 +00:00 by speatzle · 2 comments
Owner

MVP

  • e2e Tests (wip)
  • Refactor API functions to allow multiple frontends (jsonrpsee + varlink), easier testing and authorization
  • API Tests
  • Traffic Tests
  • Secure the Webinterface: login rate limit, csrf, cookie http only, ...
  • Basic User Roles Admin/Read-only, allow for future custom roles
  • Add Missing Config Validations (garde + structdb)
  • Write nfsense users to passwd for Shell/Serial/SSH
  • User SSH Keys
  • System Settings (Hostname, DNS, SSH, NTP)
  • CLI via varlink with peerauth for basic/initial configuration (interfaces, default rules, password)
  • initial Setup via CLI
  • Frontend form validation (via generated json schema from backend?)
  • Policy Routing
  • Multiwan (via vrf's) with balancing and failover
  • Minimal Dashboard with a few Widgets (Service state, Link state, leases, Update Status, Uptime, Current Time )
  • User Settings (Theme, animations, Dashboard config)
  • Default Service Definitions (SSH, ..., HTTP,...)
  • Group Objects
  • Display Validation Errors Better
  • Config Backups (always keep a config with a previous config version)
  • mkosi Image Boot Failure Recovery
  • mkosi Image Reproducibility (debian snapshot + security updates)
  • mkosi Image swtpm fallback
  • mkosi Image, detect certain failure modes and show an error (bad machine-id -> var mounting issues)
  • mkosi Image, dont apply presets on every boot, copy /usr/share/factory/etc instead (skip/readonly etc entierly?)
  • Improve Apply Failure detection (service ready), stop unnecessary services (no dhcp -> stop kea)
  • Update signing, Image CI build and Deploy via update Server
  • Security harden Services (apparmor, chroot, minimal service files)
  • Config File permission
  • Counter / Lease persistence
  • Support Services on VRF interfaces
  • DHCP Lease viewer
  • IPv6 (configure interfaces, DHCP, RA)
  • Logo
  • Frontend i18n
  • Documentation
  • should read only Users be allowed to Export the Config including hashes?
  • View journal via Webinterface
  • Persistent Audit Log
  • Rework Live log
  • Task/Job System, Longer running things like Apply's, Updates (in the future certificate renewal) which also have logs and could fail should be a Task with a persistent and live log views and perhaps be abort able
  • Security audit

Mid term

  • Generated addresses from interfaces and "any" service/address
  • Persistent Websocket for API, with https fallback
  • Diagnostic Tools: PING, DNS, ARP/MAC Table, Packet capture, Routing Table, netflow, nftables ruleset view?
  • Custom Icons
  • Kernel patch to allow nftables to match ipv4 and ipv6 packets against a single ipv6 ipset (one rule for 4 and 6)
  • Schedules Tasks (for update, reboots, list fetching, certificates)
  • DNS/Geo lists / IP sets for allowing or Blocking in nftables and in DNS
  • Config Damage Calculation (only Reload services/configs affected by user change) (prevents brief interruption due to networkd reload)
  • 2FA
  • API Keys
  • Frontend Right click Actions
  • Optional Config Auto revert (if admin does not acknowledge that the new changes still allow for admin access)
  • Metrics
  • PPPoE
  • Certificate Management and auto renewal (ACME)
  • IPSec
  • Webshell
  • DNS64
  • IP 6to4 / 4to6
  • VXlan
  • Zones (Interface Groups)
  • Notifications
  • View References of Object

Future

  • Track User changes separately, Allow applying only your changes (and the changes your changes depend on)
  • QOS/Traffic Limits
  • External Auth Backends for Users and VPN (LDAP, radius, oAuth2)
  • OpenVPN?
  • Suricata
  • TLS Decrypt/Proxy
  • Reverseproxy (Caddy ?)
  • BGP/OSPF
  • Scheduled Rules
  • HA (via Shared IP, No VRRP/CARP, Drop Packets via low level hooks, Transfer state and config via HA Link with ipv6 link local like conntrack, leases, etc)
  • Plugin System via Sysext
# MVP - [ ] e2e Tests (wip) - [ ] Refactor API functions to allow multiple frontends (jsonrpsee + varlink), easier testing and authorization - [ ] API Tests - [ ] Traffic Tests - [ ] Secure the Webinterface: login rate limit, csrf, cookie http only, ... - [ ] Basic User Roles Admin/Read-only, allow for future custom roles - [ ] Add Missing Config Validations (garde + structdb) - [ ] Write nfsense users to passwd for Shell/Serial/SSH - [ ] User SSH Keys - [ ] System Settings (Hostname, DNS, SSH, NTP) - [ ] CLI via varlink with peerauth for basic/initial configuration (interfaces, default rules, password) - [ ] initial Setup via CLI - [ ] Frontend form validation (via generated json schema from backend?) - [ ] Policy Routing - [ ] Multiwan (via vrf's) with balancing and failover - [ ] Minimal Dashboard with a few Widgets (Service state, Link state, leases, Update Status, Uptime, Current Time ) - [ ] User Settings (Theme, animations, Dashboard config) - [ ] Default Service Definitions (SSH, ..., HTTP,...) - [ ] Group Objects - [ ] Display Validation Errors Better - [ ] Config Backups (always keep a config with a previous config version) - [ ] mkosi Image Boot Failure Recovery - [ ] mkosi Image Reproducibility (debian snapshot + security updates) - [ ] mkosi Image swtpm fallback - [ ] mkosi Image, detect certain failure modes and show an error (bad machine-id -> var mounting issues) - [ ] mkosi Image, dont apply presets on every boot, copy /usr/share/factory/etc instead (skip/readonly etc entierly?) - [ ] Improve Apply Failure detection (service ready), stop unnecessary services (no dhcp -> stop kea) - [ ] Update signing, Image CI build and Deploy via update Server - [ ] Security harden Services (apparmor, chroot, minimal service files) - [ ] Config File permission - [ ] Counter / Lease persistence - [ ] Support Services on VRF interfaces - [ ] DHCP Lease viewer - [ ] IPv6 (configure interfaces, DHCP, RA) - [ ] Logo - [ ] Frontend i18n - [ ] Documentation - [ ] should read only Users be allowed to Export the Config including hashes? - [ ] View journal via Webinterface - [ ] Persistent Audit Log - [ ] Rework Live log - [ ] Task/Job System, Longer running things like Apply's, Updates (in the future certificate renewal) which also have logs and could fail should be a Task with a persistent and live log views and perhaps be abort able - [ ] Security audit # Mid term - [ ] Generated addresses from interfaces and "any" service/address - [ ] Persistent Websocket for API, with https fallback - [ ] Diagnostic Tools: PING, DNS, ARP/MAC Table, Packet capture, Routing Table, netflow, nftables ruleset view? - [ ] Custom Icons - [ ] Kernel patch to allow nftables to match ipv4 and ipv6 packets against a single ipv6 ipset (one rule for 4 and 6) - [ ] Schedules Tasks (for update, reboots, list fetching, certificates) - [ ] DNS/Geo lists / IP sets for allowing or Blocking in nftables and in DNS - [ ] Config Damage Calculation (only Reload services/configs affected by user change) (prevents brief interruption due to networkd reload) - [ ] 2FA - [ ] API Keys - [ ] Frontend Right click Actions - [ ] Optional Config Auto revert (if admin does not acknowledge that the new changes still allow for admin access) - [ ] Metrics - [ ] PPPoE - [ ] Certificate Management and auto renewal (ACME) - [ ] IPSec - [ ] Webshell - [ ] DNS64 - [ ] IP 6to4 / 4to6 - [ ] VXlan - [ ] Zones (Interface Groups) - [ ] Notifications - [ ] View References of Object # Future - [ ] Track User changes separately, Allow applying only your changes (and the changes your changes depend on) - [ ] QOS/Traffic Limits - [ ] External Auth Backends for Users and VPN (LDAP, radius, oAuth2) - [ ] OpenVPN? - [ ] Suricata - [ ] TLS Decrypt/Proxy - [ ] Reverseproxy (Caddy ?) - [ ] BGP/OSPF - [ ] Scheduled Rules - [ ] HA (via Shared IP, No VRRP/CARP, Drop Packets via low level hooks, Transfer state and config via HA Link with ipv6 link local like conntrack, leases, etc) - [ ] Plugin System via Sysext

I'm going to pick each item apart here for clarification

@speatzle wrote in #4 (comment):

MVP

  • e2e Tests (wip)
  • Do you also mean e.g. a setup with different machines serving as WAN and LAN clients so you can check the connectivity end to end and observe the actual results of configuration changes?
  • Refactor API functions to allow multiple frontends (jsonrpsee + varlink), easier testing and authorization
  • I have to check your design, but the good news is that LLMs are excellent at this type of work
  • API Tests
  • Traffic Tests
  • Kinda same two questions about these
  • Secure the Webinterface: login rate limit, csrf, cookie http only, ...
  • LLMs help a lot with those too. Important to find at least one open weights model without too much censorship because some LLMs get touchy with security (like Fable 5).
  • Basic User Roles Admin/Read-only, allow for future custom roles
  • Should be easy-ish enough to implement the user and (I guess RBAC?) side of it. The ACL side tho... worth checking if there's anything that already does that
  • Add Missing Config Validations (garde + structdb)
  • I don't know your config format yet. What I had in mind for Andaru was a declarative JSON of sorts, and then the validation would be performed via JSON Schema. The realization of the configuration is a different story.
  • Write nfsense users to passwd for Shell/Serial/SSH
  • If you want them to also be Linux users, I guess it's understandable; but I have flashbacks of dealing with filesystem permissions whenever I think about combining software users with Linux users
  • User SSH Keys
  • Should be pretty doable once the ones above are. After all, you only need the public keys, I suppose.
  • System Settings (Hostname, DNS, SSH, NTP)
  • Should be pretty doable, though I'd imagine it would require the web UI session to be bound to the user; or it always runs as root and relies on its own set of permissions/ACLs for each user to decide whether to invoke a command or not.
  • CLI via varlink with peerauth for basic/initial configuration (interfaces, default rules, password)
  • Idea (perhaps complimentary): find a way to always start up even if in some form of extremely minimal configuration, e.g. a "factory reset" mode that can still be remotely configured.
  • initial Setup via CLI
  • Isn't it the same as the one before it?
  • Frontend form validation (via generated json schema from backend?)
  • I have ideas but nothing too concrete
  • Policy Routing
  • You mean like Group Policies? e.g. specific groups of users/client addresses/MACs receive specific rules, at specific times, etc.?
  • Multiwan (via vrf's) with balancing and failover
  • I've never even toyed with this
  • Minimal Dashboard with a few Widgets (Service state, Link state, leases, Update Status, Uptime, Current Time )
  • But as an alternative dashboard or as the initial dashboard?
  • User Settings (Theme, animations, Dashboard config)
  • Should be easily doable, since nothing here touches Linux users anyway
  • Default Service Definitions (SSH, ..., HTTP,...)
  • What do you mean by that?
  • Group Objects
  • As in the ones that get used with Group Policies? Or also as objects that are used as groups (e.g. like pfSense aliases, but not just in name)
  • Display Validation Errors Better
  • Noted
  • Config Backups (always keep a config with a previous config version)
  • Declarative config fits very well into this model
  • mkosi Image Boot Failure Recovery
  • mkosi Image Reproducibility (debian snapshot + security updates)
  • mkosi Image swtpm fallback
  • mkosi Image, detect certain failure modes and show an error (bad machine-id -> var mounting issues)
  • mkosi Image, dont apply presets on every boot, copy /usr/share/factory/etc instead (skip/readonly etc entierly?)
  • No idea about any of these
  • Improve Apply Failure detection (service ready), stop unnecessary services (no dhcp -> stop kea)
  • Declarative config FTW
  • Update signing, Image CI build and Deploy via update Server
  • Advisable to use LLMs for research, specification and implementation -- figuring out these annoying, often-partially-documented details is where they shine too

I will finish touching on them later

I'm going to pick each item apart here for clarification @speatzle wrote in https://git.soontm.de/speatzle/nfsense/issues/4#issue-6: > # [](#mvp)MVP > * [ ] e2e Tests (wip) * Do you also mean e.g. a setup with different machines serving as WAN and LAN clients so you can check the connectivity end to end and observe the actual results of configuration changes? > * [ ] Refactor API functions to allow multiple frontends (jsonrpsee + varlink), easier testing and authorization * I have to check your design, but the good news is that LLMs are excellent at this type of work > * [ ] API Tests > * [ ] Traffic Tests * Kinda same two questions about these > * [ ] Secure the Webinterface: login rate limit, csrf, cookie http only, ... * LLMs help a lot with those too. Important to find at least one open weights model without too much censorship because some LLMs get touchy with security (like Fable 5). > * [ ] Basic User Roles Admin/Read-only, allow for future custom roles * Should be easy-ish enough to implement the user and (I guess RBAC?) side of it. The ACL side tho... worth checking if there's anything that already does that > * [ ] Add Missing Config Validations (garde + structdb) * I don't know your config format yet. What I had in mind for Andaru was a declarative JSON of sorts, and then the validation would be performed via JSON Schema. The realization of the configuration is a different story. > * [ ] Write nfsense users to passwd for Shell/Serial/SSH * If you want them to also be Linux users, I guess it's understandable; but I have flashbacks of dealing with filesystem permissions whenever I think about combining software users with Linux users > * [ ] User SSH Keys * Should be pretty doable once the ones above are. After all, you only need the public keys, I suppose. > * [ ] System Settings (Hostname, DNS, SSH, NTP) * Should be pretty doable, though I'd imagine it would require the web UI session to be bound to the user; or it always runs as root and relies on its own set of permissions/ACLs for each user to decide whether to invoke a command or not. > * [ ] CLI via varlink with peerauth for basic/initial configuration (interfaces, default rules, password) * Idea (perhaps complimentary): find a way to _always_ start up even if in some form of extremely minimal configuration, e.g. a "factory reset" mode that can still be remotely configured. > * [ ] initial Setup via CLI * Isn't it the same as the one before it? > * [ ] Frontend form validation (via generated json schema from backend?) * I have ideas but nothing too concrete > * [ ] Policy Routing * You mean like Group Policies? e.g. specific groups of users/client addresses/MACs receive specific rules, at specific times, etc.? > * [ ] Multiwan (via vrf's) with balancing and failover * I've never even toyed with this > * [ ] Minimal Dashboard with a few Widgets (Service state, Link state, leases, Update Status, Uptime, Current Time ) * But as an alternative dashboard or as the initial dashboard? > * [ ] User Settings (Theme, animations, Dashboard config) * Should be easily doable, since nothing here touches Linux users anyway > * [ ] Default Service Definitions (SSH, ..., HTTP,...) * What do you mean by that? > * [ ] Group Objects * As in the ones that get used with Group Policies? Or also as objects that are used as groups (e.g. like pfSense aliases, but not just in name) > * [ ] Display Validation Errors Better * Noted > * [ ] Config Backups (always keep a config with a previous config version) * Declarative config fits very well into this model > * [ ] mkosi Image Boot Failure Recovery > * [ ] mkosi Image Reproducibility (debian snapshot + security updates) > * [ ] mkosi Image swtpm fallback > * [ ] mkosi Image, detect certain failure modes and show an error (bad machine-id -> var mounting issues) > * [ ] mkosi Image, dont apply presets on every boot, copy /usr/share/factory/etc instead (skip/readonly etc entierly?) * No idea about any of these > * [ ] Improve Apply Failure detection (service ready), stop unnecessary services (no dhcp -> stop kea) * Declarative config FTW > * [ ] Update signing, Image CI build and Deploy via update Server * Advisable to use LLMs for research, specification and implementation -- figuring out these annoying, often-partially-documented details is where they shine too I will finish touching on them later
Author
Owner

@andrebrait wrote in #4 (comment):

MVP

  • e2e Tests (wip)
* Do you also mean e.g. a setup with different machines serving as WAN and LAN clients so you can check the connectivity end to end and observe the actual results of configuration changes?

First Step is booting the vm and running some tests on it in regards to service state making sure var got mounted and other basic things. Then taking a snapshot and run some config changes and see if service config changes as expected. What you have described is what i mean by "Traffic Tests" where i boot up nfsense with 4 interfaces and simulate traffic through it.

  • Refactor API functions to allow multiple frontends (jsonrpsee + varlink), easier testing and authorization
* I have to check your design, but the good news is that LLMs are excellent at this type of work

I think i already have a draft plan for this.

  • API Tests
  • Traffic Tests
* Kinda same two questions about these

Mentioned above

  • Secure the Webinterface: login rate limit, csrf, cookie http only, ...
* LLMs help a lot with those too. Important to find at least one open weights model without too much censorship because some LLMs get touchy with security (like Fable 5).

I have qwen3.8-27 uncensored running locally, i just need to find the Time.

  • Basic User Roles Admin/Read-only, allow for future custom roles
* Should be easy-ish enough to implement the user and (I guess RBAC?) side of it. The ACL side tho... worth checking if there's anything that already does that

I have a locally stashed change but it lived in jsonrpsee so i want to wait for the API function Refactor and do it there instead.

  • Add Missing Config Validations (garde + structdb)
* I don't know your config format yet. What I had in mind for Andaru was a declarative JSON of sorts, and then the validation would be performed via JSON Schema. The realization of the configuration is a different story.

nfsense already has a declarative JSON config, it is defined through structs in Rust. But because many of the options are relational and need to be verified (a Firewall rule points to an IP Address Object) i have created structdb. It uses rust macros to allow you to define foreign key relations and run validation to check these relationships. Garde is there for object level validation like allowed characters or max number. Unfortunately JSON schema just cant do the cross object validation the way we need it. But we can generate a JSON schema from the Garde definitions for use in the frontend (further down the roadmap).

  • Write nfsense users to passwd for Shell/Serial/SSH
* If you want them to also be Linux users, I guess it's understandable; but I have flashbacks of dealing with filesystem permissions whenever I think about combining software users with Linux users

As an alternative i have thought about just having root and loginuser in the Appliance like a Sophos UTM.

  • User SSH Keys
* Should be pretty doable once the ones above are. After all, you only need the public keys, I suppose.

Yes, should be easy in either case.

  • System Settings (Hostname, DNS, SSH, NTP)
* Should be pretty doable, though I'd imagine it would require the web UI session to be bound to the user; or it always runs as root and relies on its own set of permissions/ACLs for each user to decide whether to invoke a command or not.

The nfsense daemon runs as root and applies its full config. It needs root (or in the future a specially privileged User) to manage everything already. If a User does not have permission to edit these settings via its role it can't (should not be able to) change the nfsense config in the first place.

  • CLI via varlink with peerauth for basic/initial configuration (interfaces, default rules, password)
* Idea (perhaps complimentary): find a way to _always_ start up even if in some form of extremely minimal configuration, e.g. a "factory reset" mode that can still be remotely configured.

nfsense already generates a default config if it cant find one, this could be extended to also include DHCP on the interfaces by default, but if something goes wrong i would rather have it be dead (or reboot to the other version) than accessible by potentially the entire internet with its default password.

  • initial Setup via CLI
* Isn't it the same as the one before it?

This would a subcommand for the CLI to be more like a guided setup where it lists the interfaces, offers to enable DHCP and just gives options like in opnsense.

  • Frontend form validation (via generated json schema from backend?)
* I have ideas but nothing too concrete

Mentioned above

  • Policy Routing
* You mean like Group Policies? e.g. specific groups of users/client addresses/MACs receive specific rules, at specific times, etc.?

No, I mean Policy Routing where you have Rule similar to a Firewall Rule but which override Static Routing Decisions instead of blocking traffic https://en.wikipedia.org/wiki/Policy-based_routing

  • Multiwan (via vrf's) with balancing and failover
* I've never even toyed with this

I wrote a setup manually using iptables years ago, it was a pain but worked. The pfsense/opnsense implementations have some routing limitations so i want to use proper vrf's like other Paid Firewalls do.

  • Minimal Dashboard with a few Widgets (Service state, Link state, leases, Update Status, Uptime, Current Time )
* But as an alternative dashboard or as the initial dashboard?

Currently the dashboard just looks like this:
image

I together with @adroslice have a rough plan for a user configurable Widget System. The listed Widgets are just the ones which we should have of the top of my head. Which ones should be in the default layout is up for debate.

  • User Settings (Theme, animations, Dashboard config)
* Should be easily doable, since nothing here touches Linux users anyway

yea, just needs its own config section, but requires considerations like if users should be able to edit settings of other users and if dashboards should be user specific, shared or both.

  • Default Service Definitions (SSH, ..., HTTP,...)
* What do you mean by that?

Firewall Service Mappings for matching Ports or Protocols:
image

Basically the contents of the linux distro /etc/services file but only include important ones in our default config so that Users don't need to recreate all the basic definitions.

  • Group Objects
* As in the ones that get used with Group Policies? Or also as objects that are used as groups (e.g. like pfSense aliases, but not just in name)

I mean Groups of Address or Service Objects, they exist but everything that uses these objects for apply ignore or crash it if the type is Group currently:
image

  • Display Validation Errors Better
* Noted

Current state:
image

  • Config Backups (always keep a config with a previous config version)
* Declarative config fits very well into this model

The config already has a config version and a migration mechanism, this is mainly for when you have a older fallback version installed which might get booted if something goes wrong with the new one but it cant read the newer config version.

  • mkosi Image Boot Failure Recovery
  • mkosi Image Reproducibility (debian snapshot + security updates)
  • mkosi Image swtpm fallback
  • mkosi Image, detect certain failure modes and show an error (bad machine-id -> var mounting issues)
  • mkosi Image, dont apply presets on every boot, copy /usr/share/factory/etc instead (skip/readonly etc entierly?)
  • No idea about any of these
    The Appliance image which is made using mkosi still has some rough edges which need resolving before people run into them.
  • Improve Apply Failure detection (service ready), stop unnecessary services (no dhcp -> stop kea)
* Declarative config FTW

I am not sure what that has to to with Failure detection? Currently the backend just restarts a service using systemd after writing the config but it does not wait for the Service to become fully ready since detecting that is different for every service.

  • Update signing, Image CI build and Deploy via update Server
* Advisable to use LLMs for research, specification and implementation -- figuring out these annoying, often-partially-documented details is where they shine too

I already have gotten a bunch of Nitro and Yubi keys for secure storage, this is more about setting up pipelines for dev and prod releases with different keys uploading them and ensuring that malicious actors cannot gain persistence in the pipeline or exfiltrate the signing keys even if the pipeline is compromised. I would not trust only AI with such security critical research.

@andrebrait wrote in https://git.soontm.de/speatzle/nfsense/issues/4#issuecomment-17: > > # MVP > > > > * [ ] e2e Tests (wip) > > * Do you also mean e.g. a setup with different machines serving as WAN and LAN clients so you can check the connectivity end to end and observe the actual results of configuration changes? First Step is booting the vm and running some tests on it in regards to service state making sure var got mounted and other basic things. Then taking a snapshot and run some config changes and see if service config changes as expected. What you have described is what i mean by "Traffic Tests" where i boot up nfsense with 4 interfaces and simulate traffic through it. > > * [ ] Refactor API functions to allow multiple frontends (jsonrpsee + varlink), easier testing and authorization > > * I have to check your design, but the good news is that LLMs are excellent at this type of work I think i already have a draft plan for this. > > * [ ] API Tests > > * [ ] Traffic Tests > > * Kinda same two questions about these Mentioned above > > > * [ ] Secure the Webinterface: login rate limit, csrf, cookie http only, ... > > * LLMs help a lot with those too. Important to find at least one open weights model without too much censorship because some LLMs get touchy with security (like Fable 5). I have qwen3.8-27 uncensored running locally, i just need to find the Time. > > > * [ ] Basic User Roles Admin/Read-only, allow for future custom roles > > * Should be easy-ish enough to implement the user and (I guess RBAC?) side of it. The ACL side tho... worth checking if there's anything that already does that I have a locally stashed change but it lived in jsonrpsee so i want to wait for the API function Refactor and do it there instead. > > > * [ ] Add Missing Config Validations (garde + structdb) > > * I don't know your config format yet. What I had in mind for Andaru was a declarative JSON of sorts, and then the validation would be performed via JSON Schema. The realization of the configuration is a different story. nfsense already has a declarative JSON config, it is defined through structs in Rust. But because many of the options are relational and need to be verified (a Firewall rule points to an IP Address Object) i have created structdb. It uses rust macros to allow you to define foreign key relations and run validation to check these relationships. Garde is there for object level validation like allowed characters or max number. Unfortunately JSON schema just cant do the cross object validation the way we need it. But we can generate a JSON schema from the Garde definitions for use in the frontend (further down the roadmap). > > > * [ ] Write nfsense users to passwd for Shell/Serial/SSH > > * If you want them to also be Linux users, I guess it's understandable; but I have flashbacks of dealing with filesystem permissions whenever I think about combining software users with Linux users As an alternative i have thought about just having root and loginuser in the Appliance like a Sophos UTM. > > * [ ] User SSH Keys > > * Should be pretty doable once the ones above are. After all, you only need the public keys, I suppose. Yes, should be easy in either case. > > * [ ] System Settings (Hostname, DNS, SSH, NTP) > > * Should be pretty doable, though I'd imagine it would require the web UI session to be bound to the user; or it always runs as root and relies on its own set of permissions/ACLs for each user to decide whether to invoke a command or not. The nfsense daemon runs as root and applies its full config. It needs root (or in the future a specially privileged User) to manage everything already. If a User does not have permission to edit these settings via its role it can't (should not be able to) change the nfsense config in the first place. > > > * [ ] CLI via varlink with peerauth for basic/initial configuration (interfaces, default rules, password) > > * Idea (perhaps complimentary): find a way to _always_ start up even if in some form of extremely minimal configuration, e.g. a "factory reset" mode that can still be remotely configured. nfsense already generates a default config if it cant find one, this could be extended to also include DHCP on the interfaces by default, but if something goes wrong i would rather have it be dead (or reboot to the other version) than accessible by potentially the entire internet with its default password. > > > * [ ] initial Setup via CLI > > * Isn't it the same as the one before it? This would a subcommand for the CLI to be more like a guided setup where it lists the interfaces, offers to enable DHCP and just gives options like in opnsense. > > * [ ] Frontend form validation (via generated json schema from backend?) > > * I have ideas but nothing too concrete Mentioned above > > * [ ] Policy Routing > > * You mean like Group Policies? e.g. specific groups of users/client addresses/MACs receive specific rules, at specific times, etc.? No, I mean Policy Routing where you have Rule similar to a Firewall Rule but which override Static Routing Decisions instead of blocking traffic https://en.wikipedia.org/wiki/Policy-based_routing > > > * [ ] Multiwan (via vrf's) with balancing and failover > > * I've never even toyed with this I wrote a setup manually using iptables years ago, it was a pain but worked. The pfsense/opnsense implementations have some routing limitations so i want to use proper vrf's like other Paid Firewalls do. > > * [ ] Minimal Dashboard with a few Widgets (Service state, Link state, leases, Update Status, Uptime, Current Time ) > > * But as an alternative dashboard or as the initial dashboard? Currently the dashboard just looks like this: ![image](/attachments/ba702f0b-8895-450b-91c2-8a204688ad31) I together with @adroslice have a rough plan for a user configurable Widget System. The listed Widgets are just the ones which we should have of the top of my head. Which ones should be in the default layout is up for debate. > > > * [ ] User Settings (Theme, animations, Dashboard config) > > * Should be easily doable, since nothing here touches Linux users anyway yea, just needs its own config section, but requires considerations like if users should be able to edit settings of other users and if dashboards should be user specific, shared or both. > > * [ ] Default Service Definitions (SSH, ..., HTTP,...) > > * What do you mean by that? Firewall Service Mappings for matching Ports or Protocols: ![image](/attachments/be891f21-79b3-4464-9de8-36ce3df35bcb) Basically the contents of the linux distro /etc/services file but only include important ones in our default config so that Users don't need to recreate all the basic definitions. > > * [ ] Group Objects > > * As in the ones that get used with Group Policies? Or also as objects that are used as groups (e.g. like pfSense aliases, but not just in name) I mean Groups of Address or Service Objects, they exist but everything that uses these objects for apply ignore or crash it if the type is Group currently: ![image](/attachments/693ed226-a076-4afb-aa87-5610fe032054) > > * [ ] Display Validation Errors Better > > * Noted Current state: ![image](/attachments/8a0fe777-c61c-4efd-922f-4480bff407d8) > > * [ ] Config Backups (always keep a config with a previous config version) > > * Declarative config fits very well into this model The config already has a config version and a migration mechanism, this is mainly for when you have a older fallback version installed which might get booted if something goes wrong with the new one but it cant read the newer config version. > > * [ ] mkosi Image Boot Failure Recovery > > * [ ] mkosi Image Reproducibility (debian snapshot + security updates) > > * [ ] mkosi Image swtpm fallback > > * [ ] mkosi Image, detect certain failure modes and show an error (bad machine-id -> var mounting issues) > > * [ ] mkosi Image, dont apply presets on every boot, copy /usr/share/factory/etc instead (skip/readonly etc entierly?) > * No idea about any of these The Appliance image which is made using mkosi still has some rough edges which need resolving before people run into them. > > * [ ] Improve Apply Failure detection (service ready), stop unnecessary services (no dhcp -> stop kea) > > * Declarative config FTW I am not sure what that has to to with Failure detection? Currently the backend just restarts a service using systemd after writing the config but it does not wait for the Service to become fully ready since detecting that is different for every service. > > * [ ] Update signing, Image CI build and Deploy via update Server > > * Advisable to use LLMs for research, specification and implementation -- figuring out these annoying, often-partially-documented details is where they shine too I already have gotten a bunch of Nitro and Yubi keys for secure storage, this is more about setting up pipelines for dev and prod releases with different keys uploading them and ensuring that malicious actors cannot gain persistence in the pipeline or exfiltrate the signing keys even if the pipeline is compromised. I would not trust only AI with such security critical research.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
speatzle/nfsense#4
No description provided.