Skip to content

How-to Guides

You know what you want; these are the steps. Each page starts from a goal and ends with it done.

If you are still deciding what you want, start with Getting Started. If you want to know what a setting does, that is Configuration and Plugins.

Start with the Recipes if you know what you want but not which feature does it — "block a country", "stop a login flood", "let Googlebot in safely".

  • Recipes


    Keyed on intent rather than on feature. Each one is a working configuration and a link to the reference behind it.

    Recipes

  • Integrate With Your Platform


    Wire the firewall into Drupal, WordPress, Laravel or a plain front controller, in the right place in the bootstrap.

    Platform integration

  • Host Recipes


    What a host has to answer before the firewall behaves — what is in front of it, where it can write, where logs go — and how to get those answers out of your own environment.

    Host recipes

  • Migrating From Another Firewall


    Wordfence, ModSecurity or Cloudflare rules expressed here — and, first, an honest list of what does not move.

    Migrating

  • Add a Challenge


    Make suspicious traffic prove it is human instead of refusing it outright — configured, pointed at a rule, and checked before it enforces.

    Add a challenge

  • Add a Rule Source


    Point a rule at a list that lives somewhere else — a file, a URL, a feed someone else publishes — in whatever shape it already has.

    Add a rule source

  • Send Logs Somewhere


    A file, a rotating file, a queryable table, or a Slack channel that only speaks up when something is actually broken.

    Send logs somewhere

  • Troubleshooting


    Organised by the sentence you would actually type — "my allow rule isn't working", "I locked myself out", "the challenge loops forever" — with the one command that confirms each.

    Troubleshooting

  • Check a Request


    Ask whether a given request would be blocked, and by which rule, from a terminal — without banning the address you are asking about.

    Checking a request

  • Custom Plugins


    Implement PluginInterface to evaluate requests against your own logic.

    Custom plugins

  • Custom Storage


    Persist blocks and rate-limit counters anywhere — Memcached, DynamoDB, your app's ORM.

    Custom storage

  • Advanced Examples


    A full multi-layered production configuration, annotated.

    Advanced examples

  • Syncing Rule Sources


    Refresh remote rule lists at deploy time and on a cron, then take the request path offline so a visitor never waits on somebody else's server.

    Syncing rule sources

  • Schema Migrations


    Add the columns and indexes an existing database table is missing, without dropping it. Only ever additive, so no run can lose a row.

    Schema migrations

  • Diagnosing an Installation


    Run against the real environment and find out what is wrong with it: rules that are not running, stores that cannot be reached, a stale GeoIP database.

    Diagnosing an installation

  • Managing Rules


    Add, remove and disable rules from the command line, without opening a YAML file and without losing the comments in it.

    Managing rules

  • Reacting to Decisions


    Have the firewall tell your application what it decided about each request, over PSR-14 — for metrics, notifications or an audit trail, without parsing logs.

    Reacting to decisions

  • GeoIP Setup


    Obtain, install, and refresh the MaxMind GeoLite2 databases the GeoLocation and ASN plugins need.

    GeoIP setup