Commit Graph
45 Commits
Author SHA1 Message Date
zwitschi 4960eef312 feat(firewall): persist firewall snapshots to SQLite (F001/D007)
save_state_report now also writes the address-list + firewall-rule snapshot into
the app.db firewall_snapshots tables, making the audit trail independent of git.
Removes the 'git-visible data/mikrotik' framing.
2026-10-24 19:50:43 +02:00
zwitschi aef132fe94 feat(db): add 'python -m app.db' CLI for migrations
D006: idempotent --migrate, --info (schema version + row counts), and --path.
Used by deploy.sh to bring the DB up to date after a git pull without the web
server running.
2026-10-24 19:50:41 +02:00
zwitschi 7f392ef908 chore(data): stop tracking runtime-refreshed whitelist seeds
The Cloudflare ips-v4/v6.txt and paloalto/.gitkeep were git-tracked. The
Cloudflare files are overwritten at runtime by every whitelist refresh, so on
a deployed server they become locally-modified tracked files that make 'git pull'
conflict. Keep the read-only paloalto/scanner-ips.txt seed tracked; ignore the
rest (they are re-downloaded if absent; built-in ranges are the fallback).
2026-10-24 19:50:39 +02:00
zwitschi 6036fa8b1e feat: Implement SQLite schema and migrations for intrusion detection system
- Added schema definition and migration logic in app/db/schema.py.
- Created tables for log sources, requests, IP stats, scans, blocklist, whitelist, and firewall rules.
- Introduced functions to apply migrations and ensure database integrity.

feat: Enhance scan functionality with database integration

- Added _sync_blocklist_to_db function to synchronize blocklist with SQLite.
- Updated run_scan function to handle database connections and scan records.
- Implemented error handling for database operations during scans.

feat: Introduce log analysis page and API endpoints

- Created analysis.html template for displaying log analysis results.
- Added routes for fetching top IPs, IP request timelines, and cross-source IPs.
- Integrated analysis data into the dashboard and status endpoints.

fix: Ensure whitelists are synchronized with the database

- Implemented sync_whitelists_to_db function to persist in-memory whitelists.
- Updated constants.py to define the path for the SQLite database.

refactor: Modularize analysis helpers for better maintainability

- Created _analysis_helpers function to encapsulate SQLite query logic.
- Updated routes.py to utilize new analysis helper functions for API responses.
2026-10-24 19:48:20 +02:00
zwitschi 0137264fe4 style(graph): reformat graph template and switch canvas background to dark 2026-09-12 14:07:21 +02:00
zwitschi 4ba40dfef2 chore: allow re-including Cloudflare and PaloAlto whitelist seeds in app/data 2026-09-12 14:04:57 +02:00
zwitschi 40dc4237c3 chore(data): add paloalto IP lists for filtering 2026-09-12 14:04:31 +02:00
zwitschi 880877ee0f chore: add .mypy_cache and .venv to gitignore 2026-09-12 14:01:31 +02:00
zwitschi 2fda2d817f chore: consolidate gitignore paths to app/data and app/reports 2026-09-12 13:48:56 +02:00
zwitschi dca47e81ee chore(reports): remove outdated npm log analysis reports
Delete historical Nginx Proxy Manager log analysis outputs from
app/reports/npm, including generated report snapshots and the
associated data artifacts (ips.json, requests.csv, error_paths.csv,
host_summary.csv, ua_summary.csv, scanner/blocked IP lists, and the
MikroTik block script). These files are regenerated on demand and no
longer need to be tracked.
2026-09-12 13:48:48 +02:00
zwitschi 55dad05652 refactor: update whitelists to replace Openfactory with Init7 and adjust related configurations 2026-09-08 19:54:10 +02:00
zwitschi c2eba88ac8 Refactor web_scan.py for improved readability and maintainability; add cron job script for npm log backups; update start.ps1 for consistent formatting. 2026-09-08 19:49:11 +02:00
zwitschi 0d1cd21468 fix: update default log paths for Copyparty and NPM to use Unix-style directories 2026-08-12 18:32:52 +02:00
zwitschi 0d07cc5377 chore: remove pywin32 from requirements.txt 2026-08-12 18:28:00 +02:00
zwitschi 57179d4aab refactor: remove Windows service implementation for Intrusion Detection Flask web app 2026-08-12 18:08:10 +02:00
zwitschi 236e203baa Refactor code structure for improved readability and maintainability 2026-08-11 11:46:56 +02:00
zwitschi af5da6c332 feat: implement Windows service for Intrusion Detection Flask web app 2026-08-11 11:17:06 +02:00
zwitschi 67576e3c69 fix: correct comments in .editorconfig for clarity 2026-08-08 14:39:59 +02:00
zwitschi 9f8ab0f61c feat: add WHOIS subnet querying and IP consolidation utility
- Implemented a new utility for querying WHOIS information and consolidating IP addresses by subnet.
- Added caching mechanism for WHOIS responses to improve performance.
- Introduced functions for loading and saving the WHOIS cache, querying subnets, and consolidating IPs based on a threshold.

feat: create Flask web UI for intrusion detection system

