Strict validation & compiler
Validate the complete YAML schema offline and compile deterministic policy without network, filesystem or kernel access.
No mandatory control plane. No separate firewall appliance. No need to route your traffic through someone else’s cloud.
>_Early runtime. Not production-ready yet.Follow the implementation plan →
| 01 | version: 1 |
| 02 | |
| 03 | metrics: |
| 04 | listen: 127.0.0.1:2112 |
| 05 | |
| 06 | firewall: |
| 07 | backend: nftables # required: nftables or iptables |
| 08 | deny_action: drop # drop or reject |
| 09 | |
| 10 | global: |
| 11 | allowlist: |
| 12 | - 198.51.100.24/32 |
| 13 | |
| 14 | groups: |
| 15 | our_hq: [CZ, SK] |
| 16 | |
| 17 | policies: |
| 18 | - name: ssh-admins |
| 19 | priority: 10 |
| 20 | direction: ingress |
| 21 | mode: allowlist |
| 22 | traffic: ["22"] |
| 23 | include: |
| 24 | groups: [our_hq] |
| 25 | |
| 26 | - name: web-blocks |
| 27 | priority: 20 |
| 28 | direction: ingress |
| 29 | mode: blocklist |
| 30 | traffic: ["80", "443", "443/udp"] |
| 31 | include: |
| 32 | countries: [KP, IR, RU] |
| 33 | |
| 34 | crowdsec: |
| 35 | enabled: true |
| 36 | lapi_url: https://crowdsec.internal:8080 |
| 37 | api_key_file: /etc/perimeterd/credentials.d/crowdsec_api_key |
Allow SSH only from the locations you choose.
Keep your web public while blocking traffic that does not belong there.
Combine static policy with CrowdSec decisions for dynamic ingress bans.
Expose Prometheus metrics for dropped packets, policy activity, and daemon health.
perimeterd turns your policy into native nftables or iptables/ipset rules, with durable revisions that keep protection consistent across reloads, restarts, and backend changes.
Implemented source-build capabilities, remaining runtime gates, and the delivery work required for the first production release.
Validate the complete YAML schema offline and compile deterministic policy without network, filesystem or kernel access.
Resolve RIPEstat-backed selectors, built-in regions and custom country groups from durable snapshots.
Filter new inbound and outbound flows by protocol, port, selector and policy priority.
Apply global allowlists and blocklists before CrowdSec and geographic policy.
Enforce equivalent policy through either native backend, including migration between them.
Synchronize ingress decisions into renewable kernel leases on either backend.
Stage complete generations, preserve committed policy and recover journaled changes after restart.
Expose enforcement, CrowdSec and snapshot gauges while retaining backend-owned packet and denial counters.
Verify DOCKER-USER attachment order and preservation of Docker-managed firewall state.
Collect and export processed and denied packet totals from native backend counters.
Ship tested systemd, tmpfiles, RPM and DEB install, upgrade, restart and removal lifecycles.
Complete native runtime and release verification across both target architectures.
Gate and publish verifiable artifacts after compatibility, recovery and packaging checks pass.
perimeterd validates the complete configuration, resolves required selectors into one immutable snapshot, compiles backend-neutral policy, and commits it through a single serialized writer.
perimeterd writes owned nftables or iptables/ipset state directly on the host. Application traffic never passes through the daemon.
Configuration, source data, runtime resources and backend preflight are complete before a revision can commit.
Static policy, source refreshes and CrowdSec decisions share one ordered mutation path.
Checksummed revisions, journals and active records make enforcement recoverable across restarts.
perimeterd records and changes only its own firewall targets while preserving unrelated host state.
Host-level protection for one server or an entire Linux fleet.
Add geographic, ASN, CrowdSec, and direct address policy without replacing the firewall that already permits your services.
Limit SSH and other management services to the networks, locations, or reusable groups you trust.
Apply ingress policy at the Linux firewall before unwanted new flows reach the services behind the host.
Restrict where services may connect using country, group, RIR, ASN, or direct IP/CIDR policy.
perimeterd is MIT-licensed. Inspect it, fork it, automate it, and build the daemon for your own Linux infrastructure. The open-source runtime does not require a commercial control plane.
perimeterd is part of the Distro Ops open-source and commercial ecosystem. Partners help fund long-term development while the projects remain freely available under their open-source licenses.
Managing perimeterd across more than one host? The planned Control Plane will centralize policy, inventory, revisions, and staged rollouts while every daemon continues enforcing locally.
It will build on perimeterd’s durable revisions and health signals without putting application traffic in the control path.
We’re designing the Control Plane now. If you manage Linux infrastructure at scale and want to influence the roadmap, let’s talk.
No. Configuration, policy compilation, firewall enforcement, state and metrics stay on the Linux host. Country and ASN selectors refresh from the public RIPEstat API and cache committed snapshots locally. CrowdSec is optional and uses the LAPI you configure.
Both nftables and iptables/ipset are implemented. They share the same policy compiler, durable revision model, CrowdSec leases, native accounting and backend-migration contract. Docker-specific coexistence verification remains a V1 release gate.
Policies support direct IP and CIDR overrides, countries, ASNs, RIR service regions, built-in regions and custom country groups. You can combine allowlist or blocklist mode with priority, ingress or egress direction, IPv4 or IPv6, protocol and ports.
No. perimeterd changes only its owned tables, chains, sets, counters and tagged attachment jumps. Unmatched or allowed traffic returns to the surrounding firewall, which remains responsible for permitting services and ports.
Yes. The optional CrowdSec integration synchronizes authoritative ingress decisions to either backend. Bans are installed as finite, renewable kernel leases rather than permanent firewall rules.
RIPEstat country data reflects address allocation or registration, not a device’s physical location. VPNs, hosting networks, mobile carriers, address transfers and routing changes can make policy results differ from a user’s actual location.
Not yet. The core source-build runtime is implemented, including both backends, source-backed policy, CrowdSec and durable recovery. Docker verification, full metrics export, installed services and packages, amd64 and arm64 release coverage, and signed releases remain V1 gates.
No. perimeterd filters new network flows at the Linux firewall layer using remote addresses, protocols and ports. It does not inspect HTTP, TLS or application payloads, and can operate alongside a WAF.