PHPackages                             kanopi/firewall - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. kanopi/firewall

ActiveLibrary[Security](/categories/security)

kanopi/firewall
===============

Evaluate the requests for malicious items.

v2.7.0(3mo ago)22.9k↓39.1%[15 issues](https://github.com/kanopi/firewall/issues)MITPHPPHP &gt;=8.1

Since May 6Pushed 3mo ago6 watchersCompare

[ Source](https://github.com/kanopi/firewall)[ Packagist](https://packagist.org/packages/kanopi/firewall)[ RSS](/packages/kanopi-firewall/feed)WikiDiscussions 2.x Synced 1mo ago

READMEChangelog (10)Dependencies (20)Versions (17)Used By (0)

Simple Firewall
===============

[](#simple-firewall)

**Simple Firewall** is a powerful, extensible request-evaluation library for PHP-based systems. It provides comprehensive protection by analyzing HTTP requests and applying configurable rules to either allow or block access based on IP addresses, geolocation, user agents, URLs, ASN (Autonomous System Numbers), and rate limits. The library is designed to work seamlessly with popular frameworks like Drupal, WordPress, Symfony, or any standalone PHP application.

Table of Contents
-----------------

[](#table-of-contents)

- [Features](#features)
- [Requirements](#requirements)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Configuration Overview](#configuration-overview)
- [Configuration Loading &amp; Includes](#configuration-loading--includes)
- [Environment Variables in YAML](#environment-variables-in-yaml)
- [Global Configuration](#global-configuration)
    - [Multiple Offenses Defense](#multiple-offenses-defense)
- [Storage Configuration](#storage-configuration)
- [Plugin Architecture](#plugin-architecture)
- [Available Plugins](#available-plugins)
    - [IP Address Plugin](#ip-address-plugin)
    - [GeoLocation Plugin](#geolocation-plugin)
    - [URL Plugin](#url-plugin)
    - [User Agent Plugin](#user-agent-plugin)
    - [ASN Plugin](#asn-plugin)
    - [Rate Limit Plugin](#rate-limit-plugin)
    - [Vulnerability Score Plugin](#vulnerability-score-plugin)
- [Conditional Logic](#conditional-logic)
- [Logging Configuration](#logging-configuration)
- [Dynamic Configuration Overrides](#dynamic-configuration-overrides)
- [Platform Integration](#platform-integration)
- [Advanced Examples](#advanced-examples)
- [Testing](#testing)
- [Contributing](#contributing)

Features
--------

[](#features)

- **Flexible Plugin System**: Modular architecture allows for easy extension and customization
- **Multiple Storage Backends**: Support for in-memory, file-based, database, and Redis storage
- **Comprehensive Request Analysis**: Evaluate requests based on IP, location, user agent, URL patterns, and more
- **Vulnerability Scoring**: Advanced risk assessment based on multiple factors with configurable thresholds
- **Rate Limiting**: Built-in rate limiting with configurable storage backends
- **GeoIP Integration**: Full support for MaxMind GeoIP2 databases (both local and web service)
- **Advanced Conditional Logic**: Support for simple, complex, and grouped conditional rules
- **Remote Configuration Support**: Load configuration files from remote URLs with local caching
- **PSR-3 Compatible Logging**: Integration with Monolog for flexible logging
- **Framework Agnostic**: Works with any PHP application or framework

Requirements
------------

[](#requirements)

- PHP 8.1 or higher
- Composer
- Optional: MaxMind GeoIP2 databases for geolocation features
- Optional: Redis for distributed rate limiting

Installation
------------

[](#installation)

Install via Composer:

```
composer require kanopi/firewall
```

Quick Start
-----------

[](#quick-start)

### Basic Implementation

[](#basic-implementation)

Place the following code in your application's entry point (e.g., `index.php`, `wp-config.php`, or Drupal's `settings.php`):

```
