Skip to main content

pfSentinel

CI GitHub Release License Python Views

Automated backup and monitoring tool for pfSense firewalls. Built for homelabs.

pfSentinel connects to your pfSense devices over SSH or HTTPS and backs up configuration files, RRD data, package configs, DHCP leases, certificates, logs, ZFS snapshots, and full filesystem archives. It includes change detection, compression, scheduled backups, and notifications via Telegram, Slack, or Windows toast.

A Word From the Developer

I was looking for a feature-rich, modern pfSense backup tool and only found projects that were no longer maintained. Since pfSense backups are part of my own homelab backup infrastructure, I decided to build pfSentinel and share it with the pfSense community.

If you have a request or an idea, I'd love to hear it, please open a feature request. You can also reach me on LinkedIn or through my website.

Features

  • Full config backup via SSH (SFTP) or HTTPS with CSRF-aware login
  • Extended backup targets -- RRD graphs, package configs, DHCP leases, alias files, certificates, system logs
  • ZFS snapshots with incremental send (pfSense 2.5+)
  • Filesystem archives (tar.gz) as a non-ZFS fallback
  • Change detection -- only saves when config sections actually change
  • SHA-256 verification for every backup file
  • Scheduled backups via Windows Task Scheduler, systemd user timers or cron
  • Notifications -- Telegram, Slack, Windows toast
  • SSH key authentication -- no password required
  • Strict SSH host key checking -- confirm the pfSense key once (pfs device trust-key); a changed key is refused
  • Credential security -- passwords in the OS keyring (or an AES-256-GCM encrypted store on headless systems), never in config files
  • Self-update -- check for and install new releases from GitHub
  • Cross-platform -- Windows and Linux (macOS best effort)
  • Reproducible CI -- lint, tests, security audit and build defined with Dagger, so the same pipeline runs on your machine and in GitHub Actions; hash-verified lockfiles and SHA-pinned Actions

Quick Start

Download a pre-built binary (no Python required):

Windows (pfs.exe) | Linux (pfs)

Or install from PyPI (Python 3.13+), same command on Linux and Windows:

pipx install pfsentinel

Plain pip install pfsentinel also works in a virtualenv or on Windows; on Ubuntu 23.04+ and Debian 12+ the system Python blocks it, so use pipx there.

Then:

pfs setup          # guided first-time wizard
pfs device add     # add your pfSense device
pfs backup run     # run your first backup

See the Installation Guide for all installation methods.

Documentation

Document Description
Online manual Every command, recipes, and a copy-paste version for AI assistants (pfs docs)
Installation Guide pip, pre-built binary, and from-source installation
Usage Guide CLI reference, configuration, scheduling, notifications
Extended Backups RRD, packages, DHCP, certs, logs, ZFS, archives
Security Policy Vulnerability reporting, design decisions, credential storage
Contributing Development setup, code style, pull requests
CI with Dagger Run the CI pipeline locally
Roadmap Path to 1.0 and what is planned
Changelog Version history

What Gets Backed Up

Target Method Description
XML Config SSH / HTTPS Full pfSense configuration (config.xml)
RRD Data SSH Traffic and performance graphs
Package Configs SSH Installed package settings
DHCP Leases SSH Active DHCP lease table
Alias Files SSH URL tables and external alias files
Certificates SSH SSL/TLS certs from the filesystem
System Logs SSH Filter log, system log, custom log files
ZFS Snapshot SSH Full or incremental ZFS snapshot stream
Filesystem Archive SSH Tar archive of critical directories

Third-Party Credits

pfSentinel is built on these open-source libraries:

Library License Purpose
Typer MIT CLI framework
Rich MIT Terminal formatting
Pydantic MIT Data validation
Paramiko LGPL-2.1 SSH/SFTP connections
cryptography Apache-2.0 / BSD-3-Clause SSH key handling
Requests Apache-2.0 HTTP client
Packaging Apache-2.0 / BSD-2-Clause Version parsing

Paramiko is the only runtime dependency with a copyleft license (LGPL-2.1). When installed via pip, users can freely replace it. For binary releases, pfSentinel uses --onedir bundling so Paramiko remains replaceable. See docs/LICENSE_AUDIT.md for the full dependency license audit.

Contributing

Contributions are welcome! Please read the Contributing Guide before submitting a pull request.

If you find a bug or have a feature request, open an issue.

Support

pfSentinel is free and open source. If it saves you time or you'd like to support continued development, you can sponsor on GitHub or buy me a coffee. Thank you!

License

Apache 2.0

Metadata

Release files for pfsentinel 0.2.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pfsentinel 0.2.4
File Size Uploaded Provenance Actions
pfsentinel-0.2.4.tar.gz 353.5 kB With provenance Details for pfsentinel-0.2.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pfsentinel 0.2.4
File Interpreter ABI Platform Actions
pfsentinel-0.2.4-py3-none-any.whl Python 3 none any Details for pfsentinel-0.2.4-py3-none-any.whl

Total release size: 459.7 kB

Release files / pfsentinel-0.2.4.tar.gz

Download URL pfsentinel-0.2.4.tar.gz
Size 353.5 kB
Tags Source
SHA-256 checksum
How to use checksums
eafc5209edff5800b1fb5a5b3eeae60f795a87b39de17364f42176187061ebda
BLAKE2b-256 checksum
How to use checksums
8cce95fa2638cdd044571e5033a8f398195381131b8e90361c10785682aa6446
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.

Transparency log

Release files / pfsentinel-0.2.4-py3-none-any.whl

Download URL pfsentinel-0.2.4-py3-none-any.whl
Size 106.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b39f3edee54d12b06f0adfd3c4cbe4ba740311e8ebd607d7987bc938ce94c84c
BLAKE2b-256 checksum
How to use checksums
3531b9e04b5bf2e62c643669c80d19c492cc7113e16fd6a670d2493889097209
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.

Transparency log

Security for pfsentinel 0.2.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pfsentinel-0.2.4.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 7, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page