Extend your firewall's URL filtering with a dedicated "AI Tools" category — populated with 17,410+ classified domains and updated automatically every 24 hours.
Every NGFW ships with a vendor-maintained URL database. Custom URL categories let you layer additional, specialized domain intelligence on top of these built-in classifications.
The AI tool landscape evolves faster than any other software category, with new domains launching daily across chatbots, code generators, image tools, and autonomous agents.
A dedicated AI domain feed provides deep, continuously updated coverage across 17,410+ domains organized into 18 functional categories.
Custom categories populated by external feeds refresh automatically, ensuring your firewall policy reflects the latest AI tool discoveries.
The AI tool landscape spans writing assistants, code generators, image synthesizers, voice cloners, data extraction tools, and autonomous agent platforms.
Custom URL categories complement your firewall's built-in classifications. They provide a dedicated "AI Tools" category that you control, populated from a specialized feed and enforced through the same security policy rules you already use.
Every major firewall supports custom URL categories. The implementation differs by vendor, but the architecture is the same.
Create the custom URL category
Load domains from AI-tool feed
Attach to security policy rules
Schedule daily feed updates
Next-gen firewalls typically support two approaches for custom URL categories. For 17,410+ AI domains that change daily, the EDL approach is the only practical option.
Manually add domains. Limited to ~50,000 entries. Requires a commit for every update — impractical for daily automation in production.
The firewall polls a remote URL on a schedule. No commits needed for updates. Supports 150K+ entries on current hardware.
Navigate to Objects → External Dynamic Lists in the web interface. Set the type to "URL List," point the source URL at your feed, and set the refresh interval.
# NGFW CLI — Configure an External Dynamic List for AI tool domains configure # Create the EDL object set objects external-list AI-Tools-EDL type url url \ "https://edl.yourcompany.internal/ai_domains.txt" # hosted internally, regenerated daily from the API CSV # Set the refresh interval (hourly recommended for enterprise) set objects external-list AI-Tools-EDL type url recurring hourly # Optional: add a description for audit trail set objects external-list AI-Tools-EDL type url description \ "AI Tools Blocklist - 17,410+ domains - Updated daily" # Commit the configuration commit # Verify the EDL is populated request system external-list show name AI-Tools-EDL
Create or modify a URL Filtering Profile that references the EDL. The profile tells the firewall what action to take when a session matches a domain in the list.
# NGFW CLI — URL Filtering Profile referencing the EDL set profiles url-filtering AI-Block-Profile \ block-list AI-Tools-EDL set profiles url-filtering AI-Block-Profile \ action block set profiles url-filtering AI-Block-Profile \ block-list-action block # Attach the profile to a security policy rule set rulebase security rules Block-AI-Tools \ from trust \ to untrust \ source any \ destination any \ application any \ service application-default \ action allow \ profile-setting profiles url-filtering AI-Block-Profile commit
UTM appliances support custom URL categories through web filter features. The external threat feed method is recommended — it supports automatic refresh without a firmware commit for each update cycle.
# UTM CLI — Configure external threat feed for AI tool domains config system external-resource edit "AI-Tools-Feed" set type category set resource "https://edl.yourcompany.internal/ai_domains.txt" # hosted internally, regenerated daily from the API CSV set refresh-rate 1440 # Refresh every 1440 minutes (24 hours) set status enable next end # Create a web filter profile that blocks the AI category config webfilter profile edit "Block-AI-Tools" config ftgd-wf config filters edit 1 set category 192 # Custom category ID for AI-Tools-Feed set action block next end end next end # Apply the web filter profile to a firewall policy config firewall policy edit 10 set name "Block-AI-Outbound" set srcintf "internal" set dstintf "wan1" set action accept set utm-status enable set webfilter-profile "Block-AI-Tools" next end
Each log entry includes the blocked domain, category name, source IP, and timestamp.
With your identity integration configured, logs include user identity for department-level reporting.
Track which departments generate the most block events and whether block volume is trending up or down over time.
One classified corpus populates every custom category, on every platform, in every format.
Cloud platforms handle custom categories differently from on-prem firewalls. The core concept is the same — define, populate, enforce — but the mechanics are cloud-native (API upload or portal integration).
Cloud web gateways support custom URL categories. Create a category, add AI domains, then reference it in a URL filtering rule with a "Block" action.
# Cloud SWG API — Create custom URL category and add AI domains # Step 1: Authenticate and get API token curl -X POST "https://your-swg-api.example.com/api/v1/authenticatedSession" \ -H "Content-Type: application/json" \ -d '{ "apiKey": "YOUR_API_KEY", "username": "[email protected]", "password": "YOUR_PASSWORD" }' # Step 2: Create or update custom URL category curl -X POST "https://your-swg-api.example.com/api/v1/urlCategories" \ -H "Content-Type: application/json" \ -H "Cookie: JSESSIONID=YOUR_SESSION" \ -d '{ "configuredName": "AI Tools - Blocked", "superCategory": "USER_DEFINED", "urls": [ "openai.com", "chat.openai.com", "claude.ai", "anthropic.com", "midjourney.com", "jasper.ai" ], "dbCategorizedUrls": [], "customCategory": true, "type": "URL_CATEGORY" }' # Step 3: Activate changes curl -X POST "https://your-swg-api.example.com/api/v1/status/activate" \ -H "Cookie: JSESSIONID=YOUR_SESSION"
DNS filtering platforms use destination lists instead of URL categories. Blocking happens at the DNS layer — before any HTTP connection is established.
Cloud security platforms enforce the block regardless of user location. Remote workers, branch offices, and mobile devices are covered without VPN hairpinning.
Both platforms expose REST APIs for managing categories and destination lists. Automate daily refreshes with a scheduled script. No manual portal clicks after initial setup.
A custom URL category is only as useful as its last update — an AI-tool list accurate in January is missing hundreds of new domains by March. The strategy depends on your platform, but the pattern is consistent: fetch domains, push to your firewall, verify success.
For on-premises NGFW and UTM appliances.
For cloud web gateways or when you need custom filtering.
#!/usr/bin/env python3 # Automated AI URL category updater — multi-vendor support # Schedule via cron: 0 3 * * * /opt/scripts/update_ai_category.py import requests, json, csv, io, sys, logging logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s') log = logging.getLogger('ai-category-updater') # Configuration API_KEY = "YOUR_API_KEY" API_BASE = "https://www.aitoolsblocklist.com/api/database/" STATE_FILE = "/var/lib/ai-blocklist/last_sync.json" def fetch_delta(): """Re-download the database when it changes; diff locally.""" try: with open(STATE_FILE) as f: state = json.load(f) except FileNotFoundError: state = {"last_updated_unix": 0, "domains": []} # Poll metadata; skip the download if nothing changed info = requests.get(API_BASE, params={"action": "database_info"}, headers={"X-API-Key": API_KEY}, timeout=30).json() if info["last_updated_unix"] <= state["last_updated_unix"]: log.info("Database unchanged since last sync") return {"added": [], "removed": [], **state} # Download the CSV (domain,category,subcategory) and diff locally resp = requests.get(API_BASE, params={"action": "download_database"}, headers={"X-API-Key": API_KEY}, timeout=120) resp.raise_for_status() current = {row["domain"] for row in csv.DictReader(io.StringIO(resp.text))} previous = set(state["domains"]) data = {"added": sorted(current - previous), "removed": sorted(previous - current), "last_updated_unix": info["last_updated_unix"], "domains": sorted(current)} log.info(f"Delta: {len(data['added'])} added, {len(data['removed'])} removed") return data def update_ngfw_edl(): """Force the firewall to refresh its EDL immediately.""" import subprocess result = subprocess.run([ "curl", "-sk", "https://firewall.local/api/?type=op&cmd=" "" " " "&key=PAN_API_KEY" ], capture_output=True) log.info(f"Firewall EDL refresh: {result.returncode}") def update_cloud_swg(added, removed): """Push delta to cloud SWG custom URL category.""" session = requests.Session() # Authenticate to SWG API session.post("https://your-swg-api.example.com/api/v1/authenticatedSession", json={"apiKey": "SWG_KEY", "username": "admin", "password": "pass"}) # Get current category, merge delta, PUT update cat = session.get("https://your-swg-api.example.com/api/v1/urlCategories/CUSTOM_CAT_ID").json() urls = set(cat["urls"]) urls.update(added) urls -= set(removed) cat["urls"] = list(urls) session.put(f"https://your-swg-api.example.com/api/v1/urlCategories/{cat['id']}", json=cat) session.post("https://your-swg-api.example.com/api/v1/status/activate") log.info(f"Cloud SWG updated: {len(urls)} total domains") if __name__ == "__main__": delta = fetch_delta() update_ngfw_edl() update_cloud_swg(delta["added"], delta["removed"]) # Save sync state with open(STATE_FILE, "w") as f: json.dump({"last_updated_unix": delta["last_updated_unix"], "domains": delta["domains"]}, f) log.info("All platforms updated successfully")
A custom AI URL category is a policy building block, not a policy by itself. Attach it to different rules with different actions for different user groups, zones, or time windows.
Block for all users with no exceptions: "Deepfake & Synthetic Media," "Data Extraction & Scraping," "Adult & NSFW AI." These categories represent tools with no legitimate business use and high risk of misuse or data exfiltration. Action: block, log, alert SOC.
Allow but log and monitor: "Code & Development," "Research & Academic AI." These tools may have legitimate productivity value. Action: allow, log, generate weekly usage report. Revisit quarterly to decide if controls should tighten.
Differentiate by department: block "Text & Language" for finance and legal, allow for marketing. Block "Image & Visual" for all except the design team. Requires user-ID integration (LDAP/AD group mapping) on your firewall.
Some organizations allow AI tool access during lunch hours or outside business hours but block during core working hours. Time-based schedules on your firewall policy rule enable this without changing the custom category itself.
All 17,410+ AI domains in one category. Simpler to maintain — one feed URL, one EDL, one refresh job. Best for getting started quickly.
Separate EDLs filtered by our taxonomy. More feed URLs and EDL objects, but full policy granularity per AI function. Best as governance matures.
Enterprise networks rarely run a single firewall vendor. Without a unified approach, inconsistencies between platforms create policy gaps users will find.
Tell us your firewall platform and we will send a ready-to-import domain feed in the exact format your custom URL category expects — EDL, threat feed, API, or plain-text domain list.
Specify your firewall vendor, firmware version, and whether you need a single all-categories feed or per-category filtered feeds. We will respond within 24 hours.