Skip to content

A backend service that accepts security events (failed logins, privilege escalations, anomalous activity), stores them, runs detection rules, and raises alerts (email/webhook/console). It should support configurable rules, audit trails, and an analyst interface (API) to triage alerts.

Notifications You must be signed in to change notification settings

OwenJonesy/Security-Monitoring-Alert-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java with spring boot

Initilaised springboot with dependecncies :

Spring Web → REST endpoints
Spring Data JPA → ORM for PostgreSQL
PostgreSQL Driver → Connect to Postgres
Spring Security → JWT auth for admin APIs
Spring Boot DevTools → hot reload for dev
Lombok → reduces boilerplate for entities/controllers

Spring Data Redis → for threshold rules & counters
Validation → @Valid annotations for request payloads
Spring Boot Actuator → health endpoints, metrics

Configured application.yml including:

database
jpa
redis config
jwt security

Using docker:

installed docker
setup postgres for docker
	docker run --name security-postgres \ -e POSTGRES_PASSWORD=ENTERNAME \ -e POSTGRES_DB=ENTERDB \ -p 5432:5432 \ -d postgres:15

setup redis
	docker run --name security-redis -p 6379:6379 -d redis:7
test: docker exec -it security-redis redis-cli ping

Add docker compose to project root to persist data, stop and run container

1 — High-level goal

A backend service that accepts security events (failed logins, privilege escalations, anomalous activity),
stores them, runs detection rules, and raises alerts (email/webhook/console). It should support configurable rules, audit trails,
and an analyst interface (API) to triage alerts.

2 — Core components

Ingest API (Spring Boot REST) — receive events from apps/agents.

Event Store — persistent storage for raw events & metadata (Postgres / Elasticsearch).

Rule Engine — evaluates events against rules (thresholds, anomaly detectors).

Alert Service — creates alerts, deduplicates, escalates (email/webhook).

Analytics / Reporting — aggregation endpoints (failed logins per user/IP).

Admin API / UI — manage rules, view alerts, mark triage status.

Worker Queue — processes events/rules asynchronously (Kafka/RabbitMQ or Spring TaskExecutor).

Cache — Redis for counts / temporary state (sliding windows, rate limits).

3 — Tech stack

Language/Framework: Java 17 + Spring Boot

Persistence: PostgreSQL for relational data, optionally Elasticsearch for log search/analytics

Queue: RabbitMQ or Apache Kafka (Kafka if high throughput)

Cache: Redis (sliding windows, rate counters)

Auth: JWT + role-based access for admin APIs

Docs: OpenAPI/Swagger

CI/CD: GitHub Actions (build, test, docker image)

Deployment: Docker + ECS / EKS / Heroku / GCP Cloud Run

Optional: Prometheus + Grafana for metrics

4 — Example REST endpoints

Authentication assumed via JWT.

Authentication/Admin:

	POST /auth/login — returns JWT

	GET /users — admin list users

Event ingestion (public/internal tokens):

	POST /events — ingest one or batch of events (accepts json array)

	body: { "source":"webapp","events":[{ "type":"LOGIN_FAIL","user":"alice","ip":"1.2.3.4","timestamp":"..." , "details":{...}}] }

Alerts & triage:

	GET /alerts — list alerts with filters (status, severity, time range)

	GET /alerts/{id} — alert details (events attached)

	POST /alerts/{id}/comment — analyst comment

	POST /alerts/{id}/close — close/resolve alert

Rules:

	GET /rules — list

	POST /rules — create (json config)

	PUT /rules/{id} — update/enable/disable

Reporting:

	GET /reports/failed-logins?from=...&to=...&groupBy=ip,user

	GET /reports/top-suspicious-ips?limit=50

6 — Detection rule examples

A. Simple threshold rule

	Rule config (JSON):
	
	{
	"type": "RATE",
	"description": "Lockout after 5 failed logins in 10 minutes",
	"window_seconds": 600,
	"threshold": 5,
	"group_by": ["user","ip"],
	"action": "CREATE_ALERT"
	}
	
	
	Implementation outline:
	
	On each LOGIN_FAIL event, increment counter in Redis key fail:{group} with TTL 600s.
	
	If counter > threshold → emit alert (include recent event ids).

B. Geo anomaly (impossible travel)

	Idea: detect two successful logins for same user from geographically distant IPs within a small time window.
	
	Use GeoIP to map IP → lat/lon.
	
	For each LOGIN_SUCCESS, check last success for user: compute distance and time delta.
	If distance/time implies travel > plausible speed (e.g., > 500 km/h), flag as anomaly.

C. Unusual privilege change

	If an account receives a role elevation (USER → ADMIN) and dev or service account performed it, create HIGH severity alert 
	and require manual review.

D. Behavioral baseline (advanced)

	Build per-user baseline of typical API call volumes or endpoints accessed (rolling window average). 
	Use z-score: z = (current_count - mean)/std. If z > 3, alert.
	
	Could implement with simple statistical windowing initially; later swap to ML.

7 — Alerting & deduplication

Deduplication strategy: alerts tied to a rule + group (e.g., rule "5 fails" + user=alice). If identical alert exists OPEN, 
increment a counter and append events instead of creating a new alert.

Escalation: if an alert remains OPEN for > X minutes and severity >= HIGH, send SMS/email to on-call.

Delivery: SMTP for email, webhooks for integrations (Slack, PagerDuty).

8 — Storage & querying choices

Postgres works for relational storage and moderate query loads; use jsonb for flexible event details and indexing (GIN).

If you want powerful search and aggregation (text search over logs), add Elasticsearch to index events; 
use it for GET /events/search.

Use Redis for ephemeral counters/sliding window algorithms.

9 — Scaling & resilience

Use asynchronous ingestion: POST /events writes to queue; workers consume and process rules. 
This decouples spikes.

Partition events by time (DB partitioning) for long-term retention.

Add backpressure and rate-limiting on ingestion endpoint.

Implement retention policies: raw events older than X months archived to S3 or removed.

10 — Security considerations (you must be able to discuss these)

Secure ingestion: require API keys + TLS. Authenticate agents.

Input validation & deny-listing for event payloads to avoid injection.

Protect stored sensitive data: if events include PII, encrypt details column at rest 
(Transparent DB encryption or application-level encryption).

RBAC: only certain roles can view sensitive fields or create rules.

Audit all admin actions in audit_log.

Secrets management: use environment variables or a secret manager; do not commit keys.

11 — Testing strategy

Unit tests for rule logic (JUnit + Mockito). Example: simulate N failed logins and assert alert created.

Integration tests: start Spring context + embedded DB, simulate ingestion → rule evaluation → alert.

E2E tests: dry-run with a small dataset and assert reports endpoints produce expected aggregates.

12 — Observability & metrics

Expose Prometheus metrics: events_ingested_total, alerts_created_total, rule_eval_latency_seconds.

Log structured messages (JSON) for pipeline debugging.

Add health endpoints and readiness/liveness probes.

13 — Minimal viable implementation (MVP) — what to build first

Spring Boot app with JWT auth and a simple admin user.

POST /events to store events in Postgres.

One rule (failed logins threshold) implemented synchronously (no queue) using Redis counters.

GET /alerts to view alerts.

Basic unit/integration tests and Dockerfile.

14 — Progressive enhancements Outline

Week 1: Project scaffolding, auth, events table, ingest endpoint, simple UI.

Week 2: Implement threshold rule (Redis), create alerts storing, list alerts endpoint, unit tests.

Week 3: Add rule management APIs, deduplication, basic email alerts (SMTP).

Week 4: Add GeoIP anomaly detection, integrate free GeoIP DB, build report endpoints.

Week 5: Introduce queue (RabbitMQ) to async rule processing; add Redis metrics.

Week 6: Add audit logs, RBAC, more rule types; Dockerize; add CI pipeline.

Week 7–8: Add Elasticsearch , advanced behavioral detectors, deploy to cloud, prepare demo & README.

About

A backend service that accepts security events (failed logins, privilege escalations, anomalous activity), stores them, runs detection rules, and raises alerts (email/webhook/console). It should support configurable rules, audit trails, and an analyst interface (API) to triage alerts.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages