This repository publishes automatically updated, FortiGate-compatible IP address feeds derived from live BGP announcements for a defined set of Autonomous Systems (ASNs).
All feeds are plain-text CIDR lists intended for use with FortiGate External Dynamic Lists (Threat Feeds).
The feeds in this repository cover the following ASNs:
The ASN list is controlled by the ASNS environment variable in the workflow.
Feeds are hosted over HTTPS using GitHub Pages.
Base URL:
https://dfratiani.github.io/asn-threat-feeds/
Each ASN produces three files:
IPv4 only: https://dfratiani.github.io/asn-threat-feeds/feeds/<asn>_ipv4.txt
IPv6 only: https://dfratiani.github.io/asn-threat-feeds/feeds/<asn>_ipv6.txt
IPv4 + IPv6 combined: https://dfratiani.github.io/asn-threat-feeds/feeds/<asn>_all.txt
Example: https://dfratiani.github.io/asn-threat-feeds/feeds/as19318_ipv4.txt
The following feeds combine all configured ASNs into a single list:
IPv4 combined: https://dfratiani.github.io/asn-threat-feeds/feeds/combined_ipv4.txt
IPv6 combined: https://dfratiani.github.io/asn-threat-feeds/feeds/combined_ipv6.txt
IPv4 + IPv6 combined: https://dfratiani.github.io/asn-threat-feeds/feeds/combined_all.txt
Each file contains one CIDR per line with no headers or comments.
Managed in the GitHub Actions workflow environment:
ASNS
Comma-separated list of ASNs to include.
Example:
AS19318,AS13335,AS15169
MIN_PEERS
Minimum number of BGP peers that must see a prefix before including it.
Default is 10.
START_DAYS / END_DAYS
Optional time window for BGP data.
If unset, the API default rolling window is used.
config system external-resource
edit "ASN_Combined_IPv4"
set type address
set resource "https://dfratiani.github.io/asn-threat-feeds/feeds/combined_ipv4.txt"
set refresh-rate 1440
set status enable
next
end
config system external-resource
edit "ASN_Combined_IPv6"
set type address
set resource "https://dfratiani.github.io/asn-threat-feeds/feeds/combined_ipv6.txt"
set refresh-rate 1440
set status enable
next
end
config firewall policy
edit 0
set name "Deny_Target_ASNs"
set srcintf "any"
set dstintf "any"
set srcaddr "all"
set dstaddr "ASN_Combined_IPv4"
set action deny
set schedule "always"
set service "ALL"
set logtraffic all
next
end
On FortiGate:
diagnose sys external-resource list
diagnose sys external-resource status
Successful output should show:
.
├── feeds/
│ ├── <asn>_ipv4.txt
│ ├── <asn>_ipv6.txt
│ ├── <asn>_all.txt
│ ├── combined_ipv4.txt
│ ├── combined_ipv6.txt
│ ├── combined_all.txt
│ └── exclusions.txt
├── scripts/
│ └── build_multi_asn_feeds.py
└── .github/
└── workflows/
└── update-feeds.yml
The feeds directory is intentionally committed and should not be ignored.
To permanently exclude specific prefixes from all feeds, create feeds/exclusions.txt with one CIDR per line. Lines starting with # are treated as comments and inline comments are allowed as well.
404 on feed URL:
FortiGate shows disconnected:
Entries equal 0:
Workflow runs but no commits:
Owner: Dennis Fratiani Jr.
Change requests or additions should be made via pull request or workflow update.