Overview
SAPFIAI implements an IP blocking system to protect against malicious actors, brute-force attacks, and abuse. The system uses middleware to intercept requests and a service layer for managing blocked IPs.IpBlackList Entity
The domain entity represents a blocked IP address. Location:src/Domain/Entities/IpBlackList.cs:3
BlackListReason Enum
Location:src/Domain/Enums/AuthEnums.cs:69
Creating a Block
Unblocking an IP
IpBlockingMiddleware
Middleware that intercepts all requests and checks if the IP is blocked. Location:src/Web/Middleware/IpBlockingMiddleware.cs:5
Implementation
Response for Blocked IP
Status Code:403 Forbidden
Headers:
Registering the Middleware
Add toProgram.cs before routing:
IpBlackListService
Service for managing IP blocks. Location:src/Infrastructure/Services/IpBlackListService.cs:8
Check if IP is Blocked
Block an IP Address
Unblock an IP Address
Get Blocked IPs
Get Block Information
Cleanup Expired Blocks
API Endpoints
Location:src/Web/Endpoints/Security.cs:12
Authorization: All security endpoints require CanPurge permission.
Get Blocked IPs
Block IP Address
Unblock IP Address
Integration with Login Attempts
IP blocking can be automatically triggered by failed login attempts:LoginAttempt Entity
Location:src/Domain/Entities/LoginAttempt.cs:3
Automatic IP Blocking
Best Practices
Blocking Strategy
Temporary blocks (24-48 hours):- Failed login attempts
- Rate limit violations
- Minor suspicious activity
- Known malicious IPs
- Severe abuse
- Manual administrative action
Whitelist Important IPs
Add logic to exempt trusted IPs:IPv6 Support
The system supports both IPv4 and IPv6 addresses:Monitoring and Alerts
Log all blocking events:Cleanup Strategy
Run periodic cleanup:Implementation Details
File locations:- IpBlackList Entity:
src/Domain/Entities/IpBlackList.cs:3 - IpBlackListService:
src/Infrastructure/Services/IpBlackListService.cs:8 - IpBlockingMiddleware:
src/Web/Middleware/IpBlockingMiddleware.cs:5 - Security Endpoints:
src/Web/Endpoints/Security.cs:12 - BlackListReason Enum:
src/Domain/Enums/AuthEnums.cs:69 - LoginAttempt Entity:
src/Domain/Entities/LoginAttempt.cs:3