Skip to main content

A Django app that implements IP-based blocklisting.

Project description

Django-blocklist

This is a Django app that implements IP-based blocklisting. Its BlocklistMiddleware performs the blocking, and its clean_blocklist management command deletes entries which have satisfied the cooldown period. Entries also have a reason field, used in reporting. There are utility functions to add/remove IPs, an admin, and several management commands.

This app is primarily for situations where server-level blocking is not available, e.g. on platform-as-a-service hosts like PythonAnywhere or Heroku. Being an application-layer solution, it's not as performant as blocking via firewall or web server process, but is suitable for moderate traffic sites. It also offers better integration with the application stack, for easier management.

Quick start

  1. The PyPI package name is django-blocklist; add that to your requirements.txt or otherwise install it into your project's Python environment.

  2. Add "django_blocklist" to settings.INSTALLED_APPS

  3. Add "django_blocklist.middleware.BlocklistMiddleware" to settings.MIDDLEWARE

  4. Run python manage.py migrate to create the django_blocklist_blockedip table.

  5. Add IPs to the list (via management commands, utils.update_blocklist, or the admin).

  6. Set up a cron job or equivalent to run manage.py clean_blocklist daily.

Management commands

Django-blocklist includes several management commands:

  • clean_blocklist — remove entries that have fulfilled their cooldown period
  • import_blocklist — convenience command for importing IPs from a file
  • remove_from_blocklist — remove one or more IPs
  • report_blocklist — information on the current entries
  • search_blocklist — look for an IP in the list; in addition to info on stdout, returns an exit code of 0 if successful
  • update_blocklist — add/update IPs; --reason and --cooldown optional; use --skip-existing to avoid updating existing records

The --help for each of these details its available options.

For exporting or importing BlockedIP entries, use Django's built-in dumpdata and loaddata management commands.

Configuration

You can customize the following settings via a BLOCKLIST_CONFIG dict in your project settings:

  • cooldown — Days to expire, for new entries; default 7
  • cache-ttl — Seconds to cache the list of blocked IPs; default 60
  • denial-template — For the denial response; an f-string with {ip} and {cooldown} placeholders

Reporting

The report_blocklist command gives summary information about the current collection of IPs, including how many requests from those IPs have been blocked. See the sample report for more.

Utility methods

The utils module defines two convenience functions for updating the list from your application code:

  • update_blocklist(ips: set, reason: str, cooldown: int, last_seen: datetime) adds IPs to the blocklist (all args except set are optional)
  • remove_from_blocklist(ip: str) removes an entry, returning True if successful

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_blocklist-2.9.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

django_blocklist-2.9-py3-none-any.whl (22.9 kB view details)

Uploaded Python 3

File details

Details for the file django_blocklist-2.9.tar.gz.

File metadata

  • Download URL: django_blocklist-2.9.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.10 Darwin/24.3.0

File hashes

Hashes for django_blocklist-2.9.tar.gz
Algorithm Hash digest
SHA256 204e19e55725b40b38e3b5380cfcb473085898c6cf1cdbfb0a9daa44e7b6c756
MD5 6639d5bd9026f6f3c55043f364dc6d98
BLAKE2b-256 e2d46bd869d0e0f9afa653000e94b91d7776c7cdb3359d4d589d5172f2c7b50f

See more details on using hashes here.

File details

Details for the file django_blocklist-2.9-py3-none-any.whl.

File metadata

  • Download URL: django_blocklist-2.9-py3-none-any.whl
  • Upload date:
  • Size: 22.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.10 Darwin/24.3.0

File hashes

Hashes for django_blocklist-2.9-py3-none-any.whl
Algorithm Hash digest
SHA256 7851fc6a1c8bac2f3e05fbbfb632305621a184e6085d4cee8b6d7c326e8862e6
MD5 39bc63fb008080b0dd835ef937ab0adb
BLAKE2b-256 d1056bba4a620ea65d4d9cb99c669374f7995bb62db66d528b3d22a87aa30beb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page