Go to Policy & Objects → Firewall Policy and add the block list as a source address in the relevant deny rule.
4Tag your device — Add this header to track usage per FortiGate:
X-Instance-ID: fortigate-office-main
Tip: Use min_score=80 for high-confidence blocks. Lower to 50 for broader coverage at higher false-positive risk.
pfSense / pfBlockerNG
Auto-update pfBlockerNG with CompromiseLens IP blocklist
1Install pfBlockerNG — Go to System → Package Manager and install pfBlockerNG-devel.
2Add IP Feed
Go to Firewall → pfBlockerNG → IP → IPv4 and add:
List Name: CompromiseLens
URL: https://api.compromiselens.com/threat-intel/indicators/export?format=txt&min_score=80&api_key=YOUR_API_KEY
Action: Deny Both
Update Frequency: Every 1 hour
3Force Update — Click Force → Reload → All to apply immediately.
4Verify — Check Firewall → pfBlockerNG → Alerts to confirm IPs are being blocked.
Tip: Tag your pfSense: add ?instance_id=pfsense-office to the URL to track it separately.
nginx
Block malicious IPs at web server level with auto-updating blocklist
1Create update script at /etc/nginx/update-blocklist.sh:
Add the feed to your Security Intelligence block list in your Access Control Policy and deploy.
3For Cisco ASA (CLI):
object-group network CompromiseLens-Block
description CompromiseLens Threat Intel
access-list OUTSIDE_IN deny ip object-group CompromiseLens-Block any
Tip: Firepower's Security Intelligence updates happen automatically once the feed URL is configured — no scripting needed.
API Reference
Method
Endpoint
Description
Auth
GET
/threat-intel/summary
Summary stats
Public
GET
/threat-intel/indicators
Full IOC feed with filters
API Key
GET
/threat-intel/indicators/{ip}
Lookup specific IP
API Key
GET
/threat-intel/indicators/export
Export: txt, csv, nginx, json, stix
API Key
GET
/threat-intel/top-attackers
Top IPs by frequency
API Key
GET
/threat-intel/by-country
Attack stats by country
API Key
GET
/threat-intel/keys/{id}/instances
List key instances/devices
JWT
Query Parameters
Parameter
Values
Description
format
txt, csv, json, nginx, stix
Output format for export
min_score
0-100
Minimum abuse confidence score
country
CN, US, RU...
Filter by country code
limit
1-1000
Number of results
instance_id
any string
Device identifier for tracking
api_key
clti_xxx
API key (alternative to header)
Headers
Header
Description
X-API-Key
Your API key — preferred authentication method
X-Instance-ID
Device identifier for per-device usage tracking
Authorization
Bearer {JWT} — alternative to API key
Palo Alto NGFW
Block IPs using Palo Alto External Dynamic Lists
1Create External Dynamic List
Go to Objects → External Dynamic Lists → Add
Name: CompromiseLens-IOCs
Type: IP List
Source: https://api.compromiselens.com/threat-intel/indicators/export?format=txt&min_score=80&api_key=YOUR_KEY
Repeat: Every hour
2Create Security Policy — Go to Policies → Security → Add. Set Source Address to the EDL and Action to Deny.
Block malicious IPs across AWS infrastructure using WAF IP sets
1Create Lambda function to sync CompromiseLens feed into AWS WAF IP set:
import boto3, urllib.request
def lambda_handler(event, context):
api_key = "YOUR_API_KEY"
url = f"https://api.compromiselens.com/threat-intel/indicators/export?format=txt&min_score=80&api_key={api_key}"
response = urllib.request.urlopen(url)
ips = [l for l in response.read().decode().splitlines() if l and not l.startswith('#')]
wafv2 = boto3.client('wafv2', region_name='us-east-1')
ip_set = wafv2.get_ip_set(Name='CompromiseLens', Scope='REGIONAL', Id='YOUR_IP_SET_ID')
wafv2.update_ip_set(Name='CompromiseLens', Scope='REGIONAL',
Id='YOUR_IP_SET_ID', LockToken=ip_set['LockToken'],
Addresses=[f"{ip}/32" for ip in ips[:10000]])
2Schedule with EventBridge — Create a 1-hour EventBridge rule to trigger the Lambda.
3Attach to WAF Web ACL — Create a WAF rule referencing the IP set with Block action.
Tip: AWS WAF IP sets support up to 10,000 addresses. Use min_score=80 to stay within limits.
BIND 9 RPZ
Block malicious IPs at DNS resolver level using BIND 9 Response Policy Zones
1Create update script at /usr/local/bin/update-cl-rpz.sh: