Security

A tool that can change every firewall should be hard to misuse

FireSight holds API access to your FortiManagers and FortiGates. Here is how it protects those credentials, who can do what, and how every action is recorded.

Secrets

Encrypted at rest

FortiManager and FortiGate API tokens, the LDAP service password and the OIDC client secret are encrypted with FIRESIGHT_SECRET_KEY. API tokens are never shown again after they're saved.

Or kept out of the database

Tokens can instead be read from an FMG_* environment variable. Changing a connection's address requires re-entering its token.

Backups and snapshots

FortiGate configuration backups and uploaded offline snapshots are encrypted the same way. Downloading a backup is admin-only and audited. Backup passwords are used only to open the file, never stored or logged.

Sessions and hardening

  • Sessions are bearer tokens kept in sessionStorage, so they end when the browser tab closes.
  • A password change, a disable or Sign out everywhere revokes every session.
  • With FIRESIGHT_ENVIRONMENT=prod (the default), the server refuses to start with the built-in development secrets.
  • Responses carry strict security headers and a Content-Security-Policy.
  • X-Forwarded-For is only trusted from FIRESIGHT_TRUSTED_PROXIES.
  • FireSight accounts use bcrypt, a password policy and lockout; session length and password length are set by admins.
  • On FortiManager and FortiGate, FireSight uses a dedicated REST API admin whose trusted hosts you restrict to the FireSight server.

Sign-in

Sign-in methods
MethodHow it works
FireSight accountsUsername and password stored in FireSight (bcrypt, password policy, lockout)
LDAP / Active DirectoryService-account bind, user search, then a bind as the user. ldaps:// or StartTLS is required. Nested AD groups are optional
OpenID ConnectAuthorization code flow with PKCE, state and nonce. ID tokens are verified against the provider's published keys. Works with Entra ID, Okta, Google, Keycloak and others
SAML 2.0SP-initiated. Signed assertions are verified against the IdP certificate, with checks against signature wrapping, replay, audience, recipient and time. Encrypted assertions aren't supported yet
  • Roles come from directory groups, mapped in Settings, and are re-read at every sign-in. People in no mapped group are refused unless a default role is set.
  • Administrator can only be granted by an explicit group mapping.
  • A directory account can never take over an existing FireSight account with the same username.
  • FireSight accounts can be switched off for everyone except administrators, which keeps a break-glass way in.
  • Single sign-on hands the browser back with a one-time code (single use, 60 seconds); the session token never appears in a URL.

Roles

Access levels
RoleCan
Everyone signed inView requests, packages, findings, regions, IP addressing
RequesterCreate, edit, submit and cancel their rule requests
Team lead, Security, Change boardApprove or reject the stage that needs their role (or names them)
ImplementerDeploy and back out, sync connections, manage regions and IP allocations, run audits
AuditorRead and export the audit log, run audits; cannot change anything
AdministratorAll of the above, plus the Settings area: connections, sign-in methods, users and roles, approval chains, policies and schedules, server status

Separation of duties

Requesters can't approve their own rules

And they can't choose, change or avoid the approval chains their request goes to. Only administrators set up approval.

One person, one stage

Nobody can approve two stages of the same chain. Optionally, the same person can't approve in more than one chain either.

Approvers don't deploy

Anyone who approved or reviewed a rule can't deploy it. Emergency reviewers must be different people from the emergency approvers and the deployer.

Rejections stick

A rejected request must be changed before it can be resubmitted. Requests already submitted always keep the approvers they started with.

Admins can relax the first three rules in Settings, for example in a small team. Changes to settings are written to the audit log.

Audit log

An append-only record with the person and source IP for every:

  • sign-in and failed sign-in;
  • approval decision, push, back-out and expiry;
  • sync, backup download and IP allocation;
  • setting change, and offline snapshot load, replace and delete.

Scheduled work is recorded as firesight-system. The log can be filtered and exported as CSV, and auditors can read it without being able to change anything.

Audit log with entries for sign-in, rule creation, confirmed firewalls and submission, showing who, source IP and the details recorded, such as the approval tracks and why each applies.

Simulate mode

FIRESIGHT_DEPLOY_MODE=simulate is the default. FireSight records deployment plans without writing anything to your firewalls.

Run the full flow, from request to placement, approval and deployment, against your real rule base, and read exactly what FireSight would have done. Set live once you've tested against a lab FortiManager or FortiGate.

# default: plan and record, write nothing
FIRESIGHT_DEPLOY_MODE=simulate

# after testing against a lab FortiManager or FortiGate
FIRESIGHT_DEPLOY_MODE=live

Questions from your security team?

Ask us about deployment, credentials, sign-in or the audit trail. We'll answer from how FireSight works today, including what it doesn't do yet.