- Developed a Flask web application to manage the intrusion detection system.
- Implemented routes for scanning, reports, blocklist management, and firewall configuration.
- Added helper functions for reading files and handling requests.

feat: define routes for web UI

- Registered routes for various web pages and API endpoints in the Flask application.
- Implemented functionality for scanning, reporting, blocklist management, and firewall state retrieval.

feat: implement background scan runner for web UI

- Created a background scan runner to handle scan jobs in a separate thread.
- Managed an in-memory job store for tracking scan jobs and their statuses.
- Added persistence for scan jobs to maintain state across application restarts.

chore: update start script for Flask application

- Enhanced the PowerShell start script to check for the existence of the virtual environment.
- Added comments and structured the script for better readability and usability.
2026-08-08 14:33:51 +02:00
zwitschi 41230ce04c feat: update blocklist with newly detected IPs 2026-08-06 14:58:55 +02:00
zwitschi 80a67635de feat: write timestamped blocklist change reports on firewall sync 2026-08-06 14:31:15 +02:00
zwitschi 48c5629b4b feat: update blocklist with newly detected IPs 2026-08-06 14:14:05 +02:00
zwitschi 894a2eec33 feat: make MikroTik blocklist cumulative via git history 2026-08-06 13:21:02 +02:00
zwitschi c131759a7c feat: update blocklist with newly detected IPs 2026-08-06 11:45:47 +02:00
zwitschi 94f62ae591 feat: add IPv4 address space graph with interactive tooltip 2026-08-06 11:45:24 +02:00
zwitschi 51f57f7a04 feat: add incremental log scanning with resumable byte offsets
Track last processed byte offset per log file so scans only read new
entries, add --full flag to force a rescan, and persist state atomically.
2026-08-05 21:41:00 +02:00
zwitschi f5abaaf7e5 fix: minimize spacing on blocklist display page 2026-08-05 20:52:35 +02:00
zwitschi 0a28865518 fix: allow el() to omit attributes when first child is a node or array 2026-08-05 20:44:22 +02:00
zwitschi 4ef6892916 feat: add localhost web UI for scans, blocklist, and firewall management 2026-08-05 20:34:34 +02:00
zwitschi a9dc560f80 feat: update mikrotik address lists with new blocked IPs 2026-08-05 19:48:09 +02:00
zwitschi 28c77691bb feat: write consolidated blocklists and mirror git-diffable router state
- Add `write_blocklist_files()` to emit final IPv4/IPv6 blocklists to `reports/app/data/`
- Add `APP_REPORT_DIR` / `APP_REPORT_DATA_DIR` constants for consolidated outputs
- Write firewall state snapshots to `data/mikrotik/` for git diff auditing
- Capture router state before scanning; fall back to scan-only if router is unreachable
- Use `split_cidr_versions` for CIDR-aware subnet splitting
- Update README with output layout and git-diffable state notes
2026-08-05 19:44:09 +02:00
zwitschi 6005340ecb docs: adding blocklists 2026-08-05 19:43:59 +02:00
zwitschi c5024e3cd1 docs: adding mikrotik data
updating README.md for data folder
2026-08-05 19:43:39 +02:00
zwitschi 23907179c9 chore: update whois cache 2026-08-05 19:39:37 +02:00
zwitschi eea5ef6885 Add centralized constants module and .env configuration support 2026-08-05 19:33:12 +02:00
zwitschi 94be1da199 chore: update whois cache 2026-08-05 19:31:45 +02:00
zwitschi f78faf8f8a Restructure sources into app package with unified entry point and update documentation 2026-08-04 22:23:59 +02:00
zwitschi 540154d426 Refactor imports in firewall.py and scan.py to use ip_utils; remove utils module 2026-08-04 22:10:22 +02:00
zwitschi 40212d84f7 Refactor copyparty and npm analyzers to use updated imports and remove utils module
Update whois cache with additional IP ranges
2026-08-04 21:56:55 +02:00
zwitschi 0e2c69579a Remove MikroTik block list script and enhance scan.py for firewall synchronization
- Deleted the existing MikroTik block list script (mikrotik-block.rsc) which contained whitelisted and blocked IP addresses.
- Updated scan.py to include options for synchronizing the MikroTik blocked list after scanning.
- Added functionality to preview firewall changes without applying them.
- Integrated the MikrotikFirewall class to manage the synchronization of blocked IPs with the MikroTik device.
2026-08-04 18:38:08 +02:00
zwitschi 0f51c40e44 add blocklist 2026-08-03 2026-08-04 09:05:27 +02:00
zwitschi bbf07dec5a Refactor monolith utils into domain modules and update docs 2026-08-03 17:01:36 +02:00
zwitschi 970e1b5eed adjust paths for reports data 2026-08-03 16:39:47 +02:00
zwitschi 42d786b0a2 Move WHOIS cache to data directory and update .gitignore to ignore report directories 2026-08-03 16:39:11 +02:00
zwitschi 15019de3d8 Initial commit: intrusion detection system for copyparty and NPM proxy logs with MikroTik blocklist export 2026-08-03 16:34:45 +02:00