From ab8c2912843d2fbae71bdd31ce8a898de3736fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Tue, 12 Mar 2024 18:28:46 +0300 Subject: [PATCH 01/15] added rego bundles --- bundle/bundle.go | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 bundle/bundle.go diff --git a/bundle/bundle.go b/bundle/bundle.go new file mode 100644 index 0000000..6e318dd --- /dev/null +++ b/bundle/bundle.go @@ -0,0 +1,8 @@ +package bundle + +import ( + "embed" +) + +//go:embed * +var Bundle embed.FS From 4938539d479336eff464a1a8f419a3330be869e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Thu, 14 Mar 2024 12:20:29 +0300 Subject: [PATCH 02/15] added policy pkg --- go.mod | 29 ++++++++- go.sum | 137 ++++++++++++++++++++++++++++++++++++++++--- pkg/policy/policy.go | 117 ++++++++++++++++++++++++++++++++++++ 3 files changed, 275 insertions(+), 8 deletions(-) create mode 100644 pkg/policy/policy.go diff --git a/go.mod b/go.mod index 9d8f9d8..33b7fa0 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ toolchain go1.21.5 require ( github.com/cilium/ebpf v0.11.0 + github.com/open-policy-agent/opa v0.62.1 github.com/pterm/pterm v0.12.74 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 @@ -16,9 +17,19 @@ require ( atomicgo.dev/cursor v0.2.0 // indirect atomicgo.dev/keyboard v0.2.9 // indirect atomicgo.dev/schedule v0.1.0 // indirect + github.com/OneOfOne/xxhash v1.2.8 // indirect + github.com/agnivade/levenshtein v1.1.1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/containerd/console v1.0.3 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-ini/ini v1.67.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gookit/color v1.5.4 // indirect + github.com/gorilla/mux v1.8.1 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/lithammer/fuzzysearch v1.1.8 // indirect @@ -26,6 +37,11 @@ require ( github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/prometheus/client_golang v1.19.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.48.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect @@ -34,13 +50,24 @@ require ( github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/tchap/go-patricia/v2 v2.3.1 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/yashtewari/glob-intersection v0.2.0 // indirect + go.opentelemetry.io/otel v1.21.0 // indirect + go.opentelemetry.io/otel/metric v1.21.0 // indirect + go.opentelemetry.io/otel/sdk v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect + google.golang.org/protobuf v1.32.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 02dc5b3..a146f4d 100644 --- a/go.sum +++ b/go.sum @@ -15,7 +15,23 @@ github.com/MarvinJWendt/testza v0.3.0/go.mod h1:eFcL4I0idjtIx8P9C6KkAuLgATNKpX4/ github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYewEjXsvsVUPbE= github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4= github.com/MarvinJWendt/testza v0.5.2/go.mod h1:xu53QFE5sCdjtMCKk8YMQ2MnymimEctc4n3EjyIYvEY= +github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= +github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= +github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= +github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= +github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bytecodealliance/wasmtime-go/v3 v3.0.2 h1:3uZCA/BLTIu+DqCfguByNMJa2HVHpXvjfy0Dy7g6fuA= +github.com/bytecodealliance/wasmtime-go/v3 v3.0.2/go.mod h1:RnUjnIXxEJcL6BgCvNyzCCRzZcxCgsZCi+RNlvYor5Q= +github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y= github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= @@ -25,20 +41,64 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgraph-io/badger/v3 v3.2103.5 h1:ylPa6qzbjYRQMU6jokoj4wzcaweHylt//CH0AKt0akg= +github.com/dgraph-io/badger/v3 v3.2103.5/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= +github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI= +github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= +github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= +github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= @@ -58,13 +118,27 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM= +github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/open-policy-agent/opa v0.62.1 h1:UcxBQ0fe6NEjkYc775j4PWoUFFhx4f6yXKIKSTAuTVk= +github.com/open-policy-agent/opa v0.62.1/go.mod h1:YqiSIIuvKwyomtnnXkJvy0E3KtVKbavjPJ/hNMuOmeM= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= +github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI= github.com/pterm/pterm v0.12.29/go.mod h1:WI3qxgvoQFFGKGjGnJR849gU0TsEOvKn5Q8LlY1U7lg= github.com/pterm/pterm v0.12.30/go.mod h1:MOqLIyMOgmTDz9yorcYbcw+HsgoZo3BQfg2wtl3HEFE= @@ -74,18 +148,21 @@ github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5b github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s= github.com/pterm/pterm v0.12.74 h1:fPsds9KisCyJh4NyY6bv8QJt3FLHceb5DxI6W0An9cc= github.com/pterm/pterm v0.12.74/go.mod h1:+M33aZWQVpmLmLbvjykyGZ4gAfeebznRo8JMbabaxQU= +github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= +github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= @@ -113,10 +190,36 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tchap/go-patricia/v2 v2.3.1 h1:6rQp39lgIYZ+MHmdEq4xzuk1t7OdC35z/xm0BGhTkes= +github.com/tchap/go-patricia/v2 v2.3.1/go.mod h1:VZRHKAb53DLaG+nA9EaYYiaEx6YztwDlLElMsnSHD4k= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yashtewari/glob-intersection v0.2.0 h1:8iuHdN88yYuCzCdjt0gDe+6bAhUwBeEWqThExu54RFg= +github.com/yashtewari/glob-intersection v0.2.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0/go.mod h1:zgBdWWAu7oEEMC06MMKc5NLbA/1YDXV1sMpSqEeLQLg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 h1:tIqheXEFWAZ7O8A7m+J0aPTmpJN3YQ7qetUAdkkkKpk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0/go.mod h1:nUeKExfxAQVbiVFn32YXpXZZHZ61Cc3s3Rn1pDBGAb0= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= @@ -127,10 +230,14 @@ golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjs golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -145,8 +252,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -165,15 +272,31 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk= +google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/pkg/policy/policy.go b/pkg/policy/policy.go new file mode 100644 index 0000000..f52592e --- /dev/null +++ b/pkg/policy/policy.go @@ -0,0 +1,117 @@ +package main + +import ( + "context" + "fmt" + files "io/fs" + "strings" + + "github.com/open-policy-agent/opa/bundle" + "github.com/open-policy-agent/opa/loader/filter" + "github.com/open-policy-agent/opa/rego" + "github.com/open-policy-agent/opa/storage" + "github.com/open-policy-agent/opa/storage/inmem" + "github.com/open-policy-agent/opa/util" +) + +const ( + bundleName = "kntrl" +) + +// Policy struct to stores rego function +// as we add more queries additional (custom) +// rules other regoArgs may be required in the future +type Policy struct { + regoArgs []func(r *rego.Rego) +} + +// Create a new Rego policy +// fs is the embbedded bundle FS and +// data is the configuration data to be evaluated +func New(fs files.FS, data []byte) (*Policy, error) { + ctx := context.Background() + + bundleClient, err := loadBundleFS(fs) + if err != nil { + return nil, err + } + + dataJson, err := unmarshal(data) + if err != nil { + return nil, err + } + + store := inmem.NewFromObject(dataJson) + txn, err := store.NewTransaction(ctx, storage.WriteParams) + if err != nil { + return nil, err + } + + var regoArgs []func(r *rego.Rego) + regoArgs = append( + regoArgs, + rego.ParsedBundle(bundleName, &bundleClient), + rego.Store(store), + rego.Transaction(txn), + ) + + return &Policy{ + regoArgs: regoArgs, + }, nil +} + +// AddQuery is the query that will be executed +// in the main.rego +func (p *Policy) AddQuery(query string) { + p.regoArgs = append(p.regoArgs, rego.Query(query)) +} + +// Eval evaluates the policy with the given input byte array +// the input is the value that has been generated by eBPF sensors +func (p *Policy) Eval(ctx context.Context, input []byte) (bool, error) { + query, err := rego.New(p.regoArgs...).PrepareForEval(ctx) + if err != nil { + return false, err + } + + inputJson, err := unmarshal(input) + if err != nil { + return false, err + } + + result, err := query.Eval(ctx, rego.EvalInput(inputJson)) + if err != nil { + return false, err + } + + // TODO: check for nil pointer + return result[0].Expressions[0].Value.(bool), nil +} + +func unmarshal(data []byte) (dataJson map[string]interface{}, err error) { + if err = util.Unmarshal(data, &dataJson); err != nil { + return dataJson, err + } + + return dataJson, nil +} + +// LoadBundleFS loads bundle embedded from policy and data directory. +func loadBundleFS(fs files.FS) (bundle.Bundle, error) { + embedLoader, err := bundle.NewFSLoader(fs) + if err != nil { + return bundle.Bundle{}, fmt.Errorf("failed to load bundle from filesystem: %w", err) + } + + return bundle.NewCustomReader(embedLoader.WithFilter(excludeTestFilter())). + WithSkipBundleVerification(true). + WithProcessAnnotations(true). + WithBundleName(bundleName). + Read() +} + +func excludeTestFilter() filter.LoaderFilter { + return func(_ string, info files.FileInfo, _ int) bool { + return strings.HasSuffix(info.Name(), "_test.rego") + } +} From ef0bae6c1cda81a0d2e1960b95f51e92925aa174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Thu, 14 Mar 2024 16:35:32 +0300 Subject: [PATCH 03/15] refactor --- internal/handlers/tracer/tracer.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/handlers/tracer/tracer.go b/internal/handlers/tracer/tracer.go index 7715fd1..b7d4e3c 100644 --- a/internal/handlers/tracer/tracer.go +++ b/internal/handlers/tracer/tracer.go @@ -32,6 +32,7 @@ var ( const ( rootCgroup = "/sys/fs/cgroup" + progName = "kntrl" ) // Run runs the tracer @@ -230,7 +231,7 @@ func Run(cmd cobra.Command) error { } taskname := utils.TrimNullBytes(event.Task) - if taskname == "kntrl" { + if taskname == progName { continue } From 41b26ca4a1898d6e83470f4f88242347b097c786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Mon, 18 Mar 2024 23:07:49 +0300 Subject: [PATCH 04/15] add flag parser --- cmd/cli/tracer.go | 4 ++++ internal/handlers/tracer/flag.go | 23 +++++++++++++++++++++++ internal/handlers/tracer/tracer.go | 11 +++++++---- pkg/policy/policy.go | 10 +++++----- 4 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 internal/handlers/tracer/flag.go diff --git a/cmd/cli/tracer.go b/cmd/cli/tracer.go index 1b83386..674e13b 100644 --- a/cmd/cli/tracer.go +++ b/cmd/cli/tracer.go @@ -18,6 +18,10 @@ func initTracerCommand() *cobra.Command { tracerCMD.Flags().String("mode", "monitor", "trace || monitor") tracerCMD.Flags().String("hosts", "", "enter ip or hostname (192.168.0.100, example.com, .github.com)") + tracerCMD.Flags().Bool("allow-local-ranges", true, "allows access to local IP ranges") + tracerCMD.Flags().Bool("allow-github-meta", false, "allows access to GitHub meta IP ranges (https://api.github.com/meta)") + tracerCMD.Flags().String("allowed-hosts", "", "enter allowed hostnames (example.com, .github.com)") + tracerCMD.Flags().String("allowed-ips", "", "enter allowed IP addresses") tracerCMD.Flags().StringP("output-file-name", "o", "/tmp/kntrl.out", "output file name") return tracerCMD diff --git a/internal/handlers/tracer/flag.go b/internal/handlers/tracer/flag.go new file mode 100644 index 0000000..e920c64 --- /dev/null +++ b/internal/handlers/tracer/flag.go @@ -0,0 +1,23 @@ +package tracer + +import ( + "errors" + + "github.com/spf13/cobra" +) + +func parseFlags(cmd *cobra.Command, mode string, dc []byte) error { + mode = cmd.Flag("mode").Value.String() + if mode == "" { + return errors.New("[mode] flag is required") + } + + var allowedHosts = cmd.Flag("allowed-hosts").Value.String() + var allowedIPAddr = cmd.Flag("allowed-ips").Value.String() + + if allowedIPAddr == "" || allowedHosts == "" { + return errors.New("no allowed hosts or IP addreses provided") + } + + return nil +} diff --git a/internal/handlers/tracer/tracer.go b/internal/handlers/tracer/tracer.go index b7d4e3c..24b8a99 100644 --- a/internal/handlers/tracer/tracer.go +++ b/internal/handlers/tracer/tracer.go @@ -35,6 +35,13 @@ const ( progName = "kntrl" ) +func init() { + if !utils.IsRoot() { + logger.Log.Error("you need root privileges to run this program") + os.Exit(1) + } +} + // Run runs the tracer // $BPF_CLANG and $BPF_CFLAGS are set by the Makefile. // @@ -59,10 +66,6 @@ func Run(cmd cobra.Command) error { return fmt.Errorf("failed to parse allowed hosts: %w", err) } - if !utils.IsRoot() { - return errors.New("you need root privileges to run this program") - } - var ebpfClient = ebpfman.New() if err := ebpfClient.Load(prog); err != nil { return fmt.Errorf("failed to load ebpf program: %w", err) diff --git a/pkg/policy/policy.go b/pkg/policy/policy.go index f52592e..c3110a5 100644 --- a/pkg/policy/policy.go +++ b/pkg/policy/policy.go @@ -1,4 +1,4 @@ -package main +package policy import ( "context" @@ -38,7 +38,7 @@ func New(fs files.FS, data []byte) (*Policy, error) { dataJson, err := unmarshal(data) if err != nil { - return nil, err + return nil, fmt.Errorf("failed to unmarshal data json: %w", err) } store := inmem.NewFromObject(dataJson) @@ -71,17 +71,17 @@ func (p *Policy) AddQuery(query string) { func (p *Policy) Eval(ctx context.Context, input []byte) (bool, error) { query, err := rego.New(p.regoArgs...).PrepareForEval(ctx) if err != nil { - return false, err + return false, fmt.Errorf("failed to prepare rego query: %w", err) } inputJson, err := unmarshal(input) if err != nil { - return false, err + return false, fmt.Errorf("failed to unmarshal input json: %w", err) } result, err := query.Eval(ctx, rego.EvalInput(inputJson)) if err != nil { - return false, err + return false, fmt.Errorf("failed to eval rego query: %w", err) } // TODO: check for nil pointer From 10b7a868bbeaa5a3b7b19f62f86c96535804c8fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Thu, 28 Mar 2024 17:05:40 +0300 Subject: [PATCH 05/15] policy_test added --- pkg/policy/policy_test.go | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pkg/policy/policy_test.go diff --git a/pkg/policy/policy_test.go b/pkg/policy/policy_test.go new file mode 100644 index 0000000..9011469 --- /dev/null +++ b/pkg/policy/policy_test.go @@ -0,0 +1,41 @@ +package policy + +import ( + "context" + "testing" + + "github.com/kondukto-io/kntrl/bundle" +) + +func TestPolicyRawLocal(t *testing.T) { + var bundleFS = bundle.Bundle + + raw := `{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": false, "allow_local_ip_ranges": true}` + + input := `{ + "pid": 2806, + "task_name": "curl", + "proto": "tcp", + "daddr": "192.168.0.1", + "dport": 443, + "domains": [ + ".kondukto.io" + ]}` + + p, err := New(bundleFS, []byte(raw)) + if err != nil { + t.Errorf("policy init error: %v", err) + } + + p.AddQuery("data.kntrl.policy") + + result, err := p.Eval(context.Background(), []byte(input)) + if err != nil { + t.Errorf("eval error: %v", err) + } + + expected := true + if result != expected { + t.Errorf("expected policy status to be '%v', got %v", expected, result) + } +} From a545e0ec3810efba6ee5b39c5be706598ef86103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Thu, 28 Mar 2024 17:23:43 +0300 Subject: [PATCH 06/15] add test cases --- pkg/policy/policy_test.go | 59 +++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/pkg/policy/policy_test.go b/pkg/policy/policy_test.go index 9011469..53099a0 100644 --- a/pkg/policy/policy_test.go +++ b/pkg/policy/policy_test.go @@ -7,35 +7,46 @@ import ( "github.com/kondukto-io/kntrl/bundle" ) +var testCases = map[string]struct { + query []byte + input []byte + expected bool +}{ + "allow_local_ip_ranges": { + []byte(`{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": false, "allow_local_ip_ranges": true}`), + []byte(`{"pid": 2806,"task_name": "curl","proto": "tcp","daddr": "192.168.0.1","dport": 443,"domains": [".kondukto.io"]}`), + true, + }, + "allow_ip_addr": { + []byte(`{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": false, "allow_local_ip_ranges": true}`), + []byte(`{"pid": 2806,"task_name": "curl","proto": "tcp","daddr": "1.1.1.1","dport": 443,"domains": [".kondukto.io"]}`), + true, + }, + "allow_host": { + []byte(`{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": false, "allow_local_ip_ranges": true}`), + []byte(`{"pid": 2806,"task_name": "curl","proto": "tcp","daddr": "1.1.1.1","dport": 443,"domains": ["foo.com"]}`), + true, + }, +} + func TestPolicyRawLocal(t *testing.T) { var bundleFS = bundle.Bundle - raw := `{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": false, "allow_local_ip_ranges": true}` - - input := `{ - "pid": 2806, - "task_name": "curl", - "proto": "tcp", - "daddr": "192.168.0.1", - "dport": 443, - "domains": [ - ".kondukto.io" - ]}` - - p, err := New(bundleFS, []byte(raw)) - if err != nil { - t.Errorf("policy init error: %v", err) - } + for name, test := range testCases { + p, err := New(bundleFS, test.query) + if err != nil { + t.Errorf("[%s] policy init error: %v", name, err) + } + p.AddQuery("data.kntrl.policy") - p.AddQuery("data.kntrl.policy") + result, err := p.Eval(context.Background(), test.input) + if err != nil { + t.Errorf("[%s] eval error: %v", name, err) + } - result, err := p.Eval(context.Background(), []byte(input)) - if err != nil { - t.Errorf("eval error: %v", err) - } + if result != test.expected { + t.Errorf("[%s] expected policy status '%v', got %v", name, test.expected, result) + } - expected := true - if result != expected { - t.Errorf("expected policy status to be '%v', got %v", expected, result) } } From 0b47fa2e00f77f1b2588e96ce92fe85855609827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Mon, 1 Apr 2024 18:11:40 +0300 Subject: [PATCH 07/15] fix github meta policy --- bundle/.manifest | 6 + bundle/assets/github/data.json | 4528 ++++++++++++++++++++++++++++++++ pkg/policy/policy.go | 13 +- pkg/policy/policy_test.go | 18 +- 4 files changed, 4554 insertions(+), 11 deletions(-) create mode 100644 bundle/.manifest create mode 100644 bundle/assets/github/data.json diff --git a/bundle/.manifest b/bundle/.manifest new file mode 100644 index 0000000..2dd091f --- /dev/null +++ b/bundle/.manifest @@ -0,0 +1,6 @@ +{ + "roots": ["kntrl","assets"], + "metadata": { + "name": "kntrl" + } +} diff --git a/bundle/assets/github/data.json b/bundle/assets/github/data.json new file mode 100644 index 0000000..bed458b --- /dev/null +++ b/bundle/assets/github/data.json @@ -0,0 +1,4528 @@ +{ + "verifiable_password_authentication": false, + "ssh_key_fingerprints": { + "SHA256_ECDSA": "p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM", + "SHA256_ED25519": "+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU", + "SHA256_RSA": "uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s" + }, + "ssh_keys": [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl", + "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=", + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=" + ], + "hooks": [ + "192.30.252.0/22", + "185.199.108.0/22", + "140.82.112.0/20", + "143.55.64.0/20", + "2a0a:a440::/29", + "2606:50c0::/32" + ], + "web": [ + "192.30.252.0/22", + "185.199.108.0/22", + "140.82.112.0/20", + "143.55.64.0/20", + "2a0a:a440::/29", + "2606:50c0::/32", + "20.201.28.151/32", + "20.205.243.166/32", + "20.87.245.0/32", + "20.248.137.48/32", + "20.207.73.82/32", + "20.27.177.113/32", + "20.200.245.247/32", + "20.175.192.147/32", + "20.233.83.145/32", + "20.29.134.23/32", + "20.199.39.232/32", + "4.208.26.197/32" + ], + "api": [ + "192.30.252.0/22", + "185.199.108.0/22", + "140.82.112.0/20", + "143.55.64.0/20", + "2a0a:a440::/29", + "2606:50c0::/32", + "20.201.28.148/32", + "20.205.243.168/32", + "20.87.245.6/32", + "20.248.137.49/32", + "20.207.73.85/32", + "20.27.177.116/32", + "20.200.245.245/32", + "20.175.192.149/32", + "20.233.83.146/32", + "20.29.134.17/32", + "20.199.39.228/32", + "4.208.26.200/32" + ], + "git": [ + "192.30.252.0/22", + "185.199.108.0/22", + "140.82.112.0/20", + "143.55.64.0/20", + "2a0a:a440::/29", + "2606:50c0::/32", + "20.201.28.151/32", + "20.205.243.166/32", + "20.87.245.0/32", + "20.248.137.48/32", + "20.207.73.82/32", + "20.27.177.113/32", + "20.200.245.247/32", + "20.175.192.147/32", + "20.233.83.145/32", + "20.29.134.23/32", + "20.199.39.232/32", + "4.208.26.197/32", + "20.201.28.152/32", + "20.205.243.160/32", + "20.87.245.4/32", + "20.248.137.50/32", + "20.207.73.83/32", + "20.27.177.118/32", + "20.200.245.248/32", + "20.175.192.146/32", + "20.233.83.149/32", + "20.29.134.19/32", + "20.199.39.227/32", + "4.208.26.198/32" + ], + "github_enterprise_importer": [ + "192.30.252.0/22", + "185.199.108.0/22", + "140.82.112.0/20", + "143.55.64.0/20", + "2a0a:a440::/29", + "2606:50c0::/32", + "40.71.233.224/28", + "20.125.12.8/29" + ], + "packages": [ + "140.82.121.33/32", + "140.82.121.34/32", + "140.82.113.33/32", + "140.82.113.34/32", + "140.82.112.33/32", + "140.82.112.34/32", + "140.82.114.33/32", + "140.82.114.34/32", + "192.30.255.164/31", + "20.201.28.144/32", + "20.205.243.164/32", + "20.87.245.1/32", + "20.248.137.52/32", + "20.207.73.86/32", + "20.27.177.117/32", + "20.200.245.241/32", + "20.175.192.150/32", + "20.233.83.147/32", + "20.29.134.18/32", + "20.199.39.231/32", + "4.208.26.196/32" + ], + "pages": [ + "192.30.252.153/32", + "192.30.252.154/32", + "185.199.108.153/32", + "185.199.109.153/32", + "185.199.110.153/32", + "185.199.111.153/32", + "2606:50c0:8000::153/128", + "2606:50c0:8001::153/128", + "2606:50c0:8002::153/128", + "2606:50c0:8003::153/128" + ], + "importer": [ + "52.23.85.212/32", + "52.0.228.224/32", + "52.22.155.48/32", + "20.75.217.40/29", + "20.69.67.168/29" + ], + "actions": [ + "4.148.0.0/16", + "4.149.0.0/18", + "4.149.64.0/19", + "4.149.96.0/19", + "4.149.128.0/17", + "4.150.0.0/18", + "4.150.64.0/18", + "4.150.128.0/18", + "4.150.192.0/19", + "4.150.224.0/19", + "4.151.0.0/16", + "4.152.0.0/15", + "4.154.0.0/15", + "4.156.0.0/15", + "4.175.0.0/16", + "4.180.0.0/16", + "4.207.0.0/16", + "4.208.0.0/15", + "4.210.0.0/17", + "4.210.128.0/17", + "4.227.0.0/17", + "4.227.128.0/17", + "4.231.0.0/17", + "4.231.128.0/17", + "4.236.0.0/17", + "4.236.128.0/17", + "4.242.0.0/17", + "4.242.128.0/17", + "4.245.0.0/17", + "4.245.128.0/17", + "4.246.0.0/17", + "4.246.128.0/17", + "4.249.0.0/17", + "4.249.128.0/17", + "4.255.0.0/17", + "13.64.0.0/16", + "13.65.0.0/16", + "13.66.0.0/17", + "13.66.128.0/17", + "13.67.128.0/20", + "13.67.144.0/21", + "13.67.152.0/24", + "13.67.153.0/28", + "13.67.153.32/27", + "13.67.153.64/26", + "13.67.153.128/25", + "13.67.155.0/24", + "13.67.156.0/22", + "13.67.160.0/19", + "13.67.192.0/18", + "13.68.0.0/17", + "13.68.128.0/17", + "13.69.0.0/17", + "13.69.128.0/17", + "13.70.192.0/18", + "13.72.64.0/18", + "13.73.32.0/19", + "13.73.128.0/18", + "13.73.224.0/21", + "13.73.240.0/20", + "13.74.0.0/16", + "13.77.64.0/18", + "13.77.128.0/18", + "13.79.0.0/16", + "13.80.0.0/15", + "13.82.0.0/16", + "13.83.0.0/16", + "13.84.0.0/15", + "13.86.0.0/17", + "13.86.128.0/17", + "13.87.112.0/21", + "13.87.128.0/17", + "13.88.0.0/17", + "13.88.128.0/18", + "13.88.200.0/21", + "13.89.0.0/16", + "13.90.0.0/16", + "13.91.0.0/16", + "13.92.0.0/16", + "13.93.0.0/17", + "13.93.128.0/17", + "13.94.64.0/18", + "13.94.128.0/17", + "13.95.0.0/16", + "13.104.129.64/26", + "13.104.144.64/27", + "13.104.144.128/27", + "13.104.144.192/27", + "13.104.145.0/26", + "13.104.145.192/26", + "13.104.146.0/26", + "13.104.146.128/25", + "13.104.147.0/25", + "13.104.147.128/25", + "13.104.148.0/25", + "13.104.149.128/25", + "13.104.150.0/25", + "13.104.152.128/25", + "13.104.158.16/28", + "13.104.158.64/26", + "13.104.158.176/28", + "13.104.192.0/21", + "13.104.208.64/27", + "13.104.208.96/27", + "13.104.208.128/27", + "13.104.208.160/28", + "13.104.208.192/26", + "13.104.209.0/24", + "13.104.210.0/24", + "13.104.211.0/25", + "13.104.213.0/25", + "13.104.214.0/25", + "13.104.214.128/25", + "13.104.215.0/25", + "13.104.217.0/25", + "13.104.218.128/25", + "13.104.219.128/25", + "13.104.220.0/25", + "13.104.220.128/25", + "13.104.222.0/24", + "13.104.223.0/25", + "13.105.14.0/25", + "13.105.14.128/26", + "13.105.17.0/26", + "13.105.17.64/26", + "13.105.17.128/26", + "13.105.17.192/26", + "13.105.18.0/26", + "13.105.18.160/27", + "13.105.18.192/26", + "13.105.19.0/25", + "13.105.19.128/25", + "13.105.20.192/26", + "13.105.21.0/24", + "13.105.22.0/24", + "13.105.23.0/26", + "13.105.23.64/26", + "13.105.23.128/25", + "13.105.24.0/24", + "13.105.25.0/24", + "13.105.26.0/24", + "13.105.27.0/25", + "13.105.27.192/27", + "13.105.28.0/28", + "13.105.28.16/28", + "13.105.28.32/28", + "13.105.28.48/28", + "13.105.28.128/25", + "13.105.29.0/25", + "13.105.29.128/25", + "13.105.36.0/27", + "13.105.36.32/28", + "13.105.36.64/27", + "13.105.36.128/26", + "13.105.36.192/26", + "13.105.37.0/26", + "13.105.37.64/26", + "13.105.37.128/26", + "13.105.37.192/26", + "13.105.49.0/31", + "13.105.49.2/31", + "13.105.49.4/31", + "13.105.49.6/31", + "13.105.49.8/31", + "13.105.49.10/31", + "13.105.49.12/31", + "13.105.49.14/31", + "13.105.49.16/31", + "13.105.49.18/31", + "13.105.49.20/31", + "13.105.49.22/31", + "13.105.49.24/31", + "13.105.49.26/31", + "13.105.49.28/31", + "13.105.49.30/31", + "13.105.49.32/31", + "13.105.49.34/31", + "13.105.49.36/31", + "13.105.49.38/31", + "13.105.49.40/31", + "13.105.49.42/31", + "13.105.49.44/31", + "13.105.49.46/31", + "13.105.49.48/31", + "13.105.49.50/31", + "13.105.49.52/31", + "13.105.49.54/31", + "13.105.49.56/31", + "13.105.49.58/31", + "13.105.49.60/31", + "13.105.49.62/31", + "13.105.49.64/31", + "13.105.49.66/31", + "13.105.49.68/31", + "13.105.49.70/31", + "13.105.49.72/31", + "13.105.49.74/31", + "13.105.49.76/31", + "13.105.49.78/31", + "13.105.49.80/31", + "13.105.49.82/31", + "13.105.49.84/31", + "13.105.49.86/31", + "13.105.49.88/31", + "13.105.49.90/31", + "13.105.49.92/31", + "13.105.49.94/31", + "13.105.49.96/31", + "13.105.49.98/31", + "13.105.49.100/31", + "13.105.49.102/31", + "13.105.49.104/31", + "13.105.49.106/31", + "13.105.49.108/31", + "13.105.49.110/31", + "13.105.49.112/31", + "13.105.49.114/31", + "13.105.49.116/31", + "13.105.49.118/31", + "13.105.49.120/31", + "13.105.49.122/31", + "13.105.49.124/31", + "13.105.49.126/31", + "13.105.49.128/31", + "13.105.49.130/31", + "13.105.49.132/31", + "13.105.49.134/31", + "13.105.49.136/31", + "13.105.49.138/31", + "13.105.49.140/31", + "13.105.49.142/31", + "13.105.49.144/31", + "13.105.49.146/31", + "13.105.49.148/31", + "13.105.49.150/31", + "13.105.49.152/31", + "13.105.49.154/31", + "13.105.49.156/31", + "13.105.49.158/31", + "13.105.49.160/31", + "13.105.49.162/31", + "13.105.49.164/31", + "13.105.49.166/31", + "13.105.49.168/31", + "13.105.49.170/31", + "13.105.49.172/31", + "13.105.49.174/31", + "13.105.49.176/31", + "13.105.49.178/31", + "13.105.49.180/31", + "13.105.49.182/31", + "13.105.49.184/31", + "13.105.49.186/31", + "13.105.49.188/31", + "13.105.49.190/31", + "13.105.49.192/31", + "13.105.49.194/31", + "13.105.49.196/31", + "13.105.49.198/31", + "13.105.49.200/31", + "13.105.49.202/31", + "13.105.49.204/31", + "13.105.49.206/31", + "13.105.49.208/31", + "13.105.49.210/31", + "13.105.49.212/31", + "13.105.49.214/31", + "13.105.49.216/31", + "13.105.49.218/31", + "13.105.49.220/31", + "13.105.49.222/31", + "13.105.49.224/31", + "13.105.49.226/31", + "13.105.49.228/31", + "13.105.49.230/31", + "13.105.49.232/31", + "13.105.49.234/31", + "13.105.49.236/31", + "13.105.49.238/31", + "13.105.49.240/31", + "13.105.49.242/31", + "13.105.49.244/31", + "13.105.49.246/31", + "13.105.49.248/31", + "13.105.49.250/31", + "13.105.49.252/31", + "13.105.49.254/31", + "13.105.53.0/25", + "13.105.53.192/26", + "13.105.60.0/27", + "13.105.60.32/28", + "13.105.60.48/28", + "13.105.60.64/27", + "13.105.60.96/27", + "13.105.60.128/27", + "13.105.60.192/26", + "13.105.66.32/27", + "13.105.66.64/26", + "13.105.66.128/28", + "13.105.66.144/28", + "13.105.66.160/27", + "13.105.66.192/26", + "13.105.67.0/25", + "13.105.67.128/25", + "13.105.74.0/27", + "13.105.74.32/28", + "13.105.74.48/28", + "13.105.74.64/27", + "13.105.74.128/26", + "13.105.75.0/27", + "13.105.75.32/28", + "13.105.75.64/27", + "13.105.96.64/27", + "13.105.96.96/28", + "13.105.96.128/25", + "13.105.97.0/27", + "13.105.98.48/28", + "13.105.98.96/27", + "13.105.98.128/27", + "13.105.98.160/27", + "13.105.98.192/28", + "13.105.98.224/27", + "13.105.101.32/28", + "13.105.101.48/28", + "13.105.101.64/26", + "13.105.101.176/28", + "13.105.102.16/28", + "13.105.102.64/26", + "13.105.102.224/27", + "13.105.103.0/28", + "13.105.103.32/27", + "13.105.103.128/27", + "13.105.103.160/28", + "13.105.103.192/27", + "13.105.104.32/27", + "13.105.104.64/28", + "13.105.104.96/27", + "13.105.104.240/28", + "13.105.105.32/27", + "13.105.105.64/27", + "13.105.105.96/27", + "13.105.105.128/28", + "13.105.105.160/27", + "13.105.106.0/27", + "13.105.106.32/28", + "13.105.106.64/27", + "13.105.107.112/28", + "13.105.107.160/27", + "13.105.107.192/27", + "13.105.117.0/31", + "13.105.117.2/31", + "13.105.117.4/31", + "13.105.117.6/31", + "13.105.117.8/31", + "13.105.117.10/31", + "13.105.117.12/31", + "13.105.117.14/31", + "13.105.117.16/31", + "13.105.117.18/31", + "13.105.117.20/31", + "13.105.117.22/31", + "13.105.117.24/31", + "13.105.117.26/31", + "13.105.117.28/31", + "13.105.117.30/31", + "13.105.117.32/31", + "13.105.117.34/31", + "13.105.117.36/31", + "13.105.117.38/31", + "13.105.117.40/31", + "13.105.117.42/31", + "13.105.117.44/31", + "13.105.117.46/31", + "13.105.117.48/31", + "13.105.117.50/31", + "13.105.117.52/31", + "13.105.117.54/31", + "13.105.117.56/31", + "13.105.117.58/31", + "13.105.117.60/31", + "13.105.117.62/31", + "13.105.117.64/31", + "13.105.117.66/31", + "13.105.117.68/31", + "13.105.117.70/31", + "13.105.117.72/31", + "13.105.117.74/31", + "13.105.117.76/31", + "13.105.117.78/31", + "13.105.117.80/31", + "13.105.117.82/31", + "13.105.117.84/31", + "13.105.117.86/31", + "13.105.117.88/31", + "13.105.117.90/31", + "13.105.117.92/31", + "13.105.117.94/31", + "13.105.117.96/31", + "13.105.117.98/31", + "13.105.117.100/31", + "13.105.117.102/31", + "13.105.117.104/31", + "13.105.117.106/31", + "13.105.117.108/31", + "13.105.117.110/31", + "13.105.117.112/31", + "13.105.117.114/31", + "13.105.117.116/31", + "13.105.117.118/31", + "13.105.117.120/31", + "13.105.117.122/31", + "13.105.117.124/31", + "13.105.117.126/31", + "13.105.117.128/31", + "13.105.117.130/31", + "13.105.117.132/31", + "13.105.117.134/31", + "13.105.117.136/31", + "13.105.117.138/31", + "13.105.117.140/31", + "13.105.117.142/31", + "13.105.117.144/31", + "13.105.117.146/31", + "13.105.117.148/31", + "13.105.117.150/31", + "13.105.117.152/31", + "13.105.117.154/31", + "13.105.117.156/31", + "13.105.117.158/31", + "13.105.117.160/31", + "13.105.117.162/31", + "13.105.117.164/31", + "13.105.117.166/31", + "13.105.117.168/31", + "13.105.117.170/31", + "13.105.117.172/31", + "13.105.117.174/31", + "13.105.117.176/31", + "13.105.117.178/31", + "13.105.117.180/31", + "13.105.117.182/31", + "13.105.117.184/31", + "13.105.117.186/31", + "13.105.117.188/31", + "13.105.117.190/31", + "13.105.117.192/31", + "13.105.117.194/31", + "13.105.117.196/31", + "13.105.117.198/31", + "13.105.117.200/31", + "13.105.117.202/31", + "13.105.117.204/31", + "13.105.117.206/31", + "13.105.117.208/31", + "13.105.117.210/31", + "13.105.117.212/31", + "13.105.117.214/31", + "13.105.117.216/31", + "13.105.117.218/31", + "13.105.117.220/31", + "13.105.117.222/31", + "13.105.117.224/31", + "13.105.117.226/31", + "13.105.117.228/31", + "13.105.117.230/31", + "13.105.117.232/31", + "13.105.117.234/31", + "13.105.117.236/31", + "13.105.117.238/31", + "13.105.117.240/31", + "13.105.117.242/31", + "13.105.117.244/31", + "13.105.117.246/31", + "13.105.117.248/31", + "13.105.117.250/31", + "13.105.117.252/31", + "13.105.117.254/31", + "13.105.220.0/31", + "13.105.220.2/31", + "13.105.220.4/31", + "13.105.220.6/31", + "20.1.128.0/17", + "20.3.0.0/16", + "20.4.0.0/16", + "20.7.0.0/16", + "20.8.0.0/16", + "20.9.0.0/17", + "20.9.128.0/17", + "20.10.0.0/16", + "20.12.0.0/17", + "20.12.128.0/17", + "20.13.0.0/17", + "20.13.128.0/17", + "20.14.0.0/17", + "20.14.128.0/17", + "20.15.0.0/17", + "20.15.128.0/17", + "20.16.0.0/16", + "20.17.72.0/21", + "20.18.184.0/21", + "20.22.0.0/16", + "20.23.0.0/16", + "20.25.0.0/17", + "20.25.128.0/18", + "20.25.192.0/18", + "20.29.0.0/17", + "20.29.128.0/17", + "20.31.0.0/16", + "20.33.0.0/24", + "20.33.1.0/24", + "20.33.2.0/24", + "20.33.3.0/24", + "20.33.4.0/24", + "20.33.6.0/24", + "20.33.8.0/24", + "20.33.12.0/24", + "20.33.13.0/24", + "20.33.14.0/24", + "20.33.15.0/24", + "20.33.17.0/24", + "20.33.20.0/24", + "20.33.21.0/24", + "20.33.22.0/24", + "20.33.25.0/24", + "20.33.26.0/24", + "20.33.27.0/24", + "20.33.29.0/24", + "20.33.30.0/24", + "20.33.31.0/24", + "20.33.32.0/24", + "20.33.33.0/24", + "20.33.36.0/24", + "20.33.37.0/24", + "20.33.39.0/24", + "20.33.40.0/24", + "20.33.41.0/24", + "20.33.42.0/24", + "20.33.44.0/24", + "20.33.45.0/24", + "20.33.46.0/24", + "20.33.48.0/24", + "20.33.49.0/24", + "20.33.51.0/24", + "20.33.53.0/24", + "20.33.55.0/24", + "20.33.57.0/24", + "20.33.59.0/24", + "20.33.61.0/24", + "20.33.66.0/24", + "20.33.67.0/24", + "20.33.68.0/24", + "20.33.69.0/24", + "20.33.135.0/24", + "20.33.138.0/24", + "20.33.143.0/24", + "20.33.144.0/24", + "20.33.145.0/24", + "20.33.147.0/24", + "20.33.149.0/24", + "20.33.150.0/24", + "20.33.156.0/24", + "20.33.157.0/24", + "20.33.159.0/24", + "20.33.160.0/24", + "20.33.163.0/24", + "20.33.164.0/24", + "20.33.165.0/24", + "20.33.167.0/24", + "20.33.178.0/24", + "20.33.185.0/24", + "20.33.186.0/24", + "20.33.189.0/24", + "20.33.191.0/24", + "20.33.197.0/24", + "20.33.198.0/24", + "20.33.201.0/24", + "20.33.205.0/24", + "20.33.206.0/24", + "20.33.207.0/24", + "20.33.208.0/24", + "20.33.209.0/24", + "20.33.216.0/24", + "20.33.217.0/24", + "20.33.218.0/24", + "20.36.0.0/19", + "20.36.96.0/21", + "20.36.128.0/17", + "20.37.128.0/18", + "20.38.0.0/20", + "20.38.32.0/20", + "20.38.64.0/19", + "20.38.96.0/23", + "20.38.98.0/24", + "20.38.99.0/24", + "20.38.100.0/23", + "20.38.102.0/23", + "20.38.104.0/23", + "20.38.108.0/23", + "20.38.122.0/23", + "20.38.160.0/20", + "20.38.176.0/21", + "20.38.200.0/22", + "20.38.208.0/22", + "20.39.32.0/19", + "20.40.24.0/21", + "20.40.192.0/18", + "20.41.0.0/18", + "20.41.128.0/18", + "20.42.0.0/17", + "20.42.128.0/19", + "20.42.160.0/23", + "20.42.168.0/21", + "20.42.176.0/20", + "20.43.192.0/18", + "20.44.8.0/21", + "20.44.16.0/21", + "20.44.64.0/18", + "20.45.0.0/18", + "20.45.120.0/21", + "20.46.224.0/19", + "20.47.0.0/24", + "20.47.1.0/24", + "20.47.2.0/24", + "20.47.3.0/24", + "20.47.7.0/24", + "20.47.8.0/24", + "20.47.15.0/24", + "20.47.16.0/23", + "20.47.18.0/23", + "20.47.20.0/23", + "20.47.22.0/23", + "20.47.24.0/23", + "20.47.29.0/24", + "20.47.30.0/24", + "20.47.31.0/24", + "20.47.32.0/24", + "20.47.58.0/23", + "20.47.60.0/23", + "20.47.62.0/23", + "20.47.69.0/24", + "20.47.76.0/23", + "20.47.78.0/23", + "20.47.96.0/23", + "20.47.100.0/24", + "20.47.107.0/24", + "20.47.108.0/23", + "20.47.110.0/24", + "20.47.111.0/24", + "20.47.113.0/24", + "20.47.115.0/24", + "20.47.116.0/24", + "20.47.117.0/24", + "20.47.118.0/24", + "20.47.119.0/24", + "20.47.120.0/23", + "20.49.0.0/18", + "20.49.88.0/21", + "20.49.96.0/21", + "20.49.104.0/21", + "20.49.112.0/21", + "20.49.120.0/21", + "20.50.0.0/18", + "20.50.64.0/20", + "20.50.80.0/21", + "20.50.88.0/21", + "20.50.128.0/17", + "20.51.0.0/21", + "20.51.8.0/21", + "20.51.64.0/18", + "20.51.128.0/17", + "20.54.0.0/17", + "20.54.128.0/17", + "20.55.0.0/17", + "20.55.192.0/18", + "20.56.0.0/16", + "20.57.0.0/17", + "20.57.128.0/18", + "20.57.192.0/19", + "20.59.0.0/18", + "20.59.64.0/18", + "20.59.192.0/18", + "20.60.0.0/24", + "20.60.1.0/24", + "20.60.2.0/23", + "20.60.6.0/23", + "20.60.14.0/24", + "20.60.18.0/24", + "20.60.19.0/24", + "20.60.20.0/24", + "20.60.26.0/23", + "20.60.28.0/23", + "20.60.30.0/23", + "20.60.34.0/23", + "20.60.38.0/23", + "20.60.40.0/23", + "20.60.44.128/25", + "20.60.48.0/22", + "20.60.52.0/23", + "20.60.56.0/22", + "20.60.60.0/22", + "20.60.64.0/22", + "20.60.68.0/22", + "20.60.80.0/23", + "20.60.82.0/23", + "20.60.88.0/22", + "20.60.128.0/23", + "20.60.130.0/24", + "20.60.132.0/23", + "20.60.134.0/23", + "20.60.137.0/24", + "20.60.140.0/23", + "20.60.144.0/23", + "20.60.146.0/23", + "20.60.148.0/23", + "20.60.150.0/23", + "20.60.152.0/23", + "20.60.160.0/23", + "20.60.162.0/23", + "20.60.168.0/23", + "20.60.178.0/23", + "20.60.180.0/23", + "20.60.194.0/23", + "20.60.196.0/23", + "20.60.204.0/23", + "20.60.220.0/23", + "20.60.222.0/23", + "20.60.224.0/23", + "20.60.228.0/23", + "20.60.230.0/23", + "20.60.232.0/23", + "20.60.236.0/23", + "20.60.240.0/23", + "20.60.244.0/23", + "20.60.246.0/23", + "20.60.250.0/23", + "20.61.0.0/16", + "20.62.0.0/17", + "20.62.128.0/17", + "20.64.0.0/17", + "20.64.128.0/17", + "20.65.0.0/17", + "20.65.128.0/17", + "20.66.0.0/17", + "20.66.128.0/17", + "20.67.0.0/17", + "20.67.128.0/17", + "20.69.64.0/18", + "20.69.128.0/18", + "20.69.192.0/18", + "20.71.0.0/16", + "20.72.32.0/19", + "20.72.64.0/18", + "20.72.128.0/18", + "20.72.192.0/18", + "20.73.0.0/16", + "20.75.0.0/17", + "20.75.128.0/17", + "20.76.0.0/16", + "20.80.0.0/18", + "20.80.64.0/18", + "20.80.128.0/18", + "20.80.192.0/18", + "20.81.0.0/17", + "20.81.128.0/17", + "20.82.0.0/17", + "20.82.128.0/17", + "20.83.0.0/18", + "20.83.64.0/18", + "20.83.128.0/18", + "20.83.192.0/18", + "20.84.0.0/17", + "20.84.128.0/17", + "20.85.0.0/17", + "20.85.128.0/17", + "20.86.0.0/16", + "20.88.0.0/18", + "20.88.96.0/19", + "20.88.128.0/18", + "20.88.192.0/18", + "20.93.0.0/17", + "20.93.128.0/17", + "20.94.0.0/17", + "20.94.128.0/18", + "20.94.192.0/18", + "20.95.0.0/24", + "20.95.1.0/24", + "20.95.2.0/24", + "20.95.3.0/24", + "20.95.4.0/24", + "20.95.5.0/24", + "20.95.6.0/24", + "20.95.7.0/24", + "20.95.8.0/21", + "20.95.16.0/24", + "20.95.18.0/24", + "20.95.19.0/24", + "20.95.21.0/24", + "20.95.22.0/24", + "20.95.25.0/24", + "20.95.26.0/24", + "20.95.27.0/24", + "20.95.30.0/24", + "20.95.31.0/24", + "20.95.32.0/24", + "20.95.33.0/24", + "20.95.34.0/24", + "20.95.35.0/24", + "20.95.36.0/24", + "20.95.37.0/24", + "20.95.38.0/23", + "20.95.51.0/24", + "20.95.52.0/24", + "20.95.53.0/24", + "20.95.54.0/24", + "20.95.55.0/24", + "20.95.56.0/24", + "20.95.57.0/24", + "20.95.58.0/24", + "20.95.59.0/24", + "20.95.60.0/24", + "20.95.61.0/24", + "20.95.64.0/24", + "20.95.66.0/24", + "20.95.68.0/23", + "20.95.72.0/23", + "20.95.76.0/23", + "20.95.81.0/24", + "20.95.88.0/21", + "20.95.98.0/24", + "20.95.103.0/24", + "20.95.255.0/29", + "20.96.0.0/16", + "20.97.0.0/17", + "20.97.128.0/17", + "20.98.0.0/18", + "20.98.64.0/18", + "20.98.128.0/18", + "20.98.192.0/18", + "20.99.128.0/17", + "20.101.0.0/16", + "20.102.0.0/17", + "20.102.192.0/18", + "20.103.0.0/16", + "20.105.0.0/17", + "20.105.128.0/17", + "20.106.0.0/18", + "20.106.64.0/18", + "20.106.128.0/17", + "20.107.0.0/17", + "20.107.128.0/17", + "20.109.0.0/17", + "20.109.128.0/18", + "20.109.192.0/18", + "20.110.0.0/16", + "20.112.0.0/17", + "20.112.160.0/20", + "20.112.176.0/21", + "20.112.184.0/21", + "20.112.192.0/18", + "20.114.0.0/18", + "20.114.64.0/18", + "20.114.128.0/17", + "20.115.0.0/17", + "20.115.128.0/17", + "20.118.0.0/18", + "20.118.64.0/18", + "20.118.128.0/18", + "20.118.192.0/18", + "20.119.0.0/17", + "20.119.128.0/17", + "20.120.0.0/17", + "20.120.128.0/17", + "20.121.0.0/16", + "20.122.0.0/16", + "20.123.0.0/17", + "20.123.128.0/17", + "20.124.0.0/16", + "20.125.0.0/18", + "20.125.64.0/18", + "20.125.128.0/19", + "20.125.160.0/19", + "20.125.192.0/19", + "20.125.224.0/20", + "20.125.240.0/20", + "20.126.0.0/16", + "20.127.0.0/16", + "20.135.0.0/22", + "20.135.4.0/23", + "20.135.6.0/23", + "20.135.8.0/22", + "20.135.12.0/22", + "20.135.16.0/23", + "20.135.18.0/23", + "20.135.20.0/23", + "20.135.24.0/23", + "20.135.70.0/23", + "20.135.74.0/23", + "20.135.134.0/23", + "20.135.136.0/22", + "20.135.140.0/22", + "20.135.144.0/23", + "20.135.188.0/22", + "20.135.192.0/23", + "20.135.194.0/23", + "20.135.196.0/22", + "20.135.200.0/22", + "20.135.204.0/23", + "20.135.216.0/22", + "20.135.220.0/23", + "20.135.222.0/23", + "20.135.224.0/22", + "20.135.228.0/22", + "20.135.232.0/23", + "20.135.254.0/23", + "20.136.0.0/25", + "20.136.0.128/25", + "20.136.1.0/24", + "20.136.2.0/24", + "20.136.3.0/25", + "20.136.3.128/25", + "20.136.4.0/24", + "20.136.5.0/24", + "20.136.6.0/24", + "20.136.7.0/25", + "20.143.0.0/24", + "20.143.1.0/24", + "20.143.2.0/24", + "20.143.3.0/24", + "20.143.4.0/24", + "20.143.5.0/24", + "20.143.8.0/23", + "20.143.10.0/23", + "20.143.12.0/24", + "20.143.13.0/24", + "20.143.32.0/23", + "20.143.34.0/23", + "20.143.38.0/24", + "20.143.39.0/24", + "20.143.46.0/23", + "20.143.50.0/23", + "20.143.52.0/23", + "20.150.8.0/23", + "20.150.17.0/25", + "20.150.20.128/25", + "20.150.25.0/24", + "20.150.26.0/24", + "20.150.29.0/24", + "20.150.30.0/24", + "20.150.32.0/23", + "20.150.34.0/23", + "20.150.36.0/24", + "20.150.37.0/24", + "20.150.38.0/23", + "20.150.42.0/24", + "20.150.43.128/25", + "20.150.47.128/25", + "20.150.48.0/24", + "20.150.49.0/24", + "20.150.50.0/23", + "20.150.58.0/24", + "20.150.63.0/24", + "20.150.67.0/24", + "20.150.68.0/24", + "20.150.70.0/24", + "20.150.72.0/24", + "20.150.74.0/24", + "20.150.75.0/24", + "20.150.76.0/24", + "20.150.77.0/24", + "20.150.78.0/24", + "20.150.79.0/24", + "20.150.82.0/24", + "20.150.83.0/24", + "20.150.84.0/24", + "20.150.87.0/24", + "20.150.88.0/24", + "20.150.89.0/24", + "20.150.90.0/24", + "20.150.91.0/24", + "20.150.93.0/24", + "20.150.94.0/24", + "20.150.95.0/24", + "20.150.102.0/24", + "20.150.104.0/24", + "20.150.107.0/24", + "20.150.122.0/24", + "20.150.126.0/24", + "20.150.128.0/17", + "20.152.0.0/23", + "20.152.2.0/23", + "20.152.4.0/23", + "20.152.6.0/23", + "20.152.28.0/23", + "20.157.6.0/23", + "20.157.17.0/24", + "20.157.18.0/24", + "20.157.19.0/24", + "20.157.21.0/24", + "20.157.22.0/24", + "20.157.24.0/24", + "20.157.25.0/24", + "20.157.27.0/24", + "20.157.29.0/24", + "20.157.30.0/24", + "20.157.32.0/24", + "20.157.33.0/24", + "20.157.34.0/23", + "20.157.36.0/23", + "20.157.39.0/24", + "20.157.40.0/24", + "20.157.43.0/24", + "20.157.47.0/24", + "20.157.48.0/23", + "20.157.50.0/23", + "20.157.54.0/24", + "20.157.57.0/24", + "20.157.59.0/24", + "20.157.60.0/24", + "20.157.61.0/24", + "20.157.62.0/23", + "20.157.64.0/21", + "20.157.72.0/24", + "20.157.73.0/24", + "20.157.76.0/22", + "20.157.80.0/22", + "20.157.84.0/24", + "20.157.86.0/24", + "20.157.87.0/24", + "20.157.88.0/24", + "20.157.90.0/24", + "20.157.91.0/24", + "20.157.93.0/24", + "20.157.95.0/24", + "20.157.97.0/24", + "20.157.99.0/24", + "20.157.100.0/24", + "20.157.104.0/24", + "20.157.105.0/24", + "20.157.106.0/24", + "20.157.109.0/24", + "20.157.110.0/24", + "20.157.111.0/24", + "20.157.114.0/24", + "20.157.115.0/24", + "20.157.116.0/24", + "20.157.118.0/24", + "20.157.119.0/24", + "20.157.122.0/24", + "20.157.123.0/24", + "20.157.124.0/24", + "20.157.125.0/24", + "20.157.127.0/24", + "20.157.130.0/24", + "20.157.132.0/24", + "20.157.134.0/24", + "20.157.142.0/23", + "20.157.145.0/24", + "20.157.146.0/24", + "20.157.147.0/24", + "20.157.158.0/24", + "20.157.159.0/24", + "20.157.163.0/24", + "20.157.164.0/24", + "20.157.166.0/24", + "20.157.167.0/24", + "20.157.170.0/24", + "20.157.171.0/24", + "20.157.172.0/24", + "20.157.179.0/24", + "20.157.180.0/24", + "20.157.181.0/24", + "20.157.184.0/24", + "20.157.185.0/24", + "20.157.186.0/24", + "20.157.191.0/24", + "20.157.194.0/24", + "20.157.209.0/24", + "20.157.212.0/24", + "20.157.215.0/24", + "20.157.216.0/24", + "20.157.217.0/24", + "20.157.221.0/24", + "20.157.223.0/24", + "20.157.230.0/24", + "20.157.231.0/24", + "20.157.236.0/24", + "20.157.239.0/24", + "20.157.240.0/24", + "20.157.244.0/24", + "20.157.245.0/24", + "20.157.247.0/24", + "20.157.248.0/24", + "20.157.249.0/24", + "20.157.250.0/24", + "20.157.251.0/24", + "20.157.252.0/24", + "20.157.253.0/24", + "20.160.0.0/16", + "20.161.0.0/16", + "20.163.0.0/17", + "20.163.128.0/17", + "20.165.0.0/17", + "20.166.0.0/16", + "20.168.0.0/17", + "20.168.128.0/19", + "20.168.160.0/21", + "20.168.192.0/18", + "20.169.0.0/17", + "20.169.128.0/17", + "20.171.0.0/16", + "20.172.0.0/17", + "20.172.128.0/17", + "20.184.64.0/18", + "20.184.128.0/17", + "20.185.0.0/16", + "20.186.0.0/17", + "20.186.128.0/18", + "20.186.192.0/18", + "20.187.0.0/18", + "20.188.64.0/19", + "20.189.0.0/18", + "20.189.128.0/18", + "20.190.0.0/18", + "20.190.128.0/24", + "20.190.129.0/24", + "20.190.130.0/24", + "20.190.131.0/24", + "20.190.132.0/24", + "20.190.133.0/24", + "20.190.134.0/24", + "20.190.135.0/24", + "20.190.137.0/24", + "20.190.151.0/24", + "20.190.152.0/24", + "20.190.153.0/24", + "20.190.154.0/24", + "20.190.155.0/24", + "20.190.156.0/24", + "20.190.157.0/24", + "20.190.159.0/24", + "20.190.160.0/24", + "20.190.190.128/25", + "20.190.192.0/18", + "20.191.0.0/18", + "20.191.64.0/18", + "20.201.135.0/24", + "20.201.136.0/24", + "20.201.147.0/24", + "20.201.148.0/24", + "20.201.165.0/24", + "20.201.223.0/24", + "20.201.224.0/23", + "20.201.231.0/24", + "20.202.1.0/24", + "20.202.2.0/24", + "20.202.12.0/22", + "20.202.16.0/22", + "20.202.20.0/24", + "20.202.21.0/24", + "20.202.22.0/24", + "20.202.23.0/24", + "20.202.24.0/24", + "20.202.25.0/24", + "20.202.26.0/23", + "20.202.28.0/23", + "20.202.30.0/24", + "20.202.31.0/24", + "20.202.32.0/23", + "20.202.34.0/24", + "20.202.35.0/24", + "20.202.36.0/23", + "20.202.38.0/24", + "20.202.39.0/24", + "20.202.84.0/24", + "20.202.85.0/24", + "20.202.89.0/24", + "20.202.90.0/24", + "20.202.93.0/24", + "20.202.94.0/24", + "20.202.97.0/24", + "20.202.98.0/24", + "20.202.105.0/24", + "20.202.106.0/24", + "20.202.109.0/24", + "20.202.110.0/24", + "20.202.113.0/24", + "20.202.114.0/24", + "20.202.117.0/24", + "20.202.118.0/24", + "20.202.119.0/24", + "20.202.120.0/22", + "20.202.124.0/24", + "20.202.125.0/24", + "20.202.126.0/24", + "20.202.129.0/24", + "20.202.130.0/24", + "20.202.133.0/24", + "20.202.134.0/24", + "20.202.137.0/24", + "20.202.138.0/24", + "20.202.140.0/24", + "20.202.141.0/24", + "20.202.142.0/23", + "20.202.144.0/22", + "20.202.148.0/23", + "20.202.150.0/24", + "20.202.151.0/24", + "20.202.152.0/24", + "20.202.153.0/24", + "20.202.154.0/24", + "20.202.155.0/24", + "20.202.156.0/24", + "20.202.157.0/24", + "20.202.158.0/24", + "20.202.159.0/24", + "20.202.160.0/24", + "20.202.161.0/24", + "20.202.162.0/24", + "20.202.163.0/24", + "20.202.164.0/24", + "20.202.165.0/24", + "20.202.166.0/24", + "20.202.167.0/24", + "20.202.168.0/24", + "20.202.184.0/21", + "20.202.192.0/23", + "20.202.194.0/23", + "20.202.196.0/22", + "20.202.200.0/23", + "20.202.202.0/23", + "20.202.204.0/22", + "20.202.208.0/24", + "20.202.209.0/24", + "20.202.210.0/24", + "20.202.248.0/24", + "20.209.0.0/23", + "20.209.4.0/23", + "20.209.10.0/23", + "20.209.14.0/23", + "20.209.18.0/23", + "20.209.26.0/23", + "20.209.34.0/23", + "20.209.36.0/23", + "20.209.38.0/23", + "20.209.40.0/23", + "20.209.48.0/23", + "20.209.52.0/23", + "20.209.58.0/23", + "20.209.62.0/23", + "20.209.68.0/23", + "20.209.72.0/23", + "20.209.74.0/23", + "20.209.76.0/23", + "20.209.84.0/23", + "20.209.90.0/23", + "20.209.92.0/23", + "20.209.96.0/23", + "20.209.98.0/23", + "20.209.100.0/23", + "20.209.102.0/23", + "20.209.104.0/23", + "20.209.106.0/23", + "20.209.108.0/23", + "20.209.110.0/23", + "20.209.112.0/23", + "20.209.114.0/23", + "20.209.116.0/23", + "20.209.138.0/23", + "20.209.142.0/23", + "20.209.146.0/23", + "20.209.154.0/23", + "20.209.160.0/23", + "20.209.162.0/23", + "20.209.178.0/23", + "20.209.180.0/23", + "20.209.184.0/23", + "20.209.186.0/23", + "20.209.190.0/23", + "20.209.192.0/23", + "20.209.194.0/23", + "20.209.196.0/23", + "20.209.218.0/24", + "20.209.220.0/23", + "20.209.226.0/23", + "20.209.230.0/23", + "20.209.244.0/23", + "20.221.0.0/17", + "20.221.192.0/18", + "20.223.0.0/16", + "20.224.0.0/16", + "20.225.0.0/16", + "20.228.64.0/18", + "20.228.128.0/17", + "20.229.0.0/16", + "20.230.0.0/17", + "20.230.128.0/17", + "20.231.0.0/17", + "20.231.192.0/18", + "20.232.0.0/16", + "20.234.0.0/17", + "20.234.128.0/17", + "20.236.0.0/18", + "20.236.64.0/18", + "20.236.128.0/18", + "20.236.192.0/18", + "20.237.0.0/17", + "20.237.128.0/17", + "20.238.0.0/17", + "20.238.128.0/17", + "20.241.0.0/17", + "20.241.128.0/17", + "20.242.0.0/17", + "20.242.128.0/17", + "20.245.0.0/16", + "20.246.0.0/17", + "20.246.128.0/17", + "20.252.0.0/17", + "20.253.0.0/17", + "20.253.128.0/17", + "23.96.0.0/17", + "23.96.128.0/17", + "23.97.128.0/17", + "23.98.45.0/24", + "23.98.46.0/24", + "23.98.47.0/24", + "23.98.48.0/21", + "23.98.128.0/17", + "23.99.0.0/18", + "23.99.64.0/19", + "23.99.128.0/17", + "23.100.0.0/20", + "23.100.16.0/20", + "23.100.32.0/20", + "23.100.48.0/20", + "23.100.64.0/21", + "23.100.72.0/21", + "23.100.80.0/21", + "23.100.120.0/21", + "23.100.128.0/18", + "23.100.224.0/20", + "23.100.240.0/20", + "23.101.32.0/21", + "23.101.48.0/20", + "23.101.64.0/20", + "23.101.80.0/21", + "23.101.112.0/20", + "23.101.128.0/20", + "23.101.144.0/20", + "23.101.160.0/20", + "23.101.176.0/20", + "23.101.192.0/20", + "23.102.0.0/18", + "23.102.96.0/19", + "23.102.128.0/18", + "23.102.192.0/21", + "23.102.202.0/24", + "23.102.203.0/24", + "23.102.204.0/22", + "23.102.208.0/20", + "23.103.64.32/27", + "23.103.64.64/27", + "40.64.64.0/18", + "40.64.128.0/21", + "40.64.144.0/27", + "40.64.144.32/27", + "40.64.144.64/27", + "40.64.144.192/29", + "40.64.145.0/28", + "40.64.145.160/28", + "40.64.145.176/28", + "40.64.146.80/28", + "40.64.146.96/28", + "40.64.146.176/28", + "40.64.146.192/28", + "40.64.163.0/25", + "40.64.164.128/25", + "40.64.165.0/25", + "40.64.168.128/25", + "40.64.169.0/25", + "40.64.169.128/25", + "40.64.172.128/25", + "40.64.173.128/25", + "40.64.174.0/25", + "40.64.184.0/25", + "40.65.0.0/18", + "40.65.64.0/18", + "40.65.192.0/18", + "40.67.128.0/19", + "40.67.160.0/19", + "40.67.192.0/19", + "40.67.224.0/19", + "40.68.0.0/16", + "40.69.0.0/18", + "40.69.64.0/19", + "40.69.128.0/18", + "40.69.192.0/19", + "40.70.0.0/18", + "40.70.64.0/20", + "40.70.80.0/21", + "40.70.128.0/17", + "40.71.0.0/16", + "40.74.0.0/18", + "40.74.160.0/19", + "40.74.192.0/18", + "40.75.0.0/19", + "40.75.64.0/18", + "40.75.128.0/17", + "40.76.0.0/16", + "40.77.0.0/17", + "40.77.128.128/25", + "40.77.129.0/24", + "40.77.130.0/25", + "40.77.130.128/26", + "40.77.130.192/26", + "40.77.131.0/25", + "40.77.131.128/26", + "40.77.131.224/28", + "40.77.132.0/24", + "40.77.133.0/24", + "40.77.136.0/28", + "40.77.136.32/28", + "40.77.136.48/28", + "40.77.136.64/28", + "40.77.136.80/28", + "40.77.136.96/28", + "40.77.137.0/25", + "40.77.137.128/26", + "40.77.137.192/27", + "40.77.138.0/25", + "40.77.138.128/25", + "40.77.139.0/25", + "40.77.139.128/25", + "40.77.160.0/27", + "40.77.161.64/26", + "40.77.162.0/24", + "40.77.163.0/24", + "40.77.164.0/24", + "40.77.165.0/24", + "40.77.166.160/27", + "40.77.166.192/26", + "40.77.167.0/24", + "40.77.168.0/24", + "40.77.169.0/24", + "40.77.170.0/24", + "40.77.171.0/24", + "40.77.172.0/24", + "40.77.174.0/24", + "40.77.175.0/27", + "40.77.175.64/27", + "40.77.175.96/27", + "40.77.175.160/27", + "40.77.175.192/27", + "40.77.175.240/28", + "40.77.176.0/24", + "40.77.177.0/24", + "40.77.178.0/23", + "40.77.180.0/23", + "40.77.182.0/28", + "40.77.182.16/28", + "40.77.182.32/27", + "40.77.182.64/27", + "40.77.182.96/27", + "40.77.182.128/27", + "40.77.182.192/26", + "40.77.183.0/24", + "40.77.184.0/25", + "40.77.184.128/25", + "40.77.185.128/25", + "40.77.186.0/23", + "40.77.188.0/22", + "40.77.196.0/24", + "40.77.197.0/24", + "40.77.198.0/26", + "40.77.198.64/26", + "40.77.198.128/25", + "40.77.199.0/25", + "40.77.199.128/26", + "40.77.199.192/26", + "40.77.200.0/25", + "40.77.200.128/25", + "40.77.202.0/24", + "40.77.224.0/28", + "40.77.224.32/27", + "40.77.224.96/27", + "40.77.224.128/25", + "40.77.225.0/24", + "40.77.226.128/25", + "40.77.228.0/24", + "40.77.229.0/24", + "40.77.230.0/24", + "40.77.231.0/24", + "40.77.232.128/25", + "40.77.233.0/24", + "40.77.234.0/25", + "40.77.234.160/27", + "40.77.234.192/27", + "40.77.234.224/27", + "40.77.236.0/27", + "40.77.236.32/27", + "40.77.236.80/28", + "40.77.236.128/27", + "40.77.236.160/28", + "40.77.236.176/28", + "40.77.237.0/26", + "40.77.237.64/26", + "40.77.240.0/25", + "40.77.240.128/25", + "40.77.241.0/24", + "40.77.242.0/23", + "40.77.244.0/25", + "40.77.245.0/24", + "40.77.247.0/24", + "40.77.248.0/25", + "40.77.248.128/25", + "40.77.249.0/24", + "40.77.250.0/24", + "40.77.251.0/24", + "40.77.254.0/26", + "40.77.254.128/25", + "40.77.255.0/25", + "40.77.255.128/26", + "40.77.255.192/26", + "40.78.0.0/17", + "40.78.128.0/18", + "40.78.208.32/30", + "40.78.208.48/28", + "40.78.208.64/28", + "40.78.210.0/24", + "40.78.211.0/24", + "40.78.214.0/24", + "40.78.216.0/24", + "40.78.217.0/24", + "40.78.219.0/24", + "40.78.220.0/24", + "40.78.221.0/24", + "40.78.222.0/24", + "40.78.224.0/21", + "40.78.240.0/20", + "40.79.0.0/21", + "40.79.8.0/27", + "40.79.8.32/28", + "40.79.8.64/27", + "40.79.8.96/28", + "40.79.9.0/24", + "40.79.16.0/20", + "40.79.32.0/20", + "40.79.48.0/27", + "40.79.48.32/28", + "40.79.49.0/24", + "40.79.56.0/21", + "40.79.64.0/20", + "40.79.80.0/21", + "40.79.90.0/24", + "40.79.91.0/28", + "40.79.92.0/24", + "40.79.93.0/28", + "40.79.94.0/24", + "40.79.95.0/28", + "40.79.152.0/21", + "40.79.204.0/27", + "40.79.204.32/28", + "40.79.204.48/28", + "40.79.204.64/27", + "40.79.204.96/27", + "40.79.204.128/27", + "40.79.204.160/27", + "40.79.205.64/28", + "40.79.205.96/27", + "40.79.205.192/27", + "40.79.205.224/28", + "40.79.206.0/27", + "40.79.206.64/27", + "40.79.206.128/27", + "40.79.206.160/27", + "40.79.206.192/27", + "40.79.207.80/28", + "40.79.207.128/25", + "40.79.240.0/20", + "40.80.144.0/21", + "40.80.152.0/21", + "40.80.160.0/24", + "40.80.184.0/21", + "40.80.192.0/19", + "40.81.0.0/20", + "40.81.32.0/20", + "40.82.4.0/22", + "40.82.16.0/22", + "40.82.24.0/22", + "40.82.36.0/22", + "40.82.44.0/22", + "40.82.60.0/22", + "40.82.92.0/22", + "40.82.96.0/22", + "40.82.248.0/21", + "40.83.0.0/20", + "40.83.16.0/21", + "40.83.24.0/26", + "40.83.24.64/27", + "40.83.24.128/25", + "40.83.25.0/24", + "40.83.26.0/23", + "40.83.28.0/22", + "40.83.32.0/19", + "40.83.128.0/17", + "40.84.0.0/17", + "40.84.128.0/17", + "40.85.0.0/17", + "40.85.128.0/20", + "40.85.144.0/20", + "40.85.160.0/19", + "40.86.0.0/17", + "40.86.128.0/19", + "40.86.160.0/19", + "40.87.0.0/17", + "40.87.128.0/19", + "40.87.160.0/22", + "40.87.164.0/22", + "40.87.168.0/30", + "40.87.168.8/29", + "40.87.168.16/28", + "40.87.168.32/29", + "40.87.168.48/28", + "40.87.168.64/30", + "40.87.168.70/31", + "40.87.168.72/29", + "40.87.168.80/28", + "40.87.168.96/27", + "40.87.168.128/26", + "40.87.168.192/28", + "40.87.168.210/31", + "40.87.168.212/30", + "40.87.168.216/29", + "40.87.168.224/27", + "40.87.169.0/27", + "40.87.169.32/29", + "40.87.169.44/30", + "40.87.169.48/29", + "40.87.169.56/31", + "40.87.169.60/30", + "40.87.169.64/27", + "40.87.169.96/31", + "40.87.169.102/31", + "40.87.169.104/29", + "40.87.169.112/28", + "40.87.169.128/29", + "40.87.169.136/31", + "40.87.169.140/30", + "40.87.169.160/27", + "40.87.169.192/26", + "40.87.170.0/25", + "40.87.170.128/28", + "40.87.170.144/31", + "40.87.170.152/29", + "40.87.170.160/28", + "40.87.170.176/29", + "40.87.170.184/30", + "40.87.170.194/31", + "40.87.170.196/30", + "40.87.170.214/31", + "40.87.170.216/30", + "40.87.170.228/30", + "40.87.170.232/29", + "40.87.170.240/29", + "40.87.170.248/30", + "40.87.171.2/31", + "40.87.171.4/30", + "40.87.171.8/29", + "40.87.171.16/28", + "40.87.171.36/30", + "40.87.171.40/31", + "40.87.171.72/29", + "40.87.171.80/28", + "40.87.171.96/27", + "40.87.171.128/27", + "40.87.171.160/31", + "40.87.171.166/31", + "40.87.171.168/29", + "40.87.171.176/28", + "40.87.171.192/27", + "40.87.171.224/28", + "40.87.171.240/29", + "40.87.171.248/31", + "40.87.172.0/22", + "40.87.176.0/25", + "40.87.176.128/27", + "40.87.176.160/29", + "40.87.176.174/31", + "40.87.176.184/30", + "40.87.176.192/28", + "40.87.176.216/29", + "40.87.176.224/29", + "40.87.176.232/31", + "40.87.176.240/28", + "40.87.177.16/28", + "40.87.177.32/27", + "40.87.177.64/27", + "40.87.177.96/28", + "40.87.177.112/29", + "40.87.177.120/31", + "40.87.177.124/30", + "40.87.177.128/28", + "40.87.177.144/29", + "40.87.177.152/31", + "40.87.177.156/30", + "40.87.177.160/27", + "40.87.177.192/29", + "40.87.177.200/30", + "40.87.177.212/30", + "40.87.177.216/29", + "40.87.177.224/27", + "40.87.178.0/24", + "40.87.179.0/25", + "40.87.179.128/26", + "40.87.179.192/31", + "40.87.179.202/31", + "40.87.179.204/30", + "40.87.179.208/28", + "40.87.179.224/27", + "40.87.180.0/30", + "40.87.180.4/31", + "40.87.180.14/31", + "40.87.180.16/30", + "40.87.180.20/31", + "40.87.180.28/30", + "40.87.180.32/29", + "40.87.180.42/31", + "40.87.180.44/30", + "40.87.180.48/28", + "40.87.180.64/30", + "40.87.180.74/31", + "40.87.180.76/30", + "40.87.180.80/28", + "40.87.180.96/27", + "40.87.180.128/26", + "40.87.180.192/30", + "40.87.180.202/31", + "40.87.180.204/30", + "40.87.180.208/28", + "40.87.180.224/28", + "40.87.180.240/29", + "40.87.180.248/30", + "40.87.181.4/30", + "40.87.181.8/29", + "40.87.181.16/28", + "40.87.181.32/27", + "40.87.181.64/26", + "40.87.181.128/28", + "40.87.181.144/29", + "40.87.181.152/31", + "40.87.181.162/31", + "40.87.181.164/30", + "40.87.181.168/29", + "40.87.181.176/28", + "40.87.181.192/26", + "40.87.182.4/30", + "40.87.182.8/29", + "40.87.182.24/29", + "40.87.182.32/28", + "40.87.182.48/29", + "40.87.182.56/30", + "40.87.182.62/31", + "40.87.182.64/26", + "40.87.182.128/25", + "40.87.183.0/28", + "40.87.183.16/29", + "40.87.183.24/30", + "40.87.183.34/31", + "40.87.183.36/30", + "40.87.183.42/31", + "40.87.183.44/30", + "40.87.183.54/31", + "40.87.183.56/29", + "40.87.183.64/26", + "40.87.183.144/28", + "40.87.183.160/27", + "40.87.183.192/27", + "40.87.183.224/29", + "40.87.183.232/30", + "40.87.183.236/31", + "40.87.183.244/30", + "40.87.183.248/29", + "40.87.184.0/22", + "40.87.188.0/22", + "40.87.232.0/21", + "40.88.0.0/16", + "40.89.224.0/19", + "40.90.16.0/27", + "40.90.16.128/27", + "40.90.16.192/26", + "40.90.17.64/27", + "40.90.17.96/27", + "40.90.17.192/27", + "40.90.18.64/26", + "40.90.18.128/26", + "40.90.18.192/26", + "40.90.19.64/26", + "40.90.19.128/25", + "40.90.20.0/25", + "40.90.20.128/25", + "40.90.21.0/25", + "40.90.21.128/25", + "40.90.22.0/25", + "40.90.22.128/25", + "40.90.23.0/25", + "40.90.23.128/25", + "40.90.24.128/25", + "40.90.25.0/26", + "40.90.25.64/26", + "40.90.25.128/26", + "40.90.25.192/26", + "40.90.26.128/25", + "40.90.27.64/26", + "40.90.27.128/26", + "40.90.28.64/26", + "40.90.28.128/26", + "40.90.30.160/27", + "40.90.30.192/26", + "40.90.31.128/25", + "40.90.128.16/28", + "40.90.128.128/28", + "40.90.128.224/28", + "40.90.129.128/26", + "40.90.129.192/27", + "40.90.129.224/27", + "40.90.130.0/27", + "40.90.130.64/28", + "40.90.130.96/28", + "40.90.130.160/27", + "40.90.130.192/28", + "40.90.130.224/28", + "40.90.131.32/27", + "40.90.131.192/27", + "40.90.131.224/27", + "40.90.132.48/28", + "40.90.132.96/27", + "40.90.132.128/26", + "40.90.132.192/26", + "40.90.133.0/27", + "40.90.133.64/27", + "40.90.133.96/28", + "40.90.133.112/28", + "40.90.133.128/28", + "40.90.134.64/26", + "40.90.134.128/26", + "40.90.134.192/26", + "40.90.135.0/26", + "40.90.135.64/26", + "40.90.135.128/25", + "40.90.136.0/28", + "40.90.136.16/28", + "40.90.136.32/27", + "40.90.136.160/28", + "40.90.136.176/28", + "40.90.136.224/27", + "40.90.137.96/27", + "40.90.137.192/27", + "40.90.137.224/27", + "40.90.138.0/27", + "40.90.138.160/27", + "40.90.138.208/28", + "40.90.139.32/27", + "40.90.139.192/27", + "40.90.139.224/27", + "40.90.140.64/27", + "40.90.140.96/27", + "40.90.140.128/27", + "40.90.140.160/27", + "40.90.140.192/27", + "40.90.140.224/27", + "40.90.141.0/27", + "40.90.141.32/27", + "40.90.141.96/27", + "40.90.141.128/27", + "40.90.141.160/27", + "40.90.142.128/27", + "40.90.142.224/28", + "40.90.142.240/28", + "40.90.143.0/27", + "40.90.143.192/26", + "40.90.144.0/27", + "40.90.144.32/27", + "40.90.144.64/26", + "40.90.144.128/26", + "40.90.144.192/27", + "40.90.145.0/27", + "40.90.145.32/27", + "40.90.145.64/27", + "40.90.145.160/27", + "40.90.145.192/27", + "40.90.145.224/27", + "40.90.146.0/28", + "40.90.146.16/28", + "40.90.146.32/27", + "40.90.146.64/26", + "40.90.146.128/27", + "40.90.147.0/27", + "40.90.147.96/27", + "40.90.148.0/26", + "40.90.148.64/27", + "40.90.148.96/27", + "40.90.148.128/27", + "40.90.148.160/28", + "40.90.148.176/28", + "40.90.148.192/27", + "40.90.149.96/27", + "40.90.149.128/25", + "40.90.150.32/27", + "40.90.150.128/25", + "40.90.151.144/28", + "40.90.152.160/27", + "40.90.153.0/26", + "40.90.153.96/27", + "40.90.153.128/25", + "40.90.154.64/26", + "40.90.155.0/26", + "40.90.155.128/26", + "40.90.155.192/26", + "40.90.156.128/26", + "40.90.156.192/26", + "40.90.157.64/26", + "40.90.157.128/26", + "40.90.158.64/26", + "40.90.158.128/25", + "40.90.159.0/24", + "40.90.192.0/19", + "40.90.224.0/19", + "40.91.0.0/22", + "40.91.4.0/22", + "40.91.12.16/28", + "40.91.12.48/28", + "40.91.12.64/26", + "40.91.12.128/28", + "40.91.12.160/27", + "40.91.12.208/28", + "40.91.12.240/28", + "40.91.13.64/27", + "40.91.13.96/28", + "40.91.13.128/27", + "40.91.13.240/28", + "40.91.14.0/24", + "40.91.16.0/22", + "40.91.20.0/22", + "40.91.24.0/22", + "40.91.28.0/22", + "40.91.32.0/22", + "40.91.64.0/18", + "40.91.160.0/19", + "40.91.192.0/18", + "40.93.0.0/23", + "40.93.2.0/24", + "40.93.3.0/24", + "40.93.4.0/24", + "40.93.5.0/24", + "40.93.7.0/24", + "40.93.8.0/24", + "40.93.9.0/24", + "40.93.10.0/24", + "40.93.11.0/24", + "40.93.12.0/24", + "40.93.13.0/24", + "40.93.14.0/24", + "40.93.20.0/24", + "40.93.64.0/24", + "40.93.65.0/24", + "40.93.192.0/24", + "40.93.193.0/24", + "40.93.194.0/23", + "40.93.196.0/23", + "40.96.50.0/24", + "40.96.61.0/24", + "40.96.63.0/24", + "40.97.4.0/24", + "40.97.5.0/24", + "40.97.6.0/24", + "40.97.7.0/24", + "40.97.12.0/24", + "40.97.14.0/26", + "40.97.20.0/24", + "40.97.22.0/23", + "40.97.32.0/22", + "40.97.44.0/24", + "40.97.45.0/26", + "40.97.45.64/26", + "40.97.45.128/25", + "40.97.46.0/25", + "40.97.46.128/26", + "40.97.46.192/26", + "40.97.47.0/25", + "40.97.47.128/25", + "40.97.52.0/26", + "40.97.53.0/25", + "40.97.53.128/26", + "40.97.53.192/26", + "40.97.54.0/25", + "40.97.55.64/26", + "40.97.55.128/25", + "40.97.63.128/25", + "40.97.72.0/26", + "40.101.2.0/25", + "40.101.2.128/26", + "40.101.2.192/26", + "40.101.3.0/25", + "40.101.20.64/26", + "40.101.20.128/25", + "40.101.21.0/25", + "40.101.21.128/26", + "40.112.36.0/25", + "40.112.36.128/25", + "40.112.37.0/26", + "40.112.37.64/26", + "40.112.38.192/26", + "40.112.48.0/20", + "40.112.64.0/19", + "40.112.96.0/19", + "40.112.128.0/17", + "40.113.0.0/18", + "40.113.64.0/19", + "40.113.96.0/19", + "40.113.128.0/18", + "40.113.192.0/18", + "40.114.0.0/17", + "40.114.128.0/17", + "40.115.0.0/18", + "40.115.96.0/19", + "40.116.0.0/16", + "40.117.32.0/19", + "40.117.64.0/18", + "40.117.128.0/17", + "40.118.0.0/17", + "40.118.128.0/17", + "40.119.0.0/18", + "40.119.88.0/22", + "40.119.128.0/19", + "40.120.148.0/25", + "40.120.148.128/26", + "40.120.148.192/27", + "40.120.148.224/28", + "40.120.152.0/26", + "40.120.152.64/31", + "40.120.156.0/28", + "40.120.156.16/29", + "40.120.156.24/30", + "40.120.156.28/31", + "40.120.156.40/31", + "40.120.156.56/30", + "40.120.156.72/29", + "40.120.156.80/30", + "40.120.160.0/22", + "40.120.164.2/31", + "40.120.164.4/30", + "40.120.164.8/29", + "40.120.164.16/29", + "40.120.164.24/30", + "40.120.164.36/30", + "40.120.164.40/29", + "40.120.164.48/29", + "40.120.164.56/31", + "40.120.164.66/31", + "40.120.164.68/30", + "40.120.164.72/30", + "40.120.164.76/31", + "40.120.164.80/28", + "40.120.164.100/30", + "40.120.164.104/29", + "40.120.164.112/31", + "40.120.164.118/31", + "40.120.164.120/29", + "40.120.164.128/27", + "40.120.164.160/28", + "40.120.164.176/31", + "40.121.0.0/16", + "40.122.16.0/20", + "40.122.32.0/19", + "40.122.64.0/18", + "40.122.128.0/17", + "40.123.0.0/17", + "40.123.132.0/22", + "40.123.140.0/22", + "40.123.144.0/26", + "40.123.144.64/29", + "40.123.144.104/29", + "40.123.144.112/28", + "40.123.144.128/28", + "40.123.144.144/29", + "40.123.144.156/30", + "40.123.144.160/27", + "40.123.144.192/27", + "40.123.144.224/28", + "40.123.144.240/29", + "40.123.144.248/30", + "40.123.144.252/31", + "40.123.145.6/31", + "40.123.145.8/30", + "40.123.145.12/31", + "40.123.145.22/31", + "40.123.145.24/29", + "40.123.145.32/28", + "40.123.145.48/29", + "40.123.145.56/30", + "40.123.145.68/30", + "40.123.145.72/29", + "40.123.145.80/28", + "40.123.145.96/27", + "40.123.145.128/27", + "40.123.145.160/30", + "40.123.145.166/31", + "40.123.145.168/29", + "40.123.145.176/28", + "40.123.145.192/28", + "40.123.145.208/30", + "40.123.145.212/31", + "40.123.145.222/31", + "40.123.145.224/27", + "40.123.146.0/28", + "40.123.146.16/29", + "40.123.146.24/30", + "40.123.146.28/31", + "40.123.146.42/31", + "40.123.146.44/30", + "40.123.146.48/31", + "40.123.146.54/31", + "40.123.146.56/29", + "40.123.146.64/26", + "40.123.146.128/27", + "40.123.146.160/30", + "40.123.146.164/31", + "40.123.146.182/31", + "40.123.146.184/29", + "40.123.146.192/29", + "40.123.146.200/30", + "40.123.146.204/31", + "40.123.146.210/31", + "40.123.146.212/30", + "40.123.146.216/29", + "40.123.146.224/27", + "40.123.147.0/27", + "40.123.147.32/31", + "40.123.147.38/31", + "40.123.147.40/29", + "40.123.147.48/28", + "40.123.147.64/28", + "40.123.147.80/30", + "40.123.147.84/31", + "40.123.147.104/29", + "40.123.147.112/29", + "40.123.147.138/31", + "40.123.147.140/30", + "40.123.147.144/31", + "40.123.147.148/30", + "40.123.147.152/29", + "40.123.147.160/28", + "40.123.147.176/30", + "40.123.147.180/31", + "40.123.147.184/29", + "40.123.147.192/26", + "40.123.152.0/22", + "40.123.156.0/22", + "40.123.160.0/22", + "40.123.164.0/25", + "40.123.164.128/29", + "40.123.164.136/31", + "40.123.164.150/31", + "40.123.164.152/29", + "40.123.164.160/27", + "40.123.164.192/26", + "40.123.165.4/30", + "40.123.165.8/29", + "40.123.165.16/29", + "40.123.165.24/30", + "40.123.165.30/31", + "40.123.165.32/28", + "40.123.165.48/29", + "40.123.165.56/30", + "40.123.165.60/31", + "40.123.165.68/30", + "40.123.165.72/30", + "40.123.165.78/31", + "40.123.165.80/28", + "40.123.165.96/27", + "40.123.165.128/28", + "40.123.165.144/29", + "40.123.165.154/31", + "40.123.165.156/30", + "40.123.165.160/27", + "40.123.165.192/26", + "40.123.166.0/25", + "40.123.166.128/28", + "40.123.166.144/31", + "40.123.168.0/24", + "40.123.169.0/30", + "40.123.169.6/31", + "40.123.169.8/29", + "40.123.169.16/28", + "40.123.169.32/27", + "40.123.169.64/27", + "40.123.169.96/29", + "40.123.169.104/31", + "40.123.169.108/30", + "40.123.169.112/28", + "40.123.169.140/30", + "40.123.169.144/28", + "40.123.169.160/27", + "40.123.169.192/26", + "40.123.170.0/29", + "40.123.170.8/30", + "40.123.170.12/31", + "40.123.170.22/31", + "40.123.170.24/29", + "40.123.170.32/28", + "40.123.170.52/30", + "40.123.170.86/31", + "40.123.170.88/29", + "40.123.170.96/29", + "40.123.170.104/30", + "40.123.170.108/31", + "40.123.170.116/30", + "40.123.170.120/29", + "40.123.170.130/31", + "40.123.170.132/30", + "40.123.170.136/29", + "40.123.170.144/28", + "40.123.170.160/28", + "40.123.170.176/29", + "40.123.170.184/31", + "40.123.170.192/31", + "40.123.170.196/30", + "40.123.170.200/29", + "40.123.170.208/29", + "40.123.170.216/30", + "40.123.170.220/31", + "40.123.170.224/27", + "40.123.171.0/24", + "40.123.176.0/22", + "40.123.180.0/22", + "40.123.184.0/26", + "40.123.184.64/28", + "40.123.184.80/29", + "40.123.184.88/31", + "40.123.184.98/31", + "40.123.184.100/30", + "40.123.184.104/29", + "40.123.184.112/28", + "40.123.184.128/27", + "40.123.184.168/29", + "40.123.184.176/29", + "40.123.184.184/31", + "40.123.184.194/31", + "40.123.184.196/30", + "40.123.184.200/30", + "40.123.184.204/31", + "40.123.184.208/29", + "40.123.184.230/31", + "40.123.184.232/29", + "40.123.185.8/29", + "40.123.185.16/28", + "40.123.185.32/27", + "40.123.185.64/30", + "40.123.185.100/30", + "40.123.185.104/30", + "40.123.185.110/31", + "40.123.185.112/28", + "40.123.185.128/27", + "40.123.185.192/27", + "40.123.185.224/28", + "40.123.185.240/29", + "40.123.185.250/31", + "40.123.185.254/31", + "40.123.186.0/29", + "40.123.186.8/31", + "40.123.186.28/31", + "40.123.186.42/31", + "40.123.186.44/30", + "40.123.186.48/31", + "40.123.186.52/31", + "40.123.186.56/29", + "40.123.186.64/26", + "40.123.186.128/25", + "40.123.187.0/25", + "40.123.187.128/27", + "40.123.187.160/31", + "40.123.187.170/31", + "40.123.187.172/30", + "40.123.187.176/29", + "40.123.187.188/30", + "40.123.187.192/29", + "40.123.187.200/31", + "40.123.187.204/30", + "40.123.187.208/28", + "40.123.187.226/31", + "40.123.187.228/30", + "40.123.187.232/29", + "40.123.187.244/30", + "40.123.187.248/29", + "40.124.0.0/16", + "40.125.32.0/19", + "40.125.64.0/18", + "40.126.0.0/24", + "40.126.1.0/24", + "40.126.2.0/24", + "40.126.3.0/24", + "40.126.4.0/24", + "40.126.5.0/24", + "40.126.6.0/24", + "40.126.7.0/24", + "40.126.9.0/24", + "40.126.23.0/24", + "40.126.24.0/24", + "40.126.25.0/24", + "40.126.26.0/24", + "40.126.27.0/24", + "40.126.28.0/24", + "40.126.29.0/24", + "40.126.31.0/24", + "40.126.32.0/24", + "40.126.62.128/25", + "40.126.202.0/24", + "40.127.96.0/20", + "40.127.128.0/17", + "51.8.0.0/17", + "51.104.64.0/18", + "51.104.128.0/18", + "51.105.96.0/19", + "51.105.128.0/17", + "51.124.0.0/16", + "51.136.0.0/16", + "51.137.0.0/17", + "51.137.192.0/18", + "51.138.0.0/17", + "51.138.176.0/20", + "51.138.224.0/20", + "51.141.160.0/19", + "51.143.0.0/17", + "51.144.0.0/16", + "51.145.128.0/17", + "52.96.11.0/24", + "52.101.0.0/22", + "52.101.4.0/22", + "52.101.8.0/24", + "52.101.9.0/24", + "52.101.10.0/24", + "52.101.11.0/24", + "52.101.12.0/22", + "52.101.16.0/22", + "52.101.20.0/22", + "52.101.28.0/22", + "52.101.32.0/22", + "52.101.36.0/22", + "52.101.41.0/24", + "52.101.42.0/24", + "52.101.43.0/24", + "52.101.44.0/23", + "52.101.46.0/23", + "52.101.48.0/23", + "52.101.50.0/24", + "52.101.51.0/24", + "52.101.52.0/22", + "52.101.56.0/22", + "52.101.60.0/24", + "52.101.61.0/24", + "52.101.62.0/23", + "52.101.64.0/24", + "52.101.65.0/24", + "52.101.66.0/23", + "52.101.68.0/24", + "52.101.69.0/24", + "52.101.70.0/23", + "52.101.72.0/23", + "52.101.84.0/24", + "52.101.85.0/24", + "52.101.86.0/23", + "52.101.193.0/24", + "52.101.194.0/24", + "52.102.128.0/24", + "52.102.129.0/24", + "52.102.130.0/24", + "52.102.131.0/24", + "52.102.132.0/24", + "52.102.134.0/24", + "52.102.135.0/24", + "52.102.136.0/24", + "52.102.137.0/24", + "52.102.138.0/24", + "52.102.139.0/24", + "52.102.140.0/24", + "52.102.146.0/24", + "52.102.158.0/24", + "52.102.159.0/24", + "52.102.160.0/24", + "52.102.161.0/24", + "52.103.0.0/24", + "52.103.1.0/24", + "52.103.2.0/24", + "52.103.3.0/24", + "52.103.4.0/24", + "52.103.5.0/24", + "52.103.6.0/24", + "52.103.8.0/24", + "52.103.9.0/24", + "52.103.10.0/24", + "52.103.11.0/24", + "52.103.12.0/24", + "52.103.13.0/24", + "52.103.14.0/24", + "52.103.20.0/24", + "52.103.32.0/24", + "52.103.33.0/24", + "52.103.128.0/24", + "52.103.129.0/24", + "52.103.130.0/24", + "52.103.131.0/24", + "52.103.132.0/24", + "52.103.134.0/24", + "52.103.136.0/24", + "52.103.137.0/24", + "52.103.138.0/24", + "52.103.139.0/24", + "52.103.140.0/24", + "52.103.145.0/24", + "52.103.160.0/24", + "52.103.161.0/24", + "52.106.0.0/24", + "52.106.2.0/24", + "52.106.3.0/24", + "52.106.4.0/24", + "52.106.5.0/24", + "52.106.7.0/24", + "52.106.8.0/24", + "52.106.9.0/24", + "52.108.0.0/21", + "52.108.16.0/21", + "52.108.24.0/21", + "52.108.56.0/21", + "52.108.72.0/24", + "52.108.78.0/24", + "52.108.79.0/24", + "52.108.80.0/24", + "52.108.93.0/24", + "52.108.102.0/23", + "52.108.104.0/24", + "52.108.105.0/24", + "52.108.106.0/23", + "52.108.108.0/23", + "52.108.110.0/24", + "52.108.139.0/24", + "52.108.165.0/24", + "52.108.166.0/23", + "52.108.174.0/23", + "52.108.176.0/24", + "52.108.182.0/24", + "52.108.185.0/24", + "52.108.186.0/24", + "52.108.196.0/24", + "52.108.197.0/24", + "52.108.203.0/24", + "52.108.208.0/21", + "52.108.216.0/22", + "52.108.240.0/21", + "52.108.248.0/21", + "52.109.0.0/22", + "52.109.4.0/22", + "52.109.8.0/22", + "52.109.12.0/22", + "52.109.16.0/22", + "52.109.20.0/22", + "52.109.24.0/22", + "52.109.76.0/22", + "52.109.88.0/22", + "52.111.211.0/24", + "52.111.227.0/24", + "52.111.229.0/24", + "52.111.230.0/24", + "52.111.235.0/24", + "52.111.236.0/24", + "52.111.239.0/24", + "52.111.243.0/24", + "52.111.245.0/24", + "52.111.246.0/24", + "52.112.14.0/23", + "52.112.17.0/24", + "52.112.18.0/23", + "52.112.22.0/24", + "52.112.23.0/24", + "52.112.24.0/21", + "52.112.38.0/24", + "52.112.39.0/24", + "52.112.53.0/24", + "52.112.72.0/24", + "52.112.76.0/22", + "52.112.83.0/24", + "52.112.84.0/23", + "52.112.86.0/23", + "52.112.92.0/24", + "52.112.94.0/24", + "52.112.95.0/24", + "52.112.97.0/24", + "52.112.98.0/23", + "52.112.101.0/24", + "52.112.102.0/24", + "52.112.104.0/24", + "52.112.105.0/24", + "52.112.106.0/23", + "52.112.108.0/24", + "52.112.109.0/24", + "52.112.110.0/24", + "52.112.112.0/24", + "52.112.113.0/24", + "52.112.114.0/24", + "52.112.115.0/24", + "52.112.116.0/24", + "52.112.117.0/24", + "52.112.123.0/24", + "52.112.124.0/24", + "52.112.127.0/24", + "52.112.144.0/20", + "52.112.191.0/24", + "52.112.197.0/24", + "52.112.216.0/21", + "52.112.228.128/25", + "52.112.229.0/24", + "52.112.232.0/24", + "52.112.233.0/24", + "52.112.236.0/24", + "52.112.237.0/24", + "52.112.238.0/24", + "52.113.9.0/24", + "52.113.12.0/24", + "52.113.16.0/20", + "52.113.37.0/24", + "52.113.38.0/23", + "52.113.40.0/21", + "52.113.48.0/20", + "52.113.69.0/24", + "52.113.83.0/24", + "52.113.85.0/24", + "52.113.86.0/24", + "52.113.112.0/20", + "52.113.129.0/24", + "52.113.130.0/24", + "52.113.135.0/24", + "52.113.136.0/21", + "52.113.144.0/21", + "52.113.160.0/19", + "52.113.198.0/24", + "52.113.199.0/24", + "52.113.205.0/24", + "52.113.206.0/24", + "52.113.208.0/20", + "52.114.72.0/22", + "52.114.76.0/22", + "52.114.128.0/22", + "52.114.132.0/22", + "52.114.136.0/21", + "52.114.144.0/22", + "52.114.148.0/22", + "52.114.152.0/21", + "52.114.168.0/22", + "52.114.172.0/22", + "52.114.180.0/22", + "52.114.184.0/23", + "52.114.186.0/23", + "52.114.206.0/23", + "52.114.208.0/24", + "52.114.210.0/23", + "52.114.212.0/23", + "52.114.231.0/24", + "52.114.233.0/24", + "52.114.241.0/24", + "52.114.242.0/24", + "52.114.248.0/22", + "52.114.252.0/22", + "52.115.54.0/24", + "52.115.55.0/24", + "52.115.62.0/23", + "52.115.68.0/22", + "52.115.76.0/22", + "52.115.84.0/22", + "52.115.88.0/22", + "52.115.92.0/24", + "52.115.93.0/24", + "52.115.140.0/22", + "52.115.144.0/20", + "52.115.160.0/19", + "52.115.192.0/19", + "52.115.224.0/23", + "52.115.226.0/23", + "52.115.228.0/23", + "52.115.230.0/24", + "52.115.231.0/24", + "52.115.232.0/24", + "52.115.233.0/24", + "52.115.234.0/24", + "52.115.242.0/23", + "52.120.0.0/19", + "52.120.32.0/19", + "52.120.64.0/19", + "52.120.96.0/19", + "52.120.128.0/21", + "52.120.136.0/21", + "52.120.152.0/22", + "52.120.192.0/20", + "52.120.208.0/20", + "52.120.224.0/20", + "52.121.0.0/21", + "52.121.16.0/21", + "52.121.24.0/21", + "52.121.32.0/22", + "52.121.36.0/22", + "52.121.48.0/20", + "52.121.64.0/20", + "52.121.166.0/24", + "52.122.0.0/24", + "52.122.1.0/24", + "52.122.2.0/23", + "52.122.4.0/23", + "52.122.6.0/24", + "52.122.7.0/24", + "52.122.8.0/22", + "52.122.12.0/22", + "52.122.16.0/22", + "52.122.20.0/22", + "52.122.24.0/22", + "52.122.56.0/21", + "52.122.64.0/21", + "52.122.72.0/21", + "52.122.80.0/20", + "52.122.96.0/20", + "52.122.112.0/21", + "52.122.148.0/22", + "52.122.152.0/21", + "52.122.160.0/22", + "52.122.164.0/22", + "52.122.168.0/21", + "52.122.176.0/22", + "52.122.180.0/22", + "52.122.184.0/21", + "52.122.192.0/22", + "52.123.0.0/24", + "52.123.1.0/24", + "52.123.2.0/24", + "52.123.3.0/24", + "52.123.4.0/24", + "52.123.5.0/24", + "52.123.6.0/24", + "52.123.7.0/24", + "52.123.10.0/24", + "52.123.11.0/24", + "52.123.12.0/24", + "52.123.13.0/24", + "52.123.16.0/24", + "52.123.17.0/24", + "52.123.18.0/24", + "52.123.19.0/24", + "52.123.133.0/24", + "52.123.134.0/23", + "52.123.136.0/22", + "52.123.140.0/24", + "52.123.185.0/24", + "52.123.186.0/24", + "52.123.187.0/24", + "52.123.188.0/24", + "52.123.189.0/24", + "52.123.190.0/23", + "52.123.195.0/24", + "52.125.128.0/22", + "52.125.132.0/22", + "52.125.136.0/24", + "52.125.137.0/24", + "52.125.138.0/23", + "52.125.140.0/23", + "52.136.0.0/22", + "52.136.29.0/24", + "52.136.30.0/24", + "52.136.64.0/18", + "52.136.192.0/18", + "52.137.0.0/18", + "52.137.64.0/18", + "52.137.128.0/17", + "52.138.80.0/21", + "52.138.96.0/19", + "52.138.128.0/17", + "52.141.64.0/18", + "52.141.128.0/18", + "52.141.192.0/19", + "52.141.240.0/20", + "52.142.0.0/18", + "52.142.64.0/18", + "52.142.192.0/18", + "52.143.0.0/18", + "52.143.64.0/18", + "52.143.192.0/24", + "52.143.193.0/24", + "52.143.194.0/24", + "52.143.195.0/24", + "52.143.197.0/24", + "52.143.207.0/24", + "52.143.208.0/24", + "52.143.209.0/24", + "52.143.211.0/24", + "52.143.224.0/19", + "52.146.0.0/17", + "52.146.128.0/17", + "52.147.160.0/19", + "52.147.192.0/18", + "52.148.128.0/18", + "52.148.192.0/18", + "52.149.0.0/18", + "52.149.64.0/18", + "52.149.128.0/17", + "52.150.0.0/17", + "52.151.0.0/18", + "52.151.128.0/17", + "52.152.0.0/17", + "52.152.128.0/17", + "52.153.0.0/18", + "52.153.64.0/18", + "52.153.192.0/18", + "52.154.0.0/18", + "52.154.64.0/18", + "52.154.128.0/17", + "52.155.32.0/19", + "52.155.64.0/19", + "52.155.128.0/17", + "52.156.64.0/18", + "52.156.128.0/19", + "52.156.192.0/18", + "52.157.0.0/18", + "52.157.64.0/18", + "52.157.128.0/17", + "52.158.0.0/17", + "52.158.160.0/20", + "52.158.192.0/19", + "52.158.224.0/19", + "52.159.64.0/18", + "52.159.128.0/17", + "52.160.0.0/16", + "52.162.0.0/16", + "52.164.0.0/16", + "52.165.0.0/19", + "52.165.32.0/20", + "52.165.48.0/28", + "52.165.49.0/24", + "52.165.56.0/21", + "52.165.64.0/19", + "52.165.96.0/21", + "52.165.104.0/25", + "52.165.128.0/17", + "52.166.0.0/16", + "52.167.0.0/16", + "52.168.0.0/16", + "52.169.0.0/16", + "52.170.0.0/16", + "52.171.0.0/16", + "52.173.0.0/16", + "52.174.0.0/16", + "52.175.192.0/18", + "52.176.0.0/17", + "52.176.128.0/19", + "52.176.160.0/21", + "52.176.176.0/20", + "52.176.192.0/19", + "52.176.224.0/24", + "52.177.0.0/16", + "52.178.0.0/17", + "52.178.128.0/17", + "52.179.0.0/17", + "52.179.128.0/17", + "52.180.0.0/17", + "52.180.128.0/19", + "52.180.184.0/27", + "52.180.184.32/28", + "52.180.185.0/24", + "52.182.128.0/17", + "52.183.0.0/17", + "52.183.192.0/18", + "52.184.128.0/19", + "52.184.160.0/21", + "52.184.168.0/28", + "52.184.168.80/28", + "52.184.168.96/27", + "52.184.168.128/28", + "52.184.169.0/24", + "52.184.170.0/24", + "52.184.176.0/20", + "52.184.192.0/18", + "52.185.0.0/19", + "52.185.32.0/20", + "52.185.48.0/21", + "52.185.56.0/26", + "52.185.56.64/27", + "52.185.56.96/28", + "52.185.56.128/27", + "52.185.56.160/28", + "52.185.64.0/19", + "52.185.96.0/20", + "52.185.112.0/26", + "52.185.112.96/27", + "52.185.120.0/21", + "52.185.192.0/18", + "52.186.0.0/16", + "52.188.0.0/16", + "52.189.0.0/17", + "52.189.128.0/18", + "52.190.0.0/17", + "52.190.128.0/17", + "52.191.0.0/17", + "52.191.128.0/18", + "52.191.192.0/18", + "52.224.0.0/16", + "52.225.0.0/17", + "52.225.128.0/21", + "52.225.136.0/27", + "52.225.136.32/28", + "52.225.136.64/28", + "52.225.137.0/24", + "52.225.192.0/18", + "52.226.0.0/16", + "52.228.128.0/17", + "52.229.0.0/18", + "52.230.128.0/17", + "52.232.0.0/17", + "52.232.146.0/24", + "52.232.147.0/24", + "52.232.148.0/24", + "52.232.149.0/24", + "52.232.151.0/24", + "52.232.152.0/24", + "52.232.156.0/24", + "52.232.157.0/24", + "52.232.159.0/24", + "52.232.160.0/19", + "52.232.192.0/18", + "52.233.64.0/18", + "52.233.128.0/17", + "52.234.0.0/17", + "52.234.128.0/17", + "52.235.64.0/18", + "52.236.0.0/17", + "52.236.128.0/17", + "52.237.128.0/18", + "52.238.0.0/18", + "52.238.192.0/18", + "52.239.0.0/17", + "52.239.136.0/22", + "52.239.140.0/22", + "52.239.148.32/27", + "52.239.148.128/25", + "52.239.149.0/24", + "52.239.150.0/23", + "52.239.152.0/22", + "52.239.156.0/24", + "52.239.157.0/25", + "52.239.157.128/26", + "52.239.157.192/27", + "52.239.158.0/23", + "52.239.160.0/22", + "52.239.165.64/26", + "52.239.165.128/27", + "52.239.168.0/22", + "52.239.172.0/22", + "52.239.176.128/25", + "52.239.177.32/27", + "52.239.177.64/26", + "52.239.177.128/25", + "52.239.178.0/23", + "52.239.180.0/22", + "52.239.184.0/25", + "52.239.184.160/28", + "52.239.184.192/27", + "52.239.185.32/27", + "52.239.186.0/24", + "52.239.192.0/26", + "52.239.192.64/28", + "52.239.192.96/27", + "52.239.192.160/27", + "52.239.192.192/26", + "52.239.193.0/24", + "52.239.195.0/24", + "52.239.198.0/25", + "52.239.198.192/26", + "52.239.199.0/24", + "52.239.200.0/23", + "52.239.203.0/24", + "52.239.205.0/24", + "52.239.206.0/24", + "52.239.207.32/28", + "52.239.207.64/26", + "52.239.207.128/27", + "52.239.207.192/26", + "52.239.208.0/23", + "52.239.210.0/23", + "52.239.212.0/23", + "52.239.214.0/23", + "52.239.220.0/23", + "52.239.222.0/23", + "52.239.228.0/23", + "52.239.234.0/23", + "52.239.236.0/23", + "52.239.242.0/23", + "52.239.246.0/23", + "52.239.248.0/24", + "52.239.252.0/24", + "52.239.253.0/24", + "52.239.254.0/23", + "52.240.0.0/17", + "52.240.128.0/17", + "52.241.0.0/16", + "52.242.64.0/18", + "52.242.128.0/17", + "52.245.8.0/22", + "52.245.12.0/22", + "52.245.24.0/22", + "52.245.40.0/22", + "52.245.44.0/24", + "52.245.45.0/25", + "52.245.45.128/28", + "52.245.45.160/27", + "52.245.45.192/26", + "52.245.46.0/27", + "52.245.46.48/28", + "52.245.46.64/28", + "52.245.46.112/28", + "52.245.46.128/28", + "52.245.46.160/27", + "52.245.46.192/26", + "52.245.48.0/22", + "52.245.52.0/22", + "52.245.68.0/24", + "52.245.69.32/27", + "52.245.69.64/27", + "52.245.69.96/28", + "52.245.69.144/28", + "52.245.69.160/27", + "52.245.69.192/26", + "52.245.70.0/23", + "52.245.72.0/22", + "52.245.88.0/22", + "52.245.104.0/22", + "52.245.108.0/22", + "52.245.124.0/22", + "52.246.0.0/17", + "52.246.192.0/18", + "52.247.0.0/17", + "52.247.192.0/18", + "52.248.0.0/17", + "52.248.128.0/17", + "52.249.0.0/18", + "52.249.128.0/17", + "52.250.0.0/17", + "52.250.128.0/18", + "52.250.192.0/18", + "52.251.0.0/17", + "52.252.0.0/17", + "52.252.128.0/17", + "52.253.0.0/18", + "52.253.64.0/20", + "52.253.148.0/23", + "52.253.154.0/23", + "52.253.160.0/24", + "52.253.179.0/24", + "52.253.180.0/24", + "52.253.182.0/23", + "52.253.184.0/24", + "52.254.0.0/18", + "52.254.64.0/19", + "52.254.96.0/20", + "52.254.112.0/21", + "52.254.128.0/17", + "52.255.0.0/19", + "52.255.64.0/18", + "52.255.128.0/17", + "57.150.0.0/23", + "57.150.2.0/23", + "57.150.4.0/23", + "57.150.8.0/26", + "57.150.8.64/27", + "57.150.8.96/28", + "57.150.8.112/28", + "57.150.8.128/25", + "57.150.9.0/24", + "57.150.10.0/26", + "57.150.10.64/28", + "57.150.10.80/28", + "57.150.10.96/27", + "57.150.10.128/25", + "57.150.11.0/26", + "57.150.11.64/27", + "57.150.11.96/28", + "57.150.11.112/28", + "57.150.11.128/25", + "57.150.12.0/25", + "57.150.12.128/28", + "57.150.13.128/27", + "57.150.13.160/28", + "57.150.13.176/28", + "57.150.13.192/26", + "57.150.14.0/23", + "57.150.16.0/25", + "57.150.16.128/25", + "57.150.18.0/26", + "57.150.18.64/28", + "57.150.18.80/28", + "57.150.18.96/27", + "57.150.18.128/26", + "57.150.18.192/27", + "57.150.18.224/28", + "57.150.18.240/28", + "57.150.19.0/26", + "57.150.19.64/28", + "57.150.19.80/28", + "57.150.19.96/27", + "57.150.19.128/27", + "57.150.19.160/28", + "57.150.20.0/28", + "57.150.20.16/28", + "57.150.20.32/27", + "57.150.20.64/26", + "57.150.20.128/25", + "57.150.26.0/23", + "57.150.28.0/23", + "57.150.30.0/23", + "57.150.32.0/23", + "57.150.38.0/23", + "57.150.42.0/23", + "57.150.48.0/23", + "57.150.52.0/23", + "57.150.56.0/23", + "57.150.60.0/23", + "57.150.62.0/23", + "57.150.66.0/23", + "57.150.68.0/23", + "57.150.70.0/23", + "57.150.72.0/23", + "57.150.74.0/23", + "57.150.78.0/23", + "57.150.80.0/23", + "57.150.82.0/23", + "57.150.84.0/24", + "57.150.86.0/23", + "57.151.0.0/17", + "65.52.0.0/19", + "65.52.32.0/21", + "65.52.48.0/20", + "65.52.64.0/20", + "65.52.104.0/24", + "65.52.106.0/24", + "65.52.108.0/23", + "65.52.110.0/24", + "65.52.111.0/24", + "65.52.112.0/20", + "65.52.128.0/19", + "65.52.192.0/19", + "65.52.224.0/21", + "65.52.232.0/21", + "65.52.240.0/21", + "65.54.19.128/27", + "65.55.32.128/28", + "65.55.32.192/27", + "65.55.32.224/28", + "65.55.33.176/28", + "65.55.33.192/28", + "65.55.35.192/27", + "65.55.44.8/29", + "65.55.44.16/28", + "65.55.44.32/27", + "65.55.44.64/27", + "65.55.44.96/28", + "65.55.44.112/28", + "65.55.44.128/27", + "65.55.51.0/24", + "65.55.60.176/29", + "65.55.60.188/30", + "65.55.105.0/26", + "65.55.105.96/27", + "65.55.105.160/27", + "65.55.105.192/27", + "65.55.105.224/27", + "65.55.106.0/26", + "65.55.106.64/27", + "65.55.106.128/26", + "65.55.106.192/28", + "65.55.106.208/28", + "65.55.106.224/28", + "65.55.106.240/28", + "65.55.107.0/28", + "65.55.107.48/28", + "65.55.107.64/27", + "65.55.107.96/27", + "65.55.108.0/24", + "65.55.109.0/24", + "65.55.110.0/24", + "65.55.120.0/24", + "65.55.144.0/23", + "65.55.146.0/24", + "65.55.207.0/24", + "65.55.209.0/25", + "65.55.209.128/26", + "65.55.210.0/24", + "65.55.211.0/27", + "65.55.211.32/27", + "65.55.212.0/27", + "65.55.212.128/25", + "65.55.213.0/27", + "65.55.213.64/26", + "65.55.213.128/26", + "65.55.217.0/24", + "65.55.218.0/24", + "65.55.219.0/27", + "65.55.219.32/27", + "65.55.219.64/26", + "65.55.219.128/25", + "65.55.250.0/24", + "65.55.252.0/24", + "68.154.0.0/17", + "68.219.0.0/17", + "68.219.128.0/19", + "68.219.160.0/19", + "68.219.192.0/18", + "68.220.0.0/19", + "68.220.32.0/19", + "68.220.88.0/21", + "68.220.128.0/17", + "70.37.0.0/21", + "70.37.8.0/22", + "70.37.16.0/20", + "70.37.32.0/20", + "70.37.48.0/20", + "70.37.64.0/18", + "70.37.160.0/21", + "70.152.7.0/24", + "70.152.8.0/24", + "70.152.9.0/24", + "70.152.18.0/24", + "70.152.19.0/24", + "70.152.24.0/24", + "70.152.36.0/24", + "70.152.38.0/24", + "70.152.39.0/24", + "70.152.40.0/24", + "74.234.0.0/17", + "74.234.128.0/17", + "74.235.0.0/16", + "74.249.0.0/17", + "74.249.128.0/17", + "94.245.88.0/21", + "94.245.104.0/21", + "94.245.117.96/27", + "94.245.118.0/27", + "94.245.120.128/28", + "94.245.122.0/24", + "94.245.123.144/28", + "94.245.123.176/28", + "98.64.0.0/16", + "98.71.0.0/17", + "98.71.128.0/17", + "104.40.0.0/17", + "104.40.128.0/17", + "104.41.64.0/18", + "104.41.128.0/19", + "104.41.192.0/18", + "104.42.0.0/16", + "104.43.128.0/17", + "104.44.88.0/27", + "104.44.88.32/27", + "104.44.88.64/27", + "104.44.88.96/27", + "104.44.88.128/27", + "104.44.88.160/27", + "104.44.89.0/27", + "104.44.89.64/27", + "104.44.89.128/27", + "104.44.89.160/27", + "104.44.89.192/27", + "104.44.90.192/27", + "104.44.91.0/27", + "104.44.91.32/27", + "104.44.91.64/27", + "104.44.91.96/27", + "104.44.91.128/27", + "104.44.91.160/27", + "104.44.92.64/27", + "104.44.92.96/27", + "104.44.92.192/27", + "104.44.92.224/27", + "104.44.93.0/27", + "104.44.93.160/27", + "104.44.93.192/27", + "104.44.94.0/28", + "104.44.94.16/28", + "104.44.94.32/28", + "104.44.94.48/28", + "104.44.94.64/28", + "104.44.94.80/28", + "104.44.94.160/27", + "104.44.95.0/28", + "104.44.95.80/28", + "104.44.95.96/28", + "104.44.95.128/27", + "104.44.95.160/27", + "104.44.95.240/28", + "104.44.128.0/18", + "104.45.0.0/18", + "104.45.64.0/20", + "104.45.80.0/20", + "104.45.96.0/19", + "104.45.128.0/18", + "104.45.192.0/20", + "104.45.208.0/20", + "104.45.224.0/19", + "104.46.0.0/21", + "104.46.8.0/21", + "104.46.32.0/19", + "104.46.64.0/19", + "104.46.96.0/19", + "104.46.192.0/20", + "104.47.128.0/18", + "104.47.200.0/21", + "104.47.208.0/23", + "104.47.216.64/26", + "104.47.218.0/23", + "104.47.220.0/22", + "104.208.0.0/19", + "104.208.32.0/20", + "104.208.128.0/17", + "104.209.0.0/18", + "104.209.128.0/17", + "104.210.0.0/20", + "104.210.32.0/19", + "104.210.128.0/19", + "104.210.176.0/20", + "104.210.192.0/19", + "104.211.0.0/18", + "104.214.0.0/17", + "104.214.192.0/18", + "104.215.64.0/18", + "108.141.0.0/16", + "108.142.0.0/15", + "131.253.12.16/28", + "131.253.12.40/29", + "131.253.12.48/29", + "131.253.12.160/28", + "131.253.12.192/28", + "131.253.12.208/28", + "131.253.12.224/30", + "131.253.12.228/30", + "131.253.12.248/29", + "131.253.13.0/28", + "131.253.13.16/29", + "131.253.13.24/29", + "131.253.13.32/28", + "131.253.13.48/28", + "131.253.13.72/29", + "131.253.13.80/29", + "131.253.13.88/30", + "131.253.13.96/30", + "131.253.13.128/27", + "131.253.14.4/30", + "131.253.14.8/31", + "131.253.14.16/28", + "131.253.14.32/27", + "131.253.14.96/27", + "131.253.14.128/27", + "131.253.14.160/27", + "131.253.14.192/29", + "131.253.14.208/28", + "131.253.14.224/28", + "131.253.14.248/29", + "131.253.15.8/29", + "131.253.15.16/28", + "131.253.15.32/27", + "131.253.15.192/28", + "131.253.15.208/28", + "131.253.15.224/27", + "131.253.24.0/28", + "131.253.24.192/26", + "131.253.25.0/24", + "131.253.27.0/24", + "131.253.34.224/27", + "131.253.35.128/26", + "131.253.36.128/26", + "131.253.36.224/27", + "131.253.38.0/27", + "131.253.38.32/27", + "131.253.38.128/26", + "131.253.38.224/27", + "131.253.40.0/28", + "131.253.40.16/28", + "131.253.40.32/28", + "131.253.40.64/28", + "131.253.40.80/28", + "131.253.40.96/27", + "131.253.40.128/27", + "131.253.40.192/26", + "131.253.41.0/24", + "134.170.80.64/28", + "134.170.220.0/23", + "134.170.222.0/24", + "137.116.0.0/18", + "137.116.64.0/19", + "137.116.96.0/22", + "137.116.112.0/20", + "137.116.176.0/21", + "137.116.184.0/21", + "137.116.192.0/19", + "137.116.224.0/19", + "137.117.0.0/19", + "137.117.32.0/19", + "137.117.64.0/18", + "137.117.128.0/17", + "137.135.0.0/18", + "137.135.64.0/18", + "137.135.128.0/17", + "138.91.48.0/20", + "138.91.64.0/19", + "138.91.96.0/19", + "138.91.128.0/17", + "151.206.49.16/28", + "151.206.49.32/27", + "151.206.49.64/27", + "151.206.50.48/28", + "151.206.50.64/27", + "151.206.50.96/27", + "151.206.50.128/27", + "151.206.50.160/27", + "151.206.50.192/27", + "151.206.50.224/27", + "151.206.73.0/24", + "151.206.74.0/24", + "151.206.75.0/25", + "151.206.75.128/26", + "151.206.75.192/26", + "151.206.76.0/23", + "151.206.78.0/25", + "151.206.87.0/24", + "151.206.88.0/24", + "151.206.89.0/24", + "151.206.90.0/24", + "151.206.91.0/25", + "151.206.91.128/25", + "151.206.92.0/23", + "151.206.94.0/23", + "151.206.96.0/23", + "151.206.98.0/25", + "151.206.98.128/26", + "151.206.98.192/26", + "151.206.99.0/24", + "151.206.100.0/24", + "151.206.101.0/25", + "151.206.103.0/24", + "151.206.104.0/24", + "151.206.129.0/24", + "151.206.130.0/24", + "151.206.131.0/24", + "151.206.132.0/24", + "151.206.134.0/24", + "151.206.135.0/24", + "151.206.139.0/24", + "157.55.2.128/26", + "157.55.3.0/24", + "157.55.7.128/26", + "157.55.8.64/26", + "157.55.8.144/28", + "157.55.10.160/29", + "157.55.10.176/28", + "157.55.10.192/26", + "157.55.11.128/25", + "157.55.12.64/26", + "157.55.13.64/26", + "157.55.13.128/26", + "157.55.24.0/21", + "157.55.37.0/24", + "157.55.38.0/24", + "157.55.39.0/24", + "157.55.48.0/24", + "157.55.50.0/25", + "157.55.51.224/28", + "157.55.55.0/27", + "157.55.55.32/28", + "157.55.55.100/30", + "157.55.55.104/29", + "157.55.55.136/29", + "157.55.55.144/29", + "157.55.55.152/29", + "157.55.55.160/28", + "157.55.55.176/29", + "157.55.55.200/29", + "157.55.55.216/29", + "157.55.55.228/30", + "157.55.55.232/29", + "157.55.55.240/28", + "157.55.60.224/27", + "157.55.64.0/20", + "157.55.80.0/21", + "157.55.103.32/27", + "157.55.106.0/26", + "157.55.106.128/25", + "157.55.107.0/24", + "157.55.108.0/23", + "157.55.110.0/23", + "157.55.115.0/25", + "157.55.136.0/21", + "157.55.151.0/28", + "157.55.153.224/28", + "157.55.154.128/25", + "157.55.160.0/20", + "157.55.176.0/20", + "157.55.192.0/21", + "157.55.200.0/22", + "157.55.204.1/32", + "157.55.204.2/31", + "157.55.204.33/32", + "157.55.204.34/31", + "157.55.204.128/25", + "157.55.208.0/21", + "157.55.248.0/21", + "157.56.2.0/25", + "157.56.2.128/25", + "157.56.3.0/25", + "157.56.3.128/25", + "157.56.8.0/21", + "157.56.19.224/27", + "157.56.21.160/27", + "157.56.21.192/27", + "157.56.24.160/27", + "157.56.24.192/28", + "157.56.28.0/22", + "157.56.80.0/25", + "157.56.117.64/27", + "157.56.160.0/21", + "157.56.176.0/21", + "157.56.216.0/26", + "168.61.0.0/19", + "168.61.32.0/20", + "168.61.48.0/21", + "168.61.56.0/21", + "168.61.64.0/20", + "168.61.80.0/20", + "168.61.96.0/19", + "168.61.128.0/25", + "168.61.128.128/28", + "168.61.128.160/27", + "168.61.128.192/26", + "168.61.129.0/25", + "168.61.129.128/26", + "168.61.129.208/28", + "168.61.129.224/27", + "168.61.130.64/26", + "168.61.130.128/25", + "168.61.131.0/26", + "168.61.131.128/25", + "168.61.132.0/26", + "168.61.144.0/20", + "168.61.160.0/19", + "168.61.208.0/20", + "168.62.0.0/19", + "168.62.32.0/19", + "168.62.64.0/19", + "168.62.96.0/19", + "168.62.128.0/19", + "168.62.160.0/19", + "168.62.192.0/19", + "168.62.224.0/19", + "168.63.0.0/19", + "168.63.32.0/19", + "168.63.64.0/20", + "168.63.80.0/21", + "168.63.88.0/23", + "168.63.92.0/22", + "168.63.96.0/19", + "172.168.0.0/15", + "172.170.0.0/16", + "172.171.0.0/19", + "172.171.32.0/19", + "172.171.64.0/19", + "172.171.96.0/19", + "172.171.128.0/17", + "172.172.0.0/17", + "172.172.128.0/17", + "172.173.8.0/21", + "172.173.16.0/20", + "172.173.64.0/18", + "172.173.128.0/17", + "172.174.0.0/16", + "172.175.0.0/16", + "172.176.0.0/15", + "172.178.0.0/17", + "172.178.128.0/17", + "172.179.0.0/16", + "172.180.0.0/15", + "172.182.0.0/16", + "172.183.0.0/16", + "172.184.0.0/15", + "172.190.0.0/15", + "172.200.0.0/16", + "172.201.0.0/16", + "172.202.0.0/17", + "172.202.128.0/17", + "172.203.0.0/17", + "172.203.128.0/17", + "172.205.0.0/17", + "172.205.128.0/17", + "172.206.0.0/17", + "172.206.128.0/18", + "172.206.192.0/18", + "172.208.0.0/17", + "172.210.0.0/17", + "172.210.128.0/17", + "172.211.0.0/16", + "172.212.0.0/17", + "172.212.128.0/17", + "172.214.0.0/17", + "172.214.128.0/17", + "172.215.128.0/18", + "191.233.64.0/18", + "191.233.144.0/20", + "191.234.32.0/19", + "191.235.128.0/18", + "191.235.192.0/22", + "191.235.208.0/20", + "191.235.255.0/24", + "191.236.0.0/18", + "191.236.64.0/18", + "191.236.128.0/18", + "191.236.192.0/18", + "191.237.0.0/17", + "191.237.128.0/18", + "191.237.192.0/23", + "191.237.194.0/24", + "191.237.196.0/24", + "191.237.208.0/20", + "191.237.232.0/22", + "191.238.0.0/18", + "191.238.70.0/23", + "191.238.96.0/19", + "191.238.144.0/20", + "191.238.160.0/19", + "191.238.224.0/19", + "191.239.0.0/18", + "191.239.200.0/22", + "191.239.208.0/20", + "191.239.224.0/20", + "193.149.64.0/21", + "193.149.72.0/21", + "193.149.80.0/21", + "193.149.88.0/21", + "199.30.16.0/24", + "199.30.18.0/23", + "199.30.20.0/24", + "199.30.22.0/24", + "199.30.24.0/23", + "199.30.27.0/25", + "199.30.27.144/28", + "199.30.27.160/27", + "199.30.28.64/26", + "199.30.28.128/25", + "199.30.29.0/24", + "199.30.31.0/25", + "199.30.31.192/26", + "204.79.180.0/24", + "204.152.18.0/31", + "204.152.18.8/29", + "204.152.18.32/27", + "204.152.18.64/26", + "204.152.19.0/24", + "207.46.13.0/24", + "207.46.193.192/28", + "207.46.193.224/27", + "207.46.198.128/25", + "207.46.200.96/27", + "207.46.200.176/28", + "207.46.202.128/28", + "207.46.205.0/24", + "207.68.174.40/29", + "207.68.174.184/29", + "209.199.17.80/28", + "209.199.17.192/26", + "209.199.18.0/26", + "209.240.212.0/23", + "213.199.128.0/20", + "213.199.180.32/28", + "213.199.180.96/27", + "213.199.180.192/27", + "213.199.183.0/24", + "2602:fd5e:1::/63", + "2602:fd5e:1:2::/64", + "2603:1020::/47", + "2603:1020:2::/48", + "2603:1020:4::/48", + "2603:1020:5::/48", + "2603:1020:6::/48", + "2603:1020:200::/46", + "2603:1020:205::/48", + "2603:1020:206::/47", + "2603:1020:208::/56", + "2603:1026:900:4::/63", + "2603:1026:900:6::/64", + "2603:1026:900:7::/64", + "2603:1026:900:8::/63", + "2603:1026:900:1a::/63", + "2603:1026:900:1c::/64", + "2603:1026:900:1d::/64", + "2603:1026:900:1e::/63", + "2603:1026:2404::/48", + "2603:1026:2405::/48", + "2603:1026:2500:24::/64", + "2603:1026:3000:c0::/59", + "2603:1026:3000:140::/59", + "2603:1027:1:c0::/59", + "2603:1027:1:140::/59", + "2603:1030::/45", + "2603:1030:9:2::/63", + "2603:1030:9:4::/62", + "2603:1030:9:8::/61", + "2603:1030:9:10::/62", + "2603:1030:9:14::/63", + "2603:1030:9:17::/64", + "2603:1030:9:18::/61", + "2603:1030:9:20::/59", + "2603:1030:9:40::/58", + "2603:1030:9:80::/59", + "2603:1030:9:a0::/60", + "2603:1030:9:b3::/64", + "2603:1030:9:b4::/63", + "2603:1030:9:b7::/64", + "2603:1030:9:b8::/63", + "2603:1030:9:bd::/64", + "2603:1030:9:be::/63", + "2603:1030:9:c0::/58", + "2603:1030:9:100::/64", + "2603:1030:9:104::/62", + "2603:1030:9:108::/62", + "2603:1030:9:10c::/64", + "2603:1030:9:111::/64", + "2603:1030:9:112::/63", + "2603:1030:9:114::/64", + "2603:1030:9:118::/62", + "2603:1030:9:11c::/63", + "2603:1030:9:11f::/64", + "2603:1030:9:120::/61", + "2603:1030:9:128::/62", + "2603:1030:9:12f::/64", + "2603:1030:9:130::/60", + "2603:1030:9:140::/59", + "2603:1030:9:160::/61", + "2603:1030:9:168::/62", + "2603:1030:9:16f::/64", + "2603:1030:9:170::/60", + "2603:1030:9:180::/61", + "2603:1030:9:18c::/62", + "2603:1030:9:190::/60", + "2603:1030:9:1a0::/59", + "2603:1030:9:1c0::/60", + "2603:1030:9:1d0::/62", + "2603:1030:9:1d4::/63", + "2603:1030:9:1d6::/64", + "2603:1030:9:1db::/64", + "2603:1030:9:1dc::/62", + "2603:1030:9:1e0::/59", + "2603:1030:9:200::/57", + "2603:1030:9:280::/61", + "2603:1030:9:288::/62", + "2603:1030:9:28d::/64", + "2603:1030:9:28e::/63", + "2603:1030:9:290::/60", + "2603:1030:9:2a0::/59", + "2603:1030:9:2c0::/63", + "2603:1030:9:2c2::/64", + "2603:1030:9:2c4::/62", + "2603:1030:9:2c8::/62", + "2603:1030:9:2cc::/63", + "2603:1030:9:2d4::/62", + "2603:1030:9:2d8::/61", + "2603:1030:9:2e0::/59", + "2603:1030:9:300::/60", + "2603:1030:9:310::/62", + "2603:1030:9:314::/64", + "2603:1030:9:319::/64", + "2603:1030:9:31a::/63", + "2603:1030:9:31c::/62", + "2603:1030:9:320::/62", + "2603:1030:9:324::/63", + "2603:1030:9:328::/63", + "2603:1030:9:339::/64", + "2603:1030:9:33a::/63", + "2603:1030:9:33c::/62", + "2603:1030:9:340::/62", + "2603:1030:9:344::/64", + "2603:1030:9:348::/61", + "2603:1030:9:350::/64", + "2603:1030:9:352::/63", + "2603:1030:9:354::/62", + "2603:1030:9:358::/61", + "2603:1030:9:360::/61", + "2603:1030:9:368::/63", + "2603:1030:9:36a::/64", + "2603:1030:9:36e::/64", + "2603:1030:9:370::/61", + "2603:1030:9:378::/62", + "2603:1030:9:37c::/64", + "2603:1030:9:37e::/63", + "2603:1030:9:380::/57", + "2603:1030:9:400::/61", + "2603:1030:9:408::/62", + "2603:1030:9:40c::/63", + "2603:1030:9:40f::/64", + "2603:1030:9:410::/61", + "2603:1030:9:418::/62", + "2603:1030:9:420::/61", + "2603:1030:9:428::/63", + "2603:1030:9:42a::/64", + "2603:1030:9:42f::/64", + "2603:1030:9:430::/62", + "2603:1030:9:434::/64", + "2603:1030:9:436::/63", + "2603:1030:9:438::/62", + "2603:1030:9:43c::/63", + "2603:1030:9:440::/62", + "2603:1030:9:444::/63", + "2603:1030:9:446::/64", + "2603:1030:9:449::/64", + "2603:1030:9:44a::/63", + "2603:1030:9:44c::/62", + "2603:1030:9:450::/60", + "2603:1030:9:460::/62", + "2603:1030:9:464::/63", + "2603:1030:9:466::/64", + "2603:1030:a::/47", + "2603:1030:d::/48", + "2603:1030:10::/47", + "2603:1030:13::/56", + "2603:1030:13:200::/62", + "2603:1030:20c::/47", + "2603:1030:20e::/48", + "2603:1030:210::/47", + "2603:1030:212::/56", + "2603:1030:213::/48", + "2603:1030:400::/48", + "2603:1030:401:2::/63", + "2603:1030:401:4::/62", + "2603:1030:401:8::/61", + "2603:1030:401:10::/62", + "2603:1030:401:14::/63", + "2603:1030:401:17::/64", + "2603:1030:401:18::/61", + "2603:1030:401:20::/59", + "2603:1030:401:40::/60", + "2603:1030:401:50::/61", + "2603:1030:401:58::/64", + "2603:1030:401:5a::/63", + "2603:1030:401:5c::/62", + "2603:1030:401:60::/59", + "2603:1030:401:80::/62", + "2603:1030:401:84::/64", + "2603:1030:401:87::/64", + "2603:1030:401:88::/62", + "2603:1030:401:8c::/63", + "2603:1030:401:8f::/64", + "2603:1030:401:90::/63", + "2603:1030:401:94::/62", + "2603:1030:401:98::/61", + "2603:1030:401:a0::/62", + "2603:1030:401:a4::/63", + "2603:1030:401:a7::/64", + "2603:1030:401:a8::/61", + "2603:1030:401:b0::/60", + "2603:1030:401:c0::/58", + "2603:1030:401:100::/59", + "2603:1030:401:120::/64", + "2603:1030:401:124::/62", + "2603:1030:401:128::/61", + "2603:1030:401:130::/62", + "2603:1030:401:134::/63", + "2603:1030:401:139::/64", + "2603:1030:401:13a::/63", + "2603:1030:401:143::/64", + "2603:1030:401:144::/63", + "2603:1030:401:14a::/63", + "2603:1030:401:14c::/62", + "2603:1030:401:150::/62", + "2603:1030:401:154::/63", + "2603:1030:401:159::/64", + "2603:1030:401:15a::/63", + "2603:1030:401:15c::/62", + "2603:1030:401:160::/61", + "2603:1030:401:16a::/63", + "2603:1030:401:16c::/64", + "2603:1030:401:17c::/62", + "2603:1030:401:180::/58", + "2603:1030:401:1c0::/61", + "2603:1030:401:1c8::/63", + "2603:1030:401:1cc::/62", + "2603:1030:401:1d0::/60", + "2603:1030:401:1e0::/60", + "2603:1030:401:1f0::/61", + "2603:1030:401:1f8::/64", + "2603:1030:401:20c::/62", + "2603:1030:401:210::/60", + "2603:1030:401:220::/62", + "2603:1030:401:226::/63", + "2603:1030:401:228::/61", + "2603:1030:401:230::/60", + "2603:1030:401:240::/60", + "2603:1030:401:250::/62", + "2603:1030:401:254::/63", + "2603:1030:401:256::/64", + "2603:1030:401:25b::/64", + "2603:1030:401:25c::/63", + "2603:1030:401:25e::/64", + "2603:1030:401:263::/64", + "2603:1030:401:264::/62", + "2603:1030:401:268::/61", + "2603:1030:401:270::/62", + "2603:1030:401:274::/63", + "2603:1030:401:27a::/63", + "2603:1030:401:27c::/62", + "2603:1030:401:280::/59", + "2603:1030:401:2a0::/61", + "2603:1030:401:2a8::/63", + "2603:1030:401:2ab::/64", + "2603:1030:401:2ac::/62", + "2603:1030:401:2b0::/60", + "2603:1030:401:2c0::/63", + "2603:1030:401:2c2::/64", + "2603:1030:401:2c7::/64", + "2603:1030:401:2c8::/61", + "2603:1030:401:2d0::/60", + "2603:1030:401:2e0::/62", + "2603:1030:401:2e4::/63", + "2603:1030:401:2e6::/64", + "2603:1030:401:2ed::/64", + "2603:1030:401:2ee::/63", + "2603:1030:401:2f0::/64", + "2603:1030:401:2f3::/64", + "2603:1030:401:2f4::/62", + "2603:1030:401:2f8::/61", + "2603:1030:401:300::/59", + "2603:1030:401:320::/61", + "2603:1030:401:328::/63", + "2603:1030:401:32a::/64", + "2603:1030:401:333::/64", + "2603:1030:401:334::/62", + "2603:1030:401:338::/62", + "2603:1030:401:33c::/63", + "2603:1030:401:33e::/64", + "2603:1030:401:341::/64", + "2603:1030:401:342::/63", + "2603:1030:401:344::/62", + "2603:1030:401:348::/61", + "2603:1030:401:350::/60", + "2603:1030:401:360::/61", + "2603:1030:401:368::/64", + "2603:1030:401:36b::/64", + "2603:1030:401:36c::/62", + "2603:1030:401:370::/60", + "2603:1030:401:380::/63", + "2603:1030:401:382::/64", + "2603:1030:401:38c::/62", + "2603:1030:401:390::/62", + "2603:1030:401:39d::/64", + "2603:1030:401:39e::/63", + "2603:1030:401:3a0::/64", + "2603:1030:401:3a2::/63", + "2603:1030:401:3a4::/62", + "2603:1030:401:3a8::/61", + "2603:1030:401:3b0::/63", + "2603:1030:401:3b2::/64", + "2603:1030:401:3b4::/62", + "2603:1030:401:3b8::/61", + "2603:1030:401:3c0::/58", + "2603:1030:401:400::/62", + "2603:1030:401:404::/64", + "2603:1030:401:409::/64", + "2603:1030:401:40a::/63", + "2603:1030:401:40c::/62", + "2603:1030:401:410::/60", + "2603:1030:401:420::/61", + "2603:1030:401:42c::/62", + "2603:1030:401:430::/62", + "2603:1030:401:434::/64", + "2603:1030:401:439::/64", + "2603:1030:401:43a::/63", + "2603:1030:401:43c::/63", + "2603:1030:401:43e::/64", + "2603:1030:401:440::/62", + "2603:1030:401:44b::/64", + "2603:1030:401:44c::/62", + "2603:1030:401:45c::/62", + "2603:1030:401:460::/60", + "2603:1030:401:470::/61", + "2603:1030:401:478::/63", + "2603:1030:401:48a::/63", + "2603:1030:401:48c::/63", + "2603:1030:401:48f::/64", + "2603:1030:401:490::/60", + "2603:1030:401:4a0::/61", + "2603:1030:401:4b8::/61", + "2603:1030:401:4c0::/60", + "2603:1030:401:4d0::/62", + "2603:1030:401:4d5::/64", + "2603:1030:401:4d7::/64", + "2603:1030:401:4d8::/62", + "2603:1030:401:4dc::/64", + "2603:1030:401:4e6::/64", + "2603:1030:401:4ee::/63", + "2603:1030:401:4f0::/63", + "2603:1030:401:4f3::/64", + "2603:1030:401:4f5::/64", + "2603:1030:401:4f6::/63", + "2603:1030:401:4f8::/61", + "2603:1030:401:500::/57", + "2603:1030:401:580::/59", + "2603:1030:401:5a0::/61", + "2603:1030:401:5a8::/63", + "2603:1030:401:5ae::/63", + "2603:1030:401:5b0::/62", + "2603:1030:401:5b4::/64", + "2603:1030:401:5b7::/64", + "2603:1030:401:5b8::/62", + "2603:1030:401:5bc::/63", + "2603:1030:401:5bf::/64", + "2603:1030:401:5c0::/61", + "2603:1030:401:5c8::/64", + "2603:1030:401:5ca::/63", + "2603:1030:401:5cc::/62", + "2603:1030:401:5d0::/64", + "2603:1030:401:5d3::/64", + "2603:1030:401:5d4::/62", + "2603:1030:401:5d8::/61", + "2603:1030:401:5e0::/61", + "2603:1030:401:5ed::/64", + "2603:1030:401:5f5::/64", + "2603:1030:401:5f6::/64", + "2603:1030:401:5fd::/64", + "2603:1030:401:5fe::/63", + "2603:1030:401:600::/63", + "2603:1030:401:602::/64", + "2603:1030:402::/47", + "2603:1030:406::/47", + "2603:1030:408::/48", + "2603:1030:40a:1::/64", + "2603:1030:40a:2::/64", + "2603:1030:40c::/48", + "2603:1030:40d:8000::/49", + "2603:1030:40e::/56", + "2603:1030:40f::/48", + "2603:1030:500::/47", + "2603:1030:503::/48", + "2603:1030:504::/47", + "2603:1030:600::/46", + "2603:1030:604::/47", + "2603:1030:607::/48", + "2603:1030:608::/47", + "2603:1030:800::/48", + "2603:1030:802::/47", + "2603:1030:804::/58", + "2603:1030:804:40::/60", + "2603:1030:804:53::/64", + "2603:1030:804:54::/64", + "2603:1030:804:5b::/64", + "2603:1030:804:5c::/62", + "2603:1030:804:60::/62", + "2603:1030:804:67::/64", + "2603:1030:804:68::/61", + "2603:1030:804:70::/60", + "2603:1030:804:80::/59", + "2603:1030:804:a0::/62", + "2603:1030:804:a4::/64", + "2603:1030:804:a6::/63", + "2603:1030:804:a8::/61", + "2603:1030:804:b0::/62", + "2603:1030:804:b4::/64", + "2603:1030:804:b6::/63", + "2603:1030:804:b8::/61", + "2603:1030:804:c0::/61", + "2603:1030:804:c8::/62", + "2603:1030:804:cc::/63", + "2603:1030:804:d2::/63", + "2603:1030:804:d4::/62", + "2603:1030:804:d8::/61", + "2603:1030:804:e0::/59", + "2603:1030:804:100::/57", + "2603:1030:804:180::/58", + "2603:1030:804:1c0::/61", + "2603:1030:804:1c8::/64", + "2603:1030:804:1cd::/64", + "2603:1030:804:1ce::/63", + "2603:1030:804:1d0::/60", + "2603:1030:804:1e0::/59", + "2603:1030:804:200::/59", + "2603:1030:804:220::/61", + "2603:1030:804:228::/62", + "2603:1030:804:22c::/64", + "2603:1030:804:233::/64", + "2603:1030:804:234::/62", + "2603:1030:804:238::/61", + "2603:1030:804:240::/59", + "2603:1030:804:260::/61", + "2603:1030:804:26a::/63", + "2603:1030:804:26c::/62", + "2603:1030:804:270::/62", + "2603:1030:804:274::/63", + "2603:1030:804:277::/64", + "2603:1030:804:278::/61", + "2603:1030:804:280::/62", + "2603:1030:804:284::/63", + "2603:1030:804:286::/64", + "2603:1030:804:28a::/63", + "2603:1030:804:28c::/63", + "2603:1030:804:28e::/64", + "2603:1030:804:290::/60", + "2603:1030:804:2a0::/60", + "2603:1030:804:2b0::/62", + "2603:1030:804:2b5::/64", + "2603:1030:804:2b6::/63", + "2603:1030:804:2b8::/61", + "2603:1030:804:2c0::/58", + "2603:1030:804:300::/59", + "2603:1030:804:320::/60", + "2603:1030:804:330::/64", + "2603:1030:805::/48", + "2603:1030:806::/48", + "2603:1030:807::/48", + "2603:1030:809::/48", + "2603:1030:80a::/56", + "2603:1030:80b::/48", + "2603:1030:a00::/46", + "2603:1030:a04::/48", + "2603:1030:a06::/48", + "2603:1030:a07::/48", + "2603:1030:a08::/48", + "2603:1030:a09::/56", + "2603:1030:a09:100::/63", + "2603:1030:a0a::/47", + "2603:1030:a0c::/48", + "2603:1030:c00::/48", + "2603:1030:c02::/47", + "2603:1030:c04::/48", + "2603:1030:c05::/48", + "2603:1030:c06::/48", + "2603:1030:c07::/48", + "2603:1030:d00::/47", + "2603:1030:e01:2::/64", + "2603:1036:903::/64", + "2603:1036:903:4::/64", + "2603:1036:903:6::/64", + "2603:1036:903:7::/64", + "2603:1036:903:8::/64", + "2603:1036:903:c::/63", + "2603:1036:903:e::/64", + "2603:1036:903:f::/64", + "2603:1036:903:10::/63", + "2603:1036:903:12::/63", + "2603:1036:903:14::/62", + "2603:1036:903:18::/64", + "2603:1036:903:1d::/64", + "2603:1036:903:1e::/63", + "2603:1036:903:20::/64", + "2603:1036:903:21::/64", + "2603:1036:903:22::/63", + "2603:1036:903:24::/63", + "2603:1036:903:26::/64", + "2603:1036:903:27::/64", + "2603:1036:903:28::/63", + "2603:1036:903:30::/63", + "2603:1036:903:32::/64", + "2603:1036:903:36::/63", + "2603:1036:903:38::/64", + "2603:1036:903:47::/64", + "2603:1036:903:48::/63", + "2603:1036:d20::/64", + "2603:1036:120d::/48", + "2603:1036:2400::/48", + "2603:1036:2403::/48", + "2603:1036:2404::/48", + "2603:1036:2405::/48", + "2603:1036:2406::/48", + "2603:1036:2407::/48", + "2603:1036:2409::/48", + "2603:1036:240c::/48", + "2603:1036:2410::/48", + "2603:1036:2500::/64", + "2603:1036:2500:8::/64", + "2603:1036:2500:10::/64", + "2603:1036:2500:14::/64", + "2603:1036:2500:18::/63", + "2603:1036:2500:1c::/64", + "2603:1036:2500:24::/64", + "2603:1036:2500:38::/64", + "2603:1036:3000::/59", + "2603:1036:3000:60::/59", + "2603:1036:3000:c0::/59", + "2603:1036:3000:e0::/59", + "2603:1036:3000:100::/59", + "2603:1036:3000:120::/59", + "2603:1036:3000:140::/59", + "2603:1036:3000:1c0::/59", + "2603:1037:1::/59", + "2603:1037:1:60::/59", + "2603:1037:1:c0::/59", + "2603:1037:1:e0::/59", + "2603:1037:1:100::/59", + "2603:1037:1:120::/59", + "2603:1037:1:140::/59", + "2603:1037:1:1c0::/59", + "2603:1039:205::/48", + "2603:1061:1311:2000::/54", + "2603:1061:1311:5800::/54", + "2603:1061:1312:800::/54", + "2603:1061:1312:c00::/54", + "2603:1061:1312:1000::/54", + "2603:1061:1312:1800::/54", + "2603:1061:1312:1c00::/54", + "2603:1061:1312:2400::/54", + "2603:1061:1312:2800::/54", + "2603:1061:1312:2c00::/54", + "2603:1061:1312:3000::/54", + "2603:1061:1312:3800::/54", + "2603:1061:170a::/48", + "2603:1061:170d::/48", + "2603:1061:170e::/48", + "2603:1061:1715::/48", + "2603:1061:1716::/48", + "2603:1061:1717::/48", + "2603:1061:171d::/48", + "2603:1061:171f::/48", + "2603:1061:1720::/48", + "2603:1061:1730::/48", + "2603:1061:2000::/64", + "2603:1061:2000:1::/64", + "2603:1061:2000:2::/64", + "2603:1061:2000:3::/64", + "2603:1061:2000:100::/60", + "2603:1061:2000:110::/60", + "2603:1061:2000:410::/62", + "2603:1061:2000:540::/62", + "2603:1061:2000:548::/62", + "2603:1061:2000:680::/62", + "2603:1061:2000:688::/62", + "2603:1061:2002::/56", + "2603:1061:2002:100::/56", + "2603:1061:2002:800::/56", + "2603:1061:2002:900::/56", + "2603:1061:2002:1200::/57", + "2603:1061:2004:200::/57", + "2603:1061:2004:7000::/56", + "2603:1061:2004:7100::/56", + "2603:1061:2004:7800::/56", + "2603:1061:2004:7900::/56", + "2603:1061:2010:6::/64", + "2603:1061:2010:9::/64", + "2603:1061:2010:a::/64", + "2603:1061:2010:11::/64", + "2603:1061:2010:12::/64", + "2603:1061:2010:13::/64", + "2603:1061:2010:19::/64", + "2603:1061:2010:1b::/64", + "2603:1061:2010:1c::/64", + "2603:1061:2010:30::/64", + "2603:1062:2::/57", + "2603:1062:2:80::/57", + "2603:1062:2:100::/57", + "2603:1062:2:180::/57", + "2603:1062:2:200::/57", + "2603:1062:c:14::/63", + "2603:1062:c:16::/63", + "2603:1062:c:20::/63", + "2603:1062:c:22::/63", + "2603:1062:c:24::/63", + "2603:1062:c:26::/63", + "2603:1062:c:28::/63", + "2603:1062:c:2a::/63", + "2603:1062:c:2c::/63", + "2603:1063:2::/56", + "2603:1063:8::/56", + "2603:1063:9::/56", + "2603:1063:11::/56", + "2603:1063:16::/56", + "2603:1063:20::/56", + "2603:1063:21::/56", + "2603:1063:24::/56", + "2603:1063:25::/56", + "2603:1063:30::/64", + "2603:1063:ff::/64", + "2603:1063:101::/55", + "2603:1063:101:200::/56", + "2603:1063:102::/55", + "2603:1063:102:200::/56", + "2603:1063:108::/55", + "2603:1063:108:200::/56", + "2603:1063:109::/55", + "2603:1063:109:200::/56", + "2603:1063:110::/55", + "2603:1063:110:200::/56", + "2603:1063:116::/55", + "2603:1063:116:200::/56", + "2603:1063:121::/55", + "2603:1063:121:200::/56", + "2603:1063:123::/55", + "2603:1063:123:200::/56", + "2603:1063:124::/55", + "2603:1063:124:200::/56", + "2603:1063:201::/55", + "2603:1063:202::/55", + "2603:1063:208::/55", + "2603:1063:209::/55", + "2603:1063:210::/55", + "2603:1063:216::/55", + "2603:1063:221::/55", + "2603:1063:223::/55", + "2603:1063:224::/55", + "2603:1063:406::/56", + "2603:1063:40e::/56", + "2603:1063:40f::/56", + "2603:1063:420::/56", + "2603:1063:422::/56", + "2603:1063:423::/56", + "2603:1063:424::/56", + "2603:1063:425::/56", + "2603:1063:2200::/64", + "2603:1063:2200:c::/64", + "2603:1063:2200:14::/64", + "2603:1063:2200:18::/64", + "2603:1063:2200:1c::/64", + "2603:1063:2200:20::/64", + "2603:1063:2200:24::/64", + "2603:1063:2200:30::/64", + "2603:1063:2206:14::/64", + "2603:1063:2206:24::/64", + "2a01:111:f100:1000::/62", + "2a01:111:f100:1004::/63", + "2a01:111:f100:2000::/52", + "2a01:111:f100:3000::/52", + "2a01:111:f100:4002::/64", + "2a01:111:f100:5000::/52", + "2a01:111:f100:a000::/63", + "2a01:111:f100:a002::/64", + "2a01:111:f100:a004::/64", + "2a01:111:f403:c000::/63", + "2a01:111:f403:c002::/64", + "2a01:111:f403:c004::/62", + "2a01:111:f403:c100::/63", + "2a01:111:f403:c102::/64", + "2a01:111:f403:c105::/64", + "2a01:111:f403:c10c::/62", + "2a01:111:f403:c110::/64", + "2a01:111:f403:c111::/64", + "2a01:111:f403:c200::/64", + "2a01:111:f403:c201::/64", + "2a01:111:f403:c800::/64", + "2a01:111:f403:c801::/64", + "2a01:111:f403:c803::/64", + "2a01:111:f403:c804::/62", + "2a01:111:f403:c900::/63", + "2a01:111:f403:c902::/64", + "2a01:111:f403:c903::/64", + "2a01:111:f403:c904::/62", + "2a01:111:f403:c908::/62", + "2a01:111:f403:c90c::/62", + "2a01:111:f403:c914::/62", + "2a01:111:f403:c918::/64", + "2a01:111:f403:c919::/64", + "2a01:111:f403:c91a::/63", + "2a01:111:f403:c91c::/63", + "2a01:111:f403:c91e::/63", + "2a01:111:f403:c920::/63", + "2a01:111:f403:c922::/64", + "2a01:111:f403:c923::/64", + "2a01:111:f403:c924::/62", + "2a01:111:f403:c928::/62", + "2a01:111:f403:c92c::/64", + "2a01:111:f403:c92d::/64", + "2a01:111:f403:c92e::/63", + "2a01:111:f403:c930::/63", + "2a01:111:f403:c945::/64", + "2a01:111:f403:c946::/64", + "2a01:111:f403:ca00::/62", + "2a01:111:f403:ca04::/64", + "2a01:111:f403:ca05::/64", + "2a01:111:f403:ca06::/63", + "2a01:111:f403:ca08::/63", + "2a01:111:f403:d000::/63", + "2a01:111:f403:d002::/64", + "2a01:111:f403:d003::/64", + "2a01:111:f403:d004::/62", + "2a01:111:f403:d100::/64", + "2a01:111:f403:d101::/64", + "2a01:111:f403:d104::/62", + "2a01:111:f403:d108::/62", + "2a01:111:f403:d10c::/62", + "2a01:111:f403:d111::/64", + "2a01:111:f403:d200::/64", + "2a01:111:f403:d201::/64", + "2a01:111:f403:d800::/63", + "2a01:111:f403:d802::/64", + "2a01:111:f403:d803::/64", + "2a01:111:f403:d804::/62", + "2a01:111:f403:d900::/64", + "2a01:111:f403:d901::/64", + "2a01:111:f403:d903::/64", + "2a01:111:f403:d904::/62", + "2a01:111:f403:d908::/62", + "2a01:111:f403:d90c::/62", + "2a01:111:f403:d918::/64", + "2a01:111:f403:da00::/64", + "2a01:111:f403:da01::/64", + "2a01:111:f403:e000::/63", + "2a01:111:f403:e002::/64", + "2a01:111:f403:e004::/62", + "2a01:111:f403:e008::/62", + "2a01:111:f403:e00c::/62", + "2a01:111:f403:e015::/64", + "2a01:111:f403:e016::/64", + "2a01:111:f403:e018::/64", + "2a01:111:f403:e01b::/64", + "2a01:111:f403:e200::/64", + "2a01:111:f403:e201::/64", + "2a01:111:f403:f000::/64", + "2a01:111:f403:f800::/62", + "2a01:111:f403:f804::/62", + "2a01:111:f403:f900::/62", + "2a01:111:f403:f904::/62", + "2a01:111:f403:f908::/62", + "2a01:111:f403:f90c::/62" + ], + "dependabot": [ + "18.213.123.130/32", + "3.217.79.163/32", + "3.217.93.44/32" + ], + "domains": { + "website": [ + "*.github.com", + "*.github.dev", + "*.github.io", + "*.githubassets.com", + "*.githubusercontent.com" + ], + "codespaces": [ + "*.github.com", + "*.api.github.com", + "*.azureedge.net", + "*.github.dev", + "*.msecnd.net", + "*.visualstudio.com", + "*.vscode-webview.net", + "*.windows.net", + "*.microsoft.com" + ], + "copilot": [ + "*.github.com", + "*.githubusercontent.com", + "default.exp-tas.com", + "*.githubcopilot.com" + ], + "packages": [ + "*.github.com", + "*.pkg.github.com", + "*.ghcr.io", + "*.githubusercontent.com" + ], + "actions": [ + "productionresultssa0.blob.core.windows.net", + "productionresultssa1.blob.core.windows.net", + "productionresultssa2.blob.core.windows.net", + "productionresultssa3.blob.core.windows.net", + "productionresultssa4.blob.core.windows.net", + "productionresultssa5.blob.core.windows.net", + "productionresultssa6.blob.core.windows.net", + "productionresultssa7.blob.core.windows.net", + "productionresultssa8.blob.core.windows.net", + "productionresultssa9.blob.core.windows.net", + "productionresultssa10.blob.core.windows.net", + "productionresultssa11.blob.core.windows.net", + "productionresultssa12.blob.core.windows.net", + "productionresultssa13.blob.core.windows.net", + "productionresultssa14.blob.core.windows.net", + "productionresultssa15.blob.core.windows.net", + "productionresultssa16.blob.core.windows.net", + "productionresultssa17.blob.core.windows.net", + "productionresultssa18.blob.core.windows.net", + "productionresultssa19.blob.core.windows.net" + ] + } +} diff --git a/pkg/policy/policy.go b/pkg/policy/policy.go index c3110a5..dd823d2 100644 --- a/pkg/policy/policy.go +++ b/pkg/policy/policy.go @@ -41,6 +41,9 @@ func New(fs files.FS, data []byte) (*Policy, error) { return nil, fmt.Errorf("failed to unmarshal data json: %w", err) } + // load data objects inside 'assets' dir + dataJson["assets"] = bundleClient.Data["assets"] + store := inmem.NewFromObject(dataJson) txn, err := store.NewTransaction(ctx, storage.WriteParams) if err != nil { @@ -68,18 +71,14 @@ func (p *Policy) AddQuery(query string) { // Eval evaluates the policy with the given input byte array // the input is the value that has been generated by eBPF sensors -func (p *Policy) Eval(ctx context.Context, input []byte) (bool, error) { +// func (p *Policy) Eval(ctx context.Context, input []byte) (bool, error) { +func (p *Policy) Eval(ctx context.Context, input map[string]interface{}) (bool, error) { query, err := rego.New(p.regoArgs...).PrepareForEval(ctx) if err != nil { return false, fmt.Errorf("failed to prepare rego query: %w", err) } - inputJson, err := unmarshal(input) - if err != nil { - return false, fmt.Errorf("failed to unmarshal input json: %w", err) - } - - result, err := query.Eval(ctx, rego.EvalInput(inputJson)) + result, err := query.Eval(ctx, rego.EvalInput(input)) if err != nil { return false, fmt.Errorf("failed to eval rego query: %w", err) } diff --git a/pkg/policy/policy_test.go b/pkg/policy/policy_test.go index 53099a0..b771a96 100644 --- a/pkg/policy/policy_test.go +++ b/pkg/policy/policy_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/kondukto-io/kntrl/bundle" + "github.com/open-policy-agent/opa/util" ) var testCases = map[string]struct { @@ -23,13 +24,18 @@ var testCases = map[string]struct { true, }, "allow_host": { - []byte(`{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": false, "allow_local_ip_ranges": true}`), + []byte(`{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.2.3.1"], "allow_github_meta": false, "allow_local_ip_ranges": true}`), []byte(`{"pid": 2806,"task_name": "curl","proto": "tcp","daddr": "1.1.1.1","dport": 443,"domains": ["foo.com"]}`), true, }, + "allow_github_meta": { + []byte(`{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": true, "allow_local_ip_ranges": false}`), + []byte(`{"daddr":"4.148.0.12", "domains": ["foo.bar"]}`), + true, + }, } -func TestPolicyRawLocal(t *testing.T) { +func TestPolicyRaw(t *testing.T) { var bundleFS = bundle.Bundle for name, test := range testCases { @@ -39,7 +45,12 @@ func TestPolicyRawLocal(t *testing.T) { } p.AddQuery("data.kntrl.policy") - result, err := p.Eval(context.Background(), test.input) + var inputjson map[string]interface{} + if err := util.Unmarshal(test.input, &inputjson); err != nil { + t.Errorf("[%s] unmarshal error: %v", name, err) + } + + result, err := p.Eval(context.Background(), inputjson) if err != nil { t.Errorf("[%s] eval error: %v", name, err) } @@ -47,6 +58,5 @@ func TestPolicyRawLocal(t *testing.T) { if result != test.expected { t.Errorf("[%s] expected policy status '%v', got %v", name, test.expected, result) } - } } From 6e6b278326770f94535da0117be7b4a905ce247e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Mon, 1 Apr 2024 20:41:45 +0300 Subject: [PATCH 08/15] add parser pkg and main policy logic --- internal/core/domain/data.go | 19 +++++++ internal/handlers/tracer/flag.go | 23 -------- internal/handlers/tracer/tracer.go | 77 ++++++++++++++++++++++---- pkg/parser/flag.go | 89 ++++++++++++++++++++++++++++++ pkg/policy/policy.go | 13 +++++ 5 files changed, 186 insertions(+), 35 deletions(-) create mode 100644 internal/core/domain/data.go delete mode 100644 internal/handlers/tracer/flag.go create mode 100644 pkg/parser/flag.go diff --git a/internal/core/domain/data.go b/internal/core/domain/data.go new file mode 100644 index 0000000..60fad2f --- /dev/null +++ b/internal/core/domain/data.go @@ -0,0 +1,19 @@ +package domain + +import "net" + +// Data represents the JSON data used in Open Policy Agent (OPA). +// In OPA, decisions are made by comparing "policy" (Rego Code) and "data" (JSON). +type Data struct { + // The allowed hosts from the cmd package. + // The 'parser' package will append the host machine's DNS servers. + AllowedHosts []string `json:"allowed_hosts"` + // Allowed IPs. + AllowedIPs []net.IP `json:"allowed_ip_addr"` + // Allow GitHub Meta addresses. The address list is stored + // with Rego policies. + // You can find the full meta list here: https://api.github.com/meta. + AllowGithubMeta bool `json:"allow_github_meta"` + // Allow local IP addresses. + AllowLocalIPRanges bool `json:"allow_local_ip_ranges"` +} diff --git a/internal/handlers/tracer/flag.go b/internal/handlers/tracer/flag.go deleted file mode 100644 index e920c64..0000000 --- a/internal/handlers/tracer/flag.go +++ /dev/null @@ -1,23 +0,0 @@ -package tracer - -import ( - "errors" - - "github.com/spf13/cobra" -) - -func parseFlags(cmd *cobra.Command, mode string, dc []byte) error { - mode = cmd.Flag("mode").Value.String() - if mode == "" { - return errors.New("[mode] flag is required") - } - - var allowedHosts = cmd.Flag("allowed-hosts").Value.String() - var allowedIPAddr = cmd.Flag("allowed-ips").Value.String() - - if allowedIPAddr == "" || allowedHosts == "" { - return errors.New("no allowed hosts or IP addreses provided") - } - - return nil -} diff --git a/internal/handlers/tracer/tracer.go b/internal/handlers/tracer/tracer.go index 24b8a99..5b93c89 100644 --- a/internal/handlers/tracer/tracer.go +++ b/internal/handlers/tracer/tracer.go @@ -2,8 +2,10 @@ package tracer import ( "bytes" + "context" _ "embed" "encoding/binary" + "encoding/json" "errors" "fmt" "net" @@ -18,9 +20,12 @@ import ( "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "github.com/kondukto-io/kntrl/bundle" "github.com/kondukto-io/kntrl/internal/core/domain" ebpfman "github.com/kondukto-io/kntrl/pkg/ebpf" "github.com/kondukto-io/kntrl/pkg/logger" + "github.com/kondukto-io/kntrl/pkg/parser" + "github.com/kondukto-io/kntrl/pkg/policy" "github.com/kondukto-io/kntrl/pkg/reporter" "github.com/kondukto-io/kntrl/pkg/utils" ) @@ -47,6 +52,8 @@ func init() { // //go:generate go run github.com/cilium/ebpf/cmd/bpf2go -target=$GOARCH -cc $BPF_CLANG -cflags $BPF_CFLAGS bpf ../../../bpf/sensor.network.bpf.c -- -I $BPF_HEADERS func Run(cmd cobra.Command) error { + var bundleFS = bundle.Bundle + var tracerMode = cmd.Flag("mode").Value.String() if tracerMode == "" { return errors.New("[mode] flag is required") @@ -56,16 +63,23 @@ func Run(cmd cobra.Command) error { return fmt.Errorf("[mode] flag is invalid: %s", tracerMode) } - var allowedHosts = cmd.Flag("hosts").Value.String() - if allowedHosts == "" { - logger.Log.Debugf("no host provided allowed") + cmddata, err := parseFlags(&cmd) + if err != nil { + return fmt.Errorf("data json error: %w", err) } - allowedIPS, err := utils.ParseHosts(allowedHosts) + dataObj, err := json.Marshal(cmddata) if err != nil { - return fmt.Errorf("failed to parse allowed hosts: %w", err) + return fmt.Errorf("error converting dataobj: %w", err) } + p, err := policy.New(bundleFS, dataObj) + if err != nil { + return fmt.Errorf("policy init error: %w", err) + } + + p.AddQuery("data.kntrl.policy") + var ebpfClient = ebpfman.New() if err := ebpfClient.Load(prog); err != nil { return fmt.Errorf("failed to load ebpf program: %w", err) @@ -93,13 +107,19 @@ func Run(cmd cobra.Command) error { } allowMap := ebpfClient.Collection.Maps[domain.EBPFCollectionMapAllow] + { + for _, ipstr := range cmddata.AllowedIPs { + ip := ipstr.To4() + var ipUint32 uint32 + if len(ip) > 16 { + ipUint32 = binary.LittleEndian.Uint32(ip[12:16]) + } else { + ipUint32 = binary.LittleEndian.Uint32(ip) - for _, ip := range allowedIPS { - // convert the IP bytes to __u32 - ipUint32 := binary.LittleEndian.Uint32(ip) - if err := allowMap.Put(ipUint32, uint32(1)); err != nil { - // if err := allowMap.Put(uint32(key), ipUint32); err != nil { - logger.Log.Fatalf("failed to update allow list (map): %v", err) + } + if err := allowMap.Put(ipUint32, uint32(1)); err != nil { + logger.Log.Fatalf("failed to update allow list (map): %v", err) + } } } @@ -230,7 +250,15 @@ func Run(cmd cobra.Command) error { var policyStatus = domain.EventPolicyStatusPass if tracerMode != domain.TracerModeMonitor { - policyStatus = policyCheck(allowMap, allowedIPS, domainNames, event.Daddr) + result, err := p.EvalEvent(context.Background(), event) + if err != nil { + logger.Log.Debugf("policy eval failed: %v", err) + } + if result { + policyStatus = "pass" + } else { + policyStatus = "block" + } } taskname := utils.TrimNullBytes(event.Task) @@ -270,6 +298,31 @@ EXIT: return nil } +func parseFlags(cmd *cobra.Command) (*domain.Data, error) { + allowedHostsFlag := cmd.Flag("allowed-hosts") + allowedIPAddrFlag := cmd.Flag("allowed-ips") + + if allowedIPAddrFlag.Value.String() == "" || allowedHostsFlag.Value.String() == "" { + return nil, errors.New("no allowed hosts or IP addresses provided") + } + + ghmeta, err := cmd.Flags().GetBool("allow-github-meta") + if err != nil { + return nil, err + } + localranges, err := cmd.Flags().GetBool("allow-local-ranges") + if err != nil { + return nil, err + } + + return parser.ToDataJson( + allowedHostsFlag.Value.String(), + allowedIPAddrFlag.Value.String(), + ghmeta, + localranges, + ), nil +} + func policyCheck(allowMap *ebpf.Map, allowedIPS []net.IP, domainNames []string, destinationAddress uint32) string { allowedHostsAddress := []string{".github.com", ".kondukto.io"} diff --git a/pkg/parser/flag.go b/pkg/parser/flag.go new file mode 100644 index 0000000..1955346 --- /dev/null +++ b/pkg/parser/flag.go @@ -0,0 +1,89 @@ +package parser + +import ( + "bufio" + "net" + "os" + "strings" + + "github.com/kondukto-io/kntrl/internal/core/domain" +) + +const ( + localLoopback = "127.0.0.1" + linkLocal = "169.254.169.254" + azureMeta = "168.63.129.16" +) + +func ToDataJson(allowed_hosts, allowed_ips string, ghrange, localrange bool) *domain.Data { + hosts, ips := getDNSServers() + hosts = append(hosts, parseAllowedHosts(allowed_hosts)...) + ips = append(ips, parseAllowedIPAddr(allowed_ips)...) + + return &domain.Data{ + AllowedHosts: hosts, + AllowedIPs: ips, + AllowGithubMeta: ghrange, + AllowLocalIPRanges: localrange, + } +} + +func parseAllowedIPAddr(ips string) (iplist []net.IP) { + for _, ip := range strings.Split(ips, ",") { + if i := net.ParseIP(ip); i == nil { + continue + } else { + iplist = append(iplist, i.To4()) + } + } + + iplist = append(iplist, + net.ParseIP(localLoopback).To4(), + net.ParseIP(linkLocal).To4(), + net.ParseIP(azureMeta).To4(), + ) + + return iplist +} + +func parseAllowedHosts(hosts string) []string { + var hl []string + for _, host := range strings.Split(hosts, ",") { + hl = append(hl, strings.TrimSpace(host)) + } + + return hl +} + +func getDNSServers() (hosts []string, ips []net.IP) { + const resolvconf = "/etc/resolv.conf" + + file, err := os.Open(resolvconf) + if err != nil { + return nil, nil + } + defer file.Close() + + var srvhosts []string + var srvips []net.IP + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + fields := strings.Fields(line) + + if len(fields) >= 2 && fields[0] == "nameserver" { + if ok := net.ParseIP(fields[1]); ok == nil { + srvhosts = append(srvhosts, fields[1]) + } else { + srvips = append(srvips, net.ParseIP(fields[1])) + } + } + } + + if err := scanner.Err(); err != nil { + return nil, nil + } + + return srvhosts, srvips +} diff --git a/pkg/policy/policy.go b/pkg/policy/policy.go index dd823d2..ba2d954 100644 --- a/pkg/policy/policy.go +++ b/pkg/policy/policy.go @@ -2,10 +2,12 @@ package policy import ( "context" + "encoding/json" "fmt" files "io/fs" "strings" + "github.com/kondukto-io/kntrl/internal/core/domain" "github.com/open-policy-agent/opa/bundle" "github.com/open-policy-agent/opa/loader/filter" "github.com/open-policy-agent/opa/rego" @@ -87,6 +89,17 @@ func (p *Policy) Eval(ctx context.Context, input map[string]interface{}) (bool, return result[0].Expressions[0].Value.(bool), nil } +func (p *Policy) EvalEvent(ctx context.Context, event domain.IP4Event) (bool, error) { + data, err := json.Marshal(event) + if err != nil { + return false, err + } + var outmap map[string]any + json.Unmarshal(data, &outmap) + + return p.Eval(ctx, outmap) +} + func unmarshal(data []byte) (dataJson map[string]interface{}, err error) { if err = util.Unmarshal(data, &dataJson); err != nil { return dataJson, err From 424810e50713ed62eccd43343074db8fb42f86cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Tue, 2 Apr 2024 15:42:03 +0300 Subject: [PATCH 09/15] fix policy logic --- internal/handlers/tracer/tracer.go | 33 +++++++++++++++++++----------- pkg/parser/flag.go | 9 +++++--- pkg/policy/policy.go | 2 +- pkg/utils/utils.go | 6 +++--- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/internal/handlers/tracer/tracer.go b/internal/handlers/tracer/tracer.go index 5b93c89..89fd262 100644 --- a/internal/handlers/tracer/tracer.go +++ b/internal/handlers/tracer/tracer.go @@ -248,19 +248,8 @@ func Run(cmd cobra.Command) error { domainNames = append(domainNames, ".") } + // evaluate policy var policyStatus = domain.EventPolicyStatusPass - if tracerMode != domain.TracerModeMonitor { - result, err := p.EvalEvent(context.Background(), event) - if err != nil { - logger.Log.Debugf("policy eval failed: %v", err) - } - if result { - policyStatus = "pass" - } else { - policyStatus = "block" - } - } - taskname := utils.TrimNullBytes(event.Task) if taskname == progName { continue @@ -278,6 +267,26 @@ func Run(cmd cobra.Command) error { Policy: policyStatus, } + // policy logic + if tracerMode != domain.TracerModeMonitor { + result, err := p.EvalEvent(context.Background(), reportEvent) + if err != nil { + logger.Log.Debugf("policy eval failed: %v", err) + } + if result { + policyStatus = domain.EventPolicyStatusPass + if err := allowMap.Put(event.Daddr, uint32(1)); err != nil { + logger.Log.Fatalf("failed to update allow list (map): %v", err) + } + logger.Log.Infof("ip [%d] added into allowed list", event.Daddr) + + } else { + policyStatus = domain.EventPolicyStatusBlock + } + reportEvent.Policy = policyStatus + } + + // report report.WriteEvent(reportEvent) logger.Log.Infof("[%d]%s -> %s:%d (%s) [%s]| %s", diff --git a/pkg/parser/flag.go b/pkg/parser/flag.go index 1955346..7d13235 100644 --- a/pkg/parser/flag.go +++ b/pkg/parser/flag.go @@ -46,10 +46,13 @@ func parseAllowedIPAddr(ips string) (iplist []net.IP) { return iplist } -func parseAllowedHosts(hosts string) []string { - var hl []string +func parseAllowedHosts(hosts string) (hl []string) { for _, host := range strings.Split(hosts, ",") { - hl = append(hl, strings.TrimSpace(host)) + alias, err := net.LookupCNAME(host) + if err != nil { + continue + } + hl = append(hl, strings.TrimRight(alias, ".")) } return hl diff --git a/pkg/policy/policy.go b/pkg/policy/policy.go index ba2d954..bfb476c 100644 --- a/pkg/policy/policy.go +++ b/pkg/policy/policy.go @@ -89,7 +89,7 @@ func (p *Policy) Eval(ctx context.Context, input map[string]interface{}) (bool, return result[0].Expressions[0].Value.(bool), nil } -func (p *Policy) EvalEvent(ctx context.Context, event domain.IP4Event) (bool, error) { +func (p *Policy) EvalEvent(ctx context.Context, event domain.ReportEvent) (bool, error) { data, err := json.Marshal(event) if err != nil { return false, err diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index d65cbce..41bdb47 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -87,9 +87,9 @@ func ParseProgramName(e *ebpf.Program) string { // TODO: find better alternative func GetProtocol(p uint8) string { protocolNames := map[uint8]string{ - 1: "ICMP", // Protocol number for ICMP is 1. - 6: "TCP", // Protocol number for TCP is 6. - 17: "UDP", // Protocol number for UDP is 17. + 1: "icmp", // Protocol number for ICMP is 1. + 6: "tcp", // Protocol number for TCP is 6. + 17: "udp", // Protocol number for UDP is 17. // Add more protocol numbers and their names if needed. } From a07c245484d788c56235b9bb7e5124a598e3092a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Tue, 2 Apr 2024 17:18:15 +0300 Subject: [PATCH 10/15] add rego rules --- .gitignore | 3 +-- bundle/kntrl/custom/custom.rego | 1 + bundle/kntrl/main.rego | 10 ++++++++++ bundle/kntrl/main_test.rego | 7 +++++++ bundle/kntrl/network/is_allowed_hosts.rego | 10 ++++++++++ bundle/kntrl/network/is_allowed_hosts_test.rego | 12 ++++++++++++ bundle/kntrl/network/is_allowed_ip.rego | 8 ++++++++ bundle/kntrl/network/is_allowed_ip_test.rego | 11 +++++++++++ bundle/kntrl/network/is_github_range.rego | 12 ++++++++++++ bundle/kntrl/network/is_github_range_test.rego | 13 +++++++++++++ bundle/kntrl/network/is_local_ip_addr.rego | 10 ++++++++++ bundle/kntrl/network/is_local_ip_addr_test.rego | 8 ++++++++ 12 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 bundle/kntrl/custom/custom.rego create mode 100644 bundle/kntrl/main.rego create mode 100644 bundle/kntrl/main_test.rego create mode 100644 bundle/kntrl/network/is_allowed_hosts.rego create mode 100644 bundle/kntrl/network/is_allowed_hosts_test.rego create mode 100644 bundle/kntrl/network/is_allowed_ip.rego create mode 100644 bundle/kntrl/network/is_allowed_ip_test.rego create mode 100644 bundle/kntrl/network/is_github_range.rego create mode 100644 bundle/kntrl/network/is_github_range_test.rego create mode 100644 bundle/kntrl/network/is_local_ip_addr.rego create mode 100644 bundle/kntrl/network/is_local_ip_addr_test.rego diff --git a/.gitignore b/.gitignore index d9411c2..b144360 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ # ignore .txt *.txt # ignore bin -kntrl # ignore object files internal/**/*.o internal/**/*x86.go @@ -10,4 +9,4 @@ dist/ \.idea/ \.vscode/ -.DS_Store \ No newline at end of file +.DS_Store diff --git a/bundle/kntrl/custom/custom.rego b/bundle/kntrl/custom/custom.rego new file mode 100644 index 0000000..f3e9d54 --- /dev/null +++ b/bundle/kntrl/custom/custom.rego @@ -0,0 +1 @@ +package kntrl.custom diff --git a/bundle/kntrl/main.rego b/bundle/kntrl/main.rego new file mode 100644 index 0000000..98adca8 --- /dev/null +++ b/bundle/kntrl/main.rego @@ -0,0 +1,10 @@ +package kntrl + +import rego.v1 + +default policy = false + +#policy if data.kntrl.network[_].policy +policy if { + data.kntrl.network[_].policy +} diff --git a/bundle/kntrl/main_test.rego b/bundle/kntrl/main_test.rego new file mode 100644 index 0000000..67e51d6 --- /dev/null +++ b/bundle/kntrl/main_test.rego @@ -0,0 +1,7 @@ +package kntrl + +test_main { + #policy with input as {"daddr":"1.1.1.1", "domains": ["github.local"]} + policy with input as {"daddr":"172.16.0.22", "domains": ["github.local"]} + #policy with input as {"daddr":"140.82.114.222", "domains": ["github.local"]} +} diff --git a/bundle/kntrl/network/is_allowed_hosts.rego b/bundle/kntrl/network/is_allowed_hosts.rego new file mode 100644 index 0000000..60220ad --- /dev/null +++ b/bundle/kntrl/network/is_allowed_hosts.rego @@ -0,0 +1,10 @@ +package kntrl.network["is_allowed_hosts"] + +import rego.v1 + +policy if { + hosts := input[_] + + some host in hosts + endswith(host, data.allowed_hosts[_]) +} diff --git a/bundle/kntrl/network/is_allowed_hosts_test.rego b/bundle/kntrl/network/is_allowed_hosts_test.rego new file mode 100644 index 0000000..d6827ef --- /dev/null +++ b/bundle/kntrl/network/is_allowed_hosts_test.rego @@ -0,0 +1,12 @@ +package kntrl.network["is_allowed_hosts_test"] + +import data.kntrl.network["is_allowed_hosts"] as rule + +# test local ip +test_allowed_domain{ + rule.policy with input as {"daddr":"1.1.1.1", "domains": ["foo.github.com"]} +} + +test_not_allowed_domain{ + not rule.policy with input as {"daddr":"140.88.114.222", "domains": ["foo.com"]} +} diff --git a/bundle/kntrl/network/is_allowed_ip.rego b/bundle/kntrl/network/is_allowed_ip.rego new file mode 100644 index 0000000..01e0411 --- /dev/null +++ b/bundle/kntrl/network/is_allowed_ip.rego @@ -0,0 +1,8 @@ +package kntrl.network["is_allowed_ip"] + +import rego.v1 + +policy if { + ipaddr := input[_] + data.allowed_ip_addr[_] == ipaddr +} diff --git a/bundle/kntrl/network/is_allowed_ip_test.rego b/bundle/kntrl/network/is_allowed_ip_test.rego new file mode 100644 index 0000000..dcdf5f2 --- /dev/null +++ b/bundle/kntrl/network/is_allowed_ip_test.rego @@ -0,0 +1,11 @@ +package kntrl.network["is_allowed_ip_test"] + +import data.kntrl.network["is_allowed_ip"] as rule + +test_allowed_ip{ + rule.policy with input as {"daddr":"140.82.114.222", "domains": ["foo.com"]} +} + +test_not_allowed_ip{ + not rule.policy with input as {"daddr":"140.88.114.222", "domains": ["foo.com"]} +} diff --git a/bundle/kntrl/network/is_github_range.rego b/bundle/kntrl/network/is_github_range.rego new file mode 100644 index 0000000..d9597e1 --- /dev/null +++ b/bundle/kntrl/network/is_github_range.rego @@ -0,0 +1,12 @@ +package kntrl.network["is_github_range"] + +import rego.v1 +import data.assets.github + +ranges := github.actions + +policy if { + ipaddr := input[_] + net.cidr_contains(ranges[_], ipaddr) + data.allow_github_meta == true +} diff --git a/bundle/kntrl/network/is_github_range_test.rego b/bundle/kntrl/network/is_github_range_test.rego new file mode 100644 index 0000000..79f67c5 --- /dev/null +++ b/bundle/kntrl/network/is_github_range_test.rego @@ -0,0 +1,13 @@ +package kntrl.network["is_github_range_test"] + +import data.kntrl.network["is_github_range"] as rule + +# test local ip +test_allow_github_meta { + rule.policy with input as {"daddr":"4.148.0.12", "domains": ["foo.bar"]} +} + +# test local ip +test_deny_allow_github_meta { + not rule.policy with input as {"daddr":"1.2.3.4", "domains": ["foo.bar"]} +} diff --git a/bundle/kntrl/network/is_local_ip_addr.rego b/bundle/kntrl/network/is_local_ip_addr.rego new file mode 100644 index 0000000..c179ebb --- /dev/null +++ b/bundle/kntrl/network/is_local_ip_addr.rego @@ -0,0 +1,10 @@ +package kntrl.network["is_local_ip_addr"] + +import rego.v1 + +policy if { + ipaddr := input.daddr + local_ranges := ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8", "0.0.0.0/32"] + net.cidr_contains(local_ranges[_], ipaddr) + data.allow_local_ip_ranges == true +} diff --git a/bundle/kntrl/network/is_local_ip_addr_test.rego b/bundle/kntrl/network/is_local_ip_addr_test.rego new file mode 100644 index 0000000..7dbca66 --- /dev/null +++ b/bundle/kntrl/network/is_local_ip_addr_test.rego @@ -0,0 +1,8 @@ +package kntrl.network["is_local_ip_addr_test"] + +import data.kntrl.network["is_local_ip_addr"] as rule + +# test local ip +test_allow_local_ip { + rule.policy with input as {"daddr":"172.16.0.22", "domains": ["github.local"]} +} From 7d2856e50b6f89529cfe8526d3757301d8bab6fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Tue, 2 Apr 2024 18:27:25 +0300 Subject: [PATCH 11/15] extend allowed ip list w host entry --- internal/handlers/tracer/tracer.go | 54 - pkg/parser/flag.go | 17 + pkg/utils/allowed.go | 3478 ---------------------------- pkg/utils/utils.go | 80 - 4 files changed, 17 insertions(+), 3612 deletions(-) delete mode 100644 pkg/utils/allowed.go diff --git a/internal/handlers/tracer/tracer.go b/internal/handlers/tracer/tracer.go index 89fd262..f112ddf 100644 --- a/internal/handlers/tracer/tracer.go +++ b/internal/handlers/tracer/tracer.go @@ -8,7 +8,6 @@ import ( "encoding/json" "errors" "fmt" - "net" "os" "os/signal" "syscall" @@ -331,56 +330,3 @@ func parseFlags(cmd *cobra.Command) (*domain.Data, error) { localranges, ), nil } - -func policyCheck(allowMap *ebpf.Map, allowedIPS []net.IP, domainNames []string, destinationAddress uint32) string { - allowedHostsAddress := []string{".github.com", ".kondukto.io"} - - if isInLocalRange(destinationAddress) { - - var ipUint32 = utils.IntToIP(destinationAddress) - if err := allowMap.Put(ipUint32, uint32(1)); err != nil { - logger.Log.Fatalf("failed to update allow list (map): %v", err) - } - logger.Log.Infof("ip [%d] in local range", ipUint32) - return domain.EventPolicyStatusPass - } - - for _, v := range allowedIPS { - if v.To4().Equal(utils.IntToIP(destinationAddress)) { - return domain.EventPolicyStatusPass - } - } - - for _, allowedHost := range allowedHostsAddress { - if utils.OneOfContains(allowedHost, domainNames) { - var ipUint32 = utils.IntToIP(destinationAddress) - - if err := allowMap.Put(ipUint32, uint32(1)); err != nil { - logger.Log.Fatalf("failed to update allow list (map): %v", err) - continue - } - - logger.Log.Infof("ip [%d] added into allowed list", ipUint32) - return domain.EventPolicyStatusPass - } - } - - return domain.EventPolicyStatusBlock -} - -func isInLocalRange(daddr uint32) bool { - ip := utils.IntToIP(daddr) - - for _, r := range utils.AllowedRanges { - _, cidr, err := net.ParseCIDR(r) - if err != nil { - continue - } - if cidr.Contains(ip) == true { - return true - } - continue - } - - return false -} diff --git a/pkg/parser/flag.go b/pkg/parser/flag.go index 7d13235..94c5da8 100644 --- a/pkg/parser/flag.go +++ b/pkg/parser/flag.go @@ -19,6 +19,7 @@ func ToDataJson(allowed_hosts, allowed_ips string, ghrange, localrange bool) *do hosts, ips := getDNSServers() hosts = append(hosts, parseAllowedHosts(allowed_hosts)...) ips = append(ips, parseAllowedIPAddr(allowed_ips)...) + ips = append(ips, host2ip(hosts)...) return &domain.Data{ AllowedHosts: hosts, @@ -58,6 +59,22 @@ func parseAllowedHosts(hosts string) (hl []string) { return hl } +// find a better solution +func host2ip(hosts []string) (ipl []net.IP) { + for _, h := range hosts { + ip, err := net.LookupIP(h) + if err != nil { + continue + } + for _, v := range ip { + if ipv4 := v.To4(); ipv4 != nil { + ipl = append(ipl, ipv4) + } + } + } + return +} + func getDNSServers() (hosts []string, ips []net.IP) { const resolvconf = "/etc/resolv.conf" diff --git a/pkg/utils/allowed.go b/pkg/utils/allowed.go deleted file mode 100644 index 4cffbf1..0000000 --- a/pkg/utils/allowed.go +++ /dev/null @@ -1,3478 +0,0 @@ -package utils - -var AllowedRanges = []string{ - "127.0.0.1/8", - "0.0.0.0/32", - "10.0.0.0/8", - "172.16.0.0/12", - "192.168.0.0/16", - // https://api.github.com/meta - // github actions allowed IP range(s) - "4.149.0.0/18", - "4.149.64.0/19", - "4.149.96.0/19", - "4.149.128.0/17", - "4.150.0.0/18", - "4.150.64.0/18", - "4.150.128.0/18", - "4.150.192.0/19", - "4.150.224.0/19", - "4.151.0.0/16", - "4.152.0.0/15", - "4.154.0.0/15", - "4.156.0.0/15", - "4.175.0.0/16", - "4.180.0.0/16", - "4.207.0.0/16", - "4.208.0.0/15", - "4.210.0.0/17", - "4.210.128.0/17", - "4.227.0.0/17", - "4.227.128.0/17", - "4.231.0.0/17", - "4.231.128.0/17", - "4.236.0.0/17", - "4.236.128.0/17", - "4.242.0.0/17", - "4.242.128.0/17", - "4.245.0.0/17", - "4.245.128.0/17", - "4.246.0.0/17", - "4.246.128.0/17", - "4.249.0.0/17", - "4.249.128.0/17", - "4.255.0.0/17", - "13.64.0.0/16", - "13.65.0.0/16", - "13.66.0.0/17", - "13.66.128.0/17", - "13.67.128.0/20", - "13.67.144.0/21", - "13.67.152.0/24", - "13.67.153.0/28", - "13.67.153.32/27", - "13.67.153.64/26", - "13.67.153.128/25", - "13.67.155.0/24", - "13.67.156.0/22", - "13.67.160.0/19", - "13.67.192.0/18", - "13.68.0.0/17", - "13.68.128.0/17", - "13.69.0.0/17", - "13.69.128.0/17", - "13.70.192.0/18", - "13.72.64.0/18", - "13.73.32.0/19", - "13.73.128.0/18", - "13.73.224.0/21", - "13.73.240.0/20", - "13.74.0.0/16", - "13.77.64.0/18", - "13.77.128.0/18", - "13.79.0.0/16", - "13.80.0.0/15", - "13.82.0.0/16", - "13.83.0.0/16", - "13.84.0.0/15", - "13.86.0.0/17", - "13.86.128.0/17", - "13.87.112.0/21", - "13.87.128.0/17", - "13.88.0.0/17", - "13.88.128.0/18", - "13.88.200.0/21", - "13.89.0.0/16", - "13.90.0.0/16", - "13.91.0.0/16", - "13.92.0.0/16", - "13.93.0.0/17", - "13.93.128.0/17", - "13.94.64.0/18", - "13.94.128.0/17", - "13.95.0.0/16", - "13.104.129.64/26", - "13.104.144.64/27", - "13.104.144.128/27", - "13.104.144.192/27", - "13.104.145.0/26", - "13.104.145.192/26", - "13.104.146.0/26", - "13.104.146.128/25", - "13.104.147.0/25", - "13.104.147.128/25", - "13.104.148.0/25", - "13.104.149.128/25", - "13.104.150.0/25", - "13.104.152.128/25", - "13.104.158.16/28", - "13.104.158.64/26", - "13.104.158.176/28", - "13.104.192.0/21", - "13.104.208.64/27", - "13.104.208.96/27", - "13.104.208.128/27", - "13.104.208.160/28", - "13.104.208.192/26", - "13.104.209.0/24", - "13.104.210.0/24", - "13.104.211.0/25", - "13.104.213.0/25", - "13.104.214.0/25", - "13.104.214.128/25", - "13.104.215.0/25", - "13.104.217.0/25", - "13.104.218.128/25", - "13.104.219.128/25", - "13.104.220.0/25", - "13.104.220.128/25", - "13.104.222.0/24", - "13.104.223.0/25", - "13.105.14.0/25", - "13.105.14.128/26", - "13.105.17.0/26", - "13.105.17.64/26", - "13.105.17.128/26", - "13.105.17.192/26", - "13.105.18.0/26", - "13.105.18.160/27", - "13.105.18.192/26", - "13.105.19.0/25", - "13.105.19.128/25", - "13.105.20.192/26", - "13.105.21.0/24", - "13.105.22.0/24", - "13.105.23.0/26", - "13.105.23.64/26", - "13.105.23.128/25", - "13.105.24.0/24", - "13.105.25.0/24", - "13.105.26.0/24", - "13.105.27.0/25", - "13.105.27.192/27", - "13.105.28.0/28", - "13.105.28.16/28", - "13.105.28.32/28", - "13.105.28.48/28", - "13.105.28.128/25", - "13.105.29.0/25", - "13.105.29.128/25", - "13.105.36.0/27", - "13.105.36.32/28", - "13.105.36.64/27", - "13.105.36.128/26", - "13.105.36.192/26", - "13.105.37.0/26", - "13.105.37.64/26", - "13.105.37.128/26", - "13.105.37.192/26", - "13.105.49.0/31", - "13.105.49.2/31", - "13.105.49.4/31", - "13.105.49.6/31", - "13.105.49.8/31", - "13.105.49.10/31", - "13.105.49.12/31", - "13.105.49.14/31", - "13.105.49.16/31", - "13.105.49.18/31", - "13.105.49.20/31", - "13.105.49.22/31", - "13.105.49.24/31", - "13.105.49.26/31", - "13.105.49.28/31", - "13.105.49.30/31", - "13.105.49.32/31", - "13.105.49.34/31", - "13.105.49.36/31", - "13.105.49.38/31", - "13.105.49.40/31", - "13.105.49.42/31", - "13.105.49.44/31", - "13.105.49.46/31", - "13.105.49.48/31", - "13.105.49.50/31", - "13.105.49.52/31", - "13.105.49.54/31", - "13.105.49.56/31", - "13.105.49.58/31", - "13.105.49.60/31", - "13.105.49.62/31", - "13.105.49.64/31", - "13.105.49.66/31", - "13.105.49.68/31", - "13.105.49.70/31", - "13.105.49.72/31", - "13.105.49.74/31", - "13.105.49.76/31", - "13.105.49.78/31", - "13.105.49.80/31", - "13.105.49.82/31", - "13.105.49.84/31", - "13.105.49.86/31", - "13.105.49.88/31", - "13.105.49.90/31", - "13.105.49.92/31", - "13.105.49.94/31", - "13.105.49.96/31", - "13.105.49.98/31", - "13.105.49.100/31", - "13.105.49.102/31", - "13.105.49.104/31", - "13.105.49.106/31", - "13.105.49.108/31", - "13.105.49.110/31", - "13.105.49.112/31", - "13.105.49.114/31", - "13.105.49.116/31", - "13.105.49.118/31", - "13.105.49.120/31", - "13.105.49.122/31", - "13.105.49.124/31", - "13.105.49.126/31", - "13.105.49.128/31", - "13.105.49.130/31", - "13.105.49.132/31", - "13.105.49.134/31", - "13.105.49.136/31", - "13.105.49.138/31", - "13.105.49.140/31", - "13.105.49.142/31", - "13.105.49.144/31", - "13.105.49.146/31", - "13.105.49.148/31", - "13.105.49.150/31", - "13.105.49.152/31", - "13.105.49.154/31", - "13.105.49.156/31", - "13.105.49.158/31", - "13.105.49.160/31", - "13.105.49.162/31", - "13.105.49.164/31", - "13.105.49.166/31", - "13.105.49.168/31", - "13.105.49.170/31", - "13.105.49.172/31", - "13.105.49.174/31", - "13.105.49.176/31", - "13.105.49.178/31", - "13.105.49.180/31", - "13.105.49.182/31", - "13.105.49.184/31", - "13.105.49.186/31", - "13.105.49.188/31", - "13.105.49.190/31", - "13.105.49.192/31", - "13.105.49.194/31", - "13.105.49.196/31", - "13.105.49.198/31", - "13.105.49.200/31", - "13.105.49.202/31", - "13.105.49.204/31", - "13.105.49.206/31", - "13.105.49.208/31", - "13.105.49.210/31", - "13.105.49.212/31", - "13.105.49.214/31", - "13.105.49.216/31", - "13.105.49.218/31", - "13.105.49.220/31", - "13.105.49.222/31", - "13.105.49.224/31", - "13.105.49.226/31", - "13.105.49.228/31", - "13.105.49.230/31", - "13.105.49.232/31", - "13.105.49.234/31", - "13.105.49.236/31", - "13.105.49.238/31", - "13.105.49.240/31", - "13.105.49.242/31", - "13.105.49.244/31", - "13.105.49.246/31", - "13.105.49.248/31", - "13.105.49.250/31", - "13.105.49.252/31", - "13.105.49.254/31", - "13.105.53.0/25", - "13.105.53.192/26", - "13.105.60.0/27", - "13.105.60.32/28", - "13.105.60.48/28", - "13.105.60.64/27", - "13.105.60.96/27", - "13.105.60.128/27", - "13.105.60.192/26", - "13.105.66.32/27", - "13.105.66.64/26", - "13.105.66.128/28", - "13.105.66.144/28", - "13.105.66.160/27", - "13.105.66.192/26", - "13.105.67.0/25", - "13.105.67.128/25", - "13.105.74.0/27", - "13.105.74.32/28", - "13.105.74.48/28", - "13.105.74.64/27", - "13.105.74.128/26", - "13.105.75.0/27", - "13.105.75.32/28", - "13.105.75.64/27", - "13.105.96.64/27", - "13.105.96.96/28", - "13.105.96.128/25", - "13.105.97.0/27", - "13.105.98.48/28", - "13.105.98.96/27", - "13.105.98.128/27", - "13.105.98.160/27", - "13.105.98.192/28", - "13.105.98.224/27", - "13.105.101.32/28", - "13.105.101.48/28", - "13.105.101.64/26", - "13.105.101.176/28", - "13.105.102.16/28", - "13.105.102.64/26", - "13.105.102.224/27", - "13.105.103.0/28", - "13.105.103.32/27", - "13.105.103.128/27", - "13.105.103.160/28", - "13.105.103.192/27", - "13.105.104.32/27", - "13.105.104.64/28", - "13.105.104.96/27", - "13.105.104.240/28", - "13.105.105.32/27", - "13.105.105.64/27", - "13.105.105.96/27", - "13.105.105.128/28", - "13.105.105.160/27", - "13.105.106.0/27", - "13.105.106.32/28", - "13.105.106.64/27", - "13.105.107.112/28", - "13.105.107.160/27", - "13.105.107.192/27", - "13.105.117.0/31", - "13.105.117.2/31", - "13.105.117.4/31", - "13.105.117.6/31", - "13.105.117.8/31", - "13.105.117.10/31", - "13.105.117.12/31", - "13.105.117.14/31", - "13.105.117.16/31", - "13.105.117.18/31", - "13.105.117.20/31", - "13.105.117.22/31", - "13.105.117.24/31", - "13.105.117.26/31", - "13.105.117.28/31", - "13.105.117.30/31", - "13.105.117.32/31", - "13.105.117.34/31", - "13.105.117.36/31", - "13.105.117.38/31", - "13.105.117.40/31", - "13.105.117.42/31", - "13.105.117.44/31", - "13.105.117.46/31", - "13.105.117.48/31", - "13.105.117.50/31", - "13.105.117.52/31", - "13.105.117.54/31", - "13.105.117.56/31", - "13.105.117.58/31", - "13.105.117.60/31", - "13.105.117.62/31", - "13.105.117.64/31", - "13.105.117.66/31", - "13.105.117.68/31", - "13.105.117.70/31", - "13.105.117.72/31", - "13.105.117.74/31", - "13.105.117.76/31", - "13.105.117.78/31", - "13.105.117.80/31", - "13.105.117.82/31", - "13.105.117.84/31", - "13.105.117.86/31", - "13.105.117.88/31", - "13.105.117.90/31", - "13.105.117.92/31", - "13.105.117.94/31", - "13.105.117.96/31", - "13.105.117.98/31", - "13.105.117.100/31", - "13.105.117.102/31", - "13.105.117.104/31", - "13.105.117.106/31", - "13.105.117.108/31", - "13.105.117.110/31", - "13.105.117.112/31", - "13.105.117.114/31", - "13.105.117.116/31", - "13.105.117.118/31", - "13.105.117.120/31", - "13.105.117.122/31", - "13.105.117.124/31", - "13.105.117.126/31", - "13.105.117.128/31", - "13.105.117.130/31", - "13.105.117.132/31", - "13.105.117.134/31", - "13.105.117.136/31", - "13.105.117.138/31", - "13.105.117.140/31", - "13.105.117.142/31", - "13.105.117.144/31", - "13.105.117.146/31", - "13.105.117.148/31", - "13.105.117.150/31", - "13.105.117.152/31", - "13.105.117.154/31", - "13.105.117.156/31", - "13.105.117.158/31", - "13.105.117.160/31", - "13.105.117.162/31", - "13.105.117.164/31", - "13.105.117.166/31", - "13.105.117.168/31", - "13.105.117.170/31", - "13.105.117.172/31", - "13.105.117.174/31", - "13.105.117.176/31", - "13.105.117.178/31", - "13.105.117.180/31", - "13.105.117.182/31", - "13.105.117.184/31", - "13.105.117.186/31", - "13.105.117.188/31", - "13.105.117.190/31", - "13.105.117.192/31", - "13.105.117.194/31", - "13.105.117.196/31", - "13.105.117.198/31", - "13.105.117.200/31", - "13.105.117.202/31", - "13.105.117.204/31", - "13.105.117.206/31", - "13.105.117.208/31", - "13.105.117.210/31", - "13.105.117.212/31", - "13.105.117.214/31", - "13.105.117.216/31", - "13.105.117.218/31", - "13.105.117.220/31", - "13.105.117.222/31", - "13.105.117.224/31", - "13.105.117.226/31", - "13.105.117.228/31", - "13.105.117.230/31", - "13.105.117.232/31", - "13.105.117.234/31", - "13.105.117.236/31", - "13.105.117.238/31", - "13.105.117.240/31", - "13.105.117.242/31", - "13.105.117.244/31", - "13.105.117.246/31", - "13.105.117.248/31", - "13.105.117.250/31", - "13.105.117.252/31", - "13.105.117.254/31", - "13.105.220.0/31", - "13.105.220.2/31", - "13.105.220.4/31", - "13.105.220.6/31", - "20.1.128.0/17", - "20.3.0.0/16", - "20.4.0.0/16", - "20.7.0.0/16", - "20.8.0.0/16", - "20.9.0.0/17", - "20.9.128.0/17", - "20.10.0.0/16", - "20.12.0.0/17", - "20.12.128.0/17", - "20.13.0.0/17", - "20.13.128.0/17", - "20.14.0.0/17", - "20.14.128.0/17", - "20.15.0.0/17", - "20.15.128.0/17", - "20.16.0.0/16", - "20.17.72.0/21", - "20.18.184.0/21", - "20.22.0.0/16", - "20.23.0.0/16", - "20.25.0.0/17", - "20.25.128.0/18", - "20.25.192.0/18", - "20.29.0.0/17", - "20.29.128.0/17", - "20.31.0.0/16", - "20.33.0.0/24", - "20.33.1.0/24", - "20.33.2.0/24", - "20.33.3.0/24", - "20.33.4.0/24", - "20.33.6.0/24", - "20.33.8.0/24", - "20.33.12.0/24", - "20.33.13.0/24", - "20.33.14.0/24", - "20.33.15.0/24", - "20.33.17.0/24", - "20.33.20.0/24", - "20.33.21.0/24", - "20.33.22.0/24", - "20.33.25.0/24", - "20.33.26.0/24", - "20.33.27.0/24", - "20.33.29.0/24", - "20.33.30.0/24", - "20.33.31.0/24", - "20.33.32.0/24", - "20.33.33.0/24", - "20.33.36.0/24", - "20.33.37.0/24", - "20.33.39.0/24", - "20.33.40.0/24", - "20.33.41.0/24", - "20.33.42.0/24", - "20.33.44.0/24", - "20.33.45.0/24", - "20.33.46.0/24", - "20.33.48.0/24", - "20.33.49.0/24", - "20.33.51.0/24", - "20.33.53.0/24", - "20.33.135.0/24", - "20.33.138.0/24", - "20.33.143.0/24", - "20.33.144.0/24", - "20.33.145.0/24", - "20.33.147.0/24", - "20.33.149.0/24", - "20.33.150.0/24", - "20.33.156.0/24", - "20.33.157.0/24", - "20.33.159.0/24", - "20.33.160.0/24", - "20.33.163.0/24", - "20.33.164.0/24", - "20.33.165.0/24", - "20.33.167.0/24", - "20.33.178.0/24", - "20.33.185.0/24", - "20.33.186.0/24", - "20.33.189.0/24", - "20.33.191.0/24", - "20.33.197.0/24", - "20.33.198.0/24", - "20.33.201.0/24", - "20.33.205.0/24", - "20.33.206.0/24", - "20.33.207.0/24", - "20.36.0.0/19", - "20.36.96.0/21", - "20.36.128.0/17", - "20.37.128.0/18", - "20.38.0.0/20", - "20.38.32.0/20", - "20.38.64.0/19", - "20.38.96.0/23", - "20.38.98.0/24", - "20.38.99.0/24", - "20.38.100.0/23", - "20.38.102.0/23", - "20.38.104.0/23", - "20.38.108.0/23", - "20.38.122.0/23", - "20.38.160.0/20", - "20.38.176.0/21", - "20.38.200.0/22", - "20.38.208.0/22", - "20.39.32.0/19", - "20.40.24.0/21", - "20.40.192.0/18", - "20.41.0.0/18", - "20.41.128.0/18", - "20.42.0.0/17", - "20.42.128.0/19", - "20.42.160.0/23", - "20.42.168.0/21", - "20.42.176.0/20", - "20.43.192.0/18", - "20.44.8.0/21", - "20.44.16.0/21", - "20.44.64.0/18", - "20.45.0.0/18", - "20.45.120.0/21", - "20.46.224.0/19", - "20.47.0.0/24", - "20.47.1.0/24", - "20.47.2.0/24", - "20.47.3.0/24", - "20.47.7.0/24", - "20.47.8.0/24", - "20.47.15.0/24", - "20.47.16.0/23", - "20.47.18.0/23", - "20.47.20.0/23", - "20.47.22.0/23", - "20.47.24.0/23", - "20.47.29.0/24", - "20.47.30.0/24", - "20.47.31.0/24", - "20.47.32.0/24", - "20.47.58.0/23", - "20.47.60.0/23", - "20.47.62.0/23", - "20.47.69.0/24", - "20.47.76.0/23", - "20.47.78.0/23", - "20.47.96.0/23", - "20.47.100.0/24", - "20.47.107.0/24", - "20.47.108.0/23", - "20.47.110.0/24", - "20.47.111.0/24", - "20.47.113.0/24", - "20.47.115.0/24", - "20.47.116.0/24", - "20.47.117.0/24", - "20.47.118.0/24", - "20.47.119.0/24", - "20.47.120.0/23", - "20.49.0.0/18", - "20.49.88.0/21", - "20.49.96.0/21", - "20.49.104.0/21", - "20.49.112.0/21", - "20.49.120.0/21", - "20.50.0.0/18", - "20.50.64.0/20", - "20.50.80.0/21", - "20.50.88.0/21", - "20.50.128.0/17", - "20.51.0.0/21", - "20.51.8.0/21", - "20.51.64.0/18", - "20.51.128.0/17", - "20.54.0.0/17", - "20.54.128.0/17", - "20.55.0.0/17", - "20.55.192.0/18", - "20.56.0.0/16", - "20.57.0.0/17", - "20.57.128.0/18", - "20.57.192.0/19", - "20.59.0.0/18", - "20.59.64.0/18", - "20.59.192.0/18", - "20.60.0.0/24", - "20.60.1.0/24", - "20.60.2.0/23", - "20.60.6.0/23", - "20.60.14.0/24", - "20.60.18.0/24", - "20.60.19.0/24", - "20.60.20.0/24", - "20.60.26.0/23", - "20.60.28.0/23", - "20.60.30.0/23", - "20.60.34.0/23", - "20.60.38.0/23", - "20.60.40.0/23", - "20.60.48.0/22", - "20.60.52.0/23", - "20.60.56.0/22", - "20.60.60.0/22", - "20.60.64.0/22", - "20.60.68.0/22", - "20.60.80.0/23", - "20.60.82.0/23", - "20.60.88.0/22", - "20.60.128.0/23", - "20.60.130.0/24", - "20.60.132.0/23", - "20.60.134.0/23", - "20.60.140.0/23", - "20.60.144.0/23", - "20.60.146.0/23", - "20.60.148.0/23", - "20.60.150.0/23", - "20.60.152.0/23", - "20.60.160.0/23", - "20.60.162.0/23", - "20.60.168.0/23", - "20.60.178.0/23", - "20.60.180.0/23", - "20.60.194.0/23", - "20.60.196.0/23", - "20.60.204.0/23", - "20.60.220.0/23", - "20.60.222.0/23", - "20.60.224.0/23", - "20.60.228.0/23", - "20.60.230.0/23", - "20.60.232.0/23", - "20.60.236.0/23", - "20.60.240.0/23", - "20.60.244.0/23", - "20.60.246.0/23", - "20.60.250.0/23", - "20.61.0.0/16", - "20.62.0.0/17", - "20.62.128.0/17", - "20.64.0.0/17", - "20.64.128.0/17", - "20.65.0.0/17", - "20.65.128.0/17", - "20.66.0.0/17", - "20.66.128.0/17", - "20.67.0.0/17", - "20.67.128.0/17", - "20.69.64.0/18", - "20.69.128.0/18", - "20.69.192.0/18", - "20.71.0.0/16", - "20.72.32.0/19", - "20.72.64.0/18", - "20.72.128.0/18", - "20.72.192.0/18", - "20.73.0.0/16", - "20.75.0.0/17", - "20.75.128.0/17", - "20.76.0.0/16", - "20.80.0.0/18", - "20.80.64.0/18", - "20.80.128.0/18", - "20.80.192.0/18", - "20.81.0.0/17", - "20.81.128.0/17", - "20.82.0.0/17", - "20.82.128.0/17", - "20.83.0.0/18", - "20.83.64.0/18", - "20.83.128.0/18", - "20.83.192.0/18", - "20.84.0.0/17", - "20.84.128.0/17", - "20.85.0.0/17", - "20.85.128.0/17", - "20.86.0.0/16", - "20.88.0.0/18", - "20.88.96.0/19", - "20.88.128.0/18", - "20.88.192.0/18", - "20.93.0.0/17", - "20.93.128.0/17", - "20.94.0.0/17", - "20.94.128.0/18", - "20.94.192.0/18", - "20.95.0.0/24", - "20.95.1.0/24", - "20.95.2.0/24", - "20.95.3.0/24", - "20.95.4.0/24", - "20.95.5.0/24", - "20.95.6.0/24", - "20.95.7.0/24", - "20.95.8.0/21", - "20.95.16.0/24", - "20.95.18.0/24", - "20.95.19.0/24", - "20.95.21.0/24", - "20.95.22.0/24", - "20.95.25.0/24", - "20.95.26.0/24", - "20.95.27.0/24", - "20.95.30.0/24", - "20.95.31.0/24", - "20.95.32.0/24", - "20.95.33.0/24", - "20.95.34.0/24", - "20.95.35.0/24", - "20.95.36.0/24", - "20.95.37.0/24", - "20.95.38.0/23", - "20.95.51.0/24", - "20.95.52.0/24", - "20.95.53.0/24", - "20.95.54.0/24", - "20.95.55.0/24", - "20.95.56.0/24", - "20.95.57.0/24", - "20.95.58.0/24", - "20.95.59.0/24", - "20.95.60.0/24", - "20.95.61.0/24", - "20.95.64.0/24", - "20.95.66.0/24", - "20.95.68.0/23", - "20.95.72.0/23", - "20.95.76.0/23", - "20.95.81.0/24", - "20.95.88.0/21", - "20.95.98.0/24", - "20.95.103.0/24", - "20.95.255.0/29", - "20.96.0.0/16", - "20.97.0.0/17", - "20.97.128.0/17", - "20.98.0.0/18", - "20.98.64.0/18", - "20.98.128.0/18", - "20.98.192.0/18", - "20.99.128.0/17", - "20.101.0.0/16", - "20.102.0.0/17", - "20.102.192.0/18", - "20.103.0.0/16", - "20.105.0.0/17", - "20.105.128.0/17", - "20.106.0.0/18", - "20.106.64.0/18", - "20.106.128.0/17", - "20.107.0.0/17", - "20.107.128.0/17", - "20.109.0.0/17", - "20.109.128.0/18", - "20.109.192.0/18", - "20.110.0.0/16", - "20.112.0.0/17", - "20.112.160.0/20", - "20.112.176.0/21", - "20.112.184.0/21", - "20.112.192.0/18", - "20.114.0.0/18", - "20.114.64.0/18", - "20.114.128.0/17", - "20.115.0.0/17", - "20.115.128.0/17", - "20.118.0.0/18", - "20.118.64.0/18", - "20.118.128.0/18", - "20.118.192.0/18", - "20.119.0.0/17", - "20.119.128.0/17", - "20.120.0.0/17", - "20.120.128.0/17", - "20.121.0.0/16", - "20.122.0.0/16", - "20.123.0.0/17", - "20.123.128.0/17", - "20.124.0.0/16", - "20.125.0.0/18", - "20.125.64.0/18", - "20.125.128.0/19", - "20.125.160.0/19", - "20.125.192.0/19", - "20.125.224.0/20", - "20.125.240.0/20", - "20.126.0.0/16", - "20.127.0.0/16", - "20.135.0.0/22", - "20.135.4.0/23", - "20.135.6.0/23", - "20.135.8.0/22", - "20.135.12.0/22", - "20.135.16.0/23", - "20.135.18.0/23", - "20.135.20.0/23", - "20.135.24.0/23", - "20.135.70.0/23", - "20.135.74.0/23", - "20.135.134.0/23", - "20.135.136.0/22", - "20.135.140.0/22", - "20.135.144.0/23", - "20.135.188.0/22", - "20.135.192.0/23", - "20.135.194.0/23", - "20.135.196.0/22", - "20.135.200.0/22", - "20.135.204.0/23", - "20.135.216.0/22", - "20.135.220.0/23", - "20.135.222.0/23", - "20.135.224.0/22", - "20.135.228.0/22", - "20.135.232.0/23", - "20.135.254.0/23", - "20.136.0.0/25", - "20.136.0.128/25", - "20.136.1.0/24", - "20.136.2.0/24", - "20.136.3.0/25", - "20.136.3.128/25", - "20.136.4.0/24", - "20.136.5.0/24", - "20.136.6.0/24", - "20.136.7.0/25", - "20.143.0.0/24", - "20.143.1.0/24", - "20.143.2.0/24", - "20.143.3.0/24", - "20.143.4.0/24", - "20.143.5.0/24", - "20.143.8.0/23", - "20.143.10.0/23", - "20.143.12.0/24", - "20.143.13.0/24", - "20.143.32.0/23", - "20.143.34.0/23", - "20.143.38.0/24", - "20.143.39.0/24", - "20.143.46.0/23", - "20.143.50.0/23", - "20.143.52.0/23", - "20.150.8.0/23", - "20.150.17.0/25", - "20.150.20.128/25", - "20.150.25.0/24", - "20.150.26.0/24", - "20.150.29.0/24", - "20.150.30.0/24", - "20.150.32.0/23", - "20.150.34.0/23", - "20.150.36.0/24", - "20.150.37.0/24", - "20.150.38.0/23", - "20.150.42.0/24", - "20.150.43.128/25", - "20.150.47.128/25", - "20.150.48.0/24", - "20.150.49.0/24", - "20.150.50.0/23", - "20.150.58.0/24", - "20.150.63.0/24", - "20.150.67.0/24", - "20.150.68.0/24", - "20.150.70.0/24", - "20.150.72.0/24", - "20.150.74.0/24", - "20.150.75.0/24", - "20.150.76.0/24", - "20.150.77.0/24", - "20.150.78.0/24", - "20.150.79.0/24", - "20.150.82.0/24", - "20.150.83.0/24", - "20.150.84.0/24", - "20.150.87.0/24", - "20.150.88.0/24", - "20.150.89.0/24", - "20.150.90.0/24", - "20.150.91.0/24", - "20.150.93.0/24", - "20.150.94.0/24", - "20.150.95.0/24", - "20.150.102.0/24", - "20.150.104.0/24", - "20.150.107.0/24", - "20.150.122.0/24", - "20.150.126.0/24", - "20.150.128.0/17", - "20.152.0.0/23", - "20.152.2.0/23", - "20.152.4.0/23", - "20.152.6.0/23", - "20.157.6.0/23", - "20.157.17.0/24", - "20.157.18.0/24", - "20.157.19.0/24", - "20.157.21.0/24", - "20.157.22.0/24", - "20.157.24.0/24", - "20.157.25.0/24", - "20.157.27.0/24", - "20.157.29.0/24", - "20.157.30.0/24", - "20.157.32.0/24", - "20.157.33.0/24", - "20.157.34.0/23", - "20.157.36.0/23", - "20.157.39.0/24", - "20.157.40.0/24", - "20.157.43.0/24", - "20.157.47.0/24", - "20.157.48.0/23", - "20.157.50.0/23", - "20.157.54.0/24", - "20.157.57.0/24", - "20.157.59.0/24", - "20.157.60.0/24", - "20.157.61.0/24", - "20.157.62.0/23", - "20.157.64.0/21", - "20.157.72.0/24", - "20.157.73.0/24", - "20.157.76.0/22", - "20.157.80.0/22", - "20.157.84.0/24", - "20.157.86.0/24", - "20.157.87.0/24", - "20.157.88.0/24", - "20.157.90.0/24", - "20.157.91.0/24", - "20.157.93.0/24", - "20.157.95.0/24", - "20.157.97.0/24", - "20.157.99.0/24", - "20.157.100.0/24", - "20.157.104.0/24", - "20.157.105.0/24", - "20.157.106.0/24", - "20.157.109.0/24", - "20.157.110.0/24", - "20.157.111.0/24", - "20.157.114.0/24", - "20.157.115.0/24", - "20.157.116.0/24", - "20.157.118.0/24", - "20.157.119.0/24", - "20.157.122.0/24", - "20.157.123.0/24", - "20.157.124.0/24", - "20.157.125.0/24", - "20.157.127.0/24", - "20.157.130.0/24", - "20.157.132.0/24", - "20.157.134.0/24", - "20.157.142.0/23", - "20.157.145.0/24", - "20.157.146.0/24", - "20.157.147.0/24", - "20.157.158.0/24", - "20.157.159.0/24", - "20.157.163.0/24", - "20.157.164.0/24", - "20.157.166.0/24", - "20.157.167.0/24", - "20.157.170.0/24", - "20.157.171.0/24", - "20.157.172.0/24", - "20.157.179.0/24", - "20.157.180.0/24", - "20.157.181.0/24", - "20.157.184.0/24", - "20.157.185.0/24", - "20.157.186.0/24", - "20.157.191.0/24", - "20.157.194.0/24", - "20.157.209.0/24", - "20.157.212.0/24", - "20.157.215.0/24", - "20.157.216.0/24", - "20.157.217.0/24", - "20.157.221.0/24", - "20.157.223.0/24", - "20.157.230.0/24", - "20.157.231.0/24", - "20.157.236.0/24", - "20.157.239.0/24", - "20.157.240.0/24", - "20.157.244.0/24", - "20.157.245.0/24", - "20.157.247.0/24", - "20.157.248.0/24", - "20.157.249.0/24", - "20.157.250.0/24", - "20.157.251.0/24", - "20.157.252.0/24", - "20.157.253.0/24", - "20.160.0.0/16", - "20.161.0.0/16", - "20.163.0.0/17", - "20.163.128.0/17", - "20.165.0.0/17", - "20.166.0.0/16", - "20.168.0.0/17", - "20.168.128.0/19", - "20.168.160.0/21", - "20.168.192.0/18", - "20.169.0.0/17", - "20.169.128.0/17", - "20.171.0.0/16", - "20.172.0.0/17", - "20.172.128.0/17", - "20.184.64.0/18", - "20.184.128.0/17", - "20.185.0.0/16", - "20.186.0.0/17", - "20.186.128.0/18", - "20.186.192.0/18", - "20.187.0.0/18", - "20.188.64.0/19", - "20.189.0.0/18", - "20.189.128.0/18", - "20.190.0.0/18", - "20.190.128.0/24", - "20.190.129.0/24", - "20.190.130.0/24", - "20.190.131.0/24", - "20.190.132.0/24", - "20.190.133.0/24", - "20.190.134.0/24", - "20.190.135.0/24", - "20.190.137.0/24", - "20.190.151.0/24", - "20.190.152.0/24", - "20.190.153.0/24", - "20.190.154.0/24", - "20.190.155.0/24", - "20.190.156.0/24", - "20.190.157.0/24", - "20.190.159.0/24", - "20.190.160.0/24", - "20.190.190.128/25", - "20.190.192.0/18", - "20.191.0.0/18", - "20.191.64.0/18", - "20.201.135.0/24", - "20.201.136.0/24", - "20.201.147.0/24", - "20.201.148.0/24", - "20.201.223.0/24", - "20.201.224.0/23", - "20.201.231.0/24", - "20.202.1.0/24", - "20.202.2.0/24", - "20.202.12.0/22", - "20.202.16.0/22", - "20.202.20.0/24", - "20.202.21.0/24", - "20.202.22.0/24", - "20.202.23.0/24", - "20.202.24.0/24", - "20.202.25.0/24", - "20.202.26.0/23", - "20.202.28.0/23", - "20.202.30.0/24", - "20.202.31.0/24", - "20.202.32.0/23", - "20.202.34.0/24", - "20.202.35.0/24", - "20.202.36.0/23", - "20.202.38.0/24", - "20.202.39.0/24", - "20.202.84.0/24", - "20.202.85.0/24", - "20.202.89.0/24", - "20.202.90.0/24", - "20.202.93.0/24", - "20.202.94.0/24", - "20.202.97.0/24", - "20.202.98.0/24", - "20.202.105.0/24", - "20.202.106.0/24", - "20.202.109.0/24", - "20.202.110.0/24", - "20.202.113.0/24", - "20.202.114.0/24", - "20.202.117.0/24", - "20.202.118.0/24", - "20.202.119.0/24", - "20.202.120.0/22", - "20.202.124.0/24", - "20.202.125.0/24", - "20.202.126.0/24", - "20.202.129.0/24", - "20.202.130.0/24", - "20.202.133.0/24", - "20.202.134.0/24", - "20.202.137.0/24", - "20.202.138.0/24", - "20.202.140.0/24", - "20.202.141.0/24", - "20.202.142.0/23", - "20.202.144.0/22", - "20.202.148.0/23", - "20.202.150.0/24", - "20.202.151.0/24", - "20.202.152.0/24", - "20.202.153.0/24", - "20.202.154.0/24", - "20.202.155.0/24", - "20.202.156.0/24", - "20.202.157.0/24", - "20.202.158.0/24", - "20.202.159.0/24", - "20.202.160.0/24", - "20.202.161.0/24", - "20.202.162.0/24", - "20.202.163.0/24", - "20.202.164.0/24", - "20.202.165.0/24", - "20.202.166.0/24", - "20.202.167.0/24", - "20.202.168.0/24", - "20.202.184.0/21", - "20.202.192.0/23", - "20.202.194.0/23", - "20.202.196.0/22", - "20.202.200.0/23", - "20.202.202.0/23", - "20.202.204.0/22", - "20.202.208.0/24", - "20.202.209.0/24", - "20.202.210.0/24", - "20.202.248.0/24", - "20.209.0.0/23", - "20.209.4.0/23", - "20.209.10.0/23", - "20.209.14.0/23", - "20.209.18.0/23", - "20.209.26.0/23", - "20.209.34.0/23", - "20.209.36.0/23", - "20.209.38.0/23", - "20.209.40.0/23", - "20.209.48.0/23", - "20.209.52.0/23", - "20.209.58.0/23", - "20.209.62.0/23", - "20.209.68.0/23", - "20.209.72.0/23", - "20.209.74.0/23", - "20.209.76.0/23", - "20.209.84.0/23", - "20.209.90.0/23", - "20.209.92.0/23", - "20.209.96.0/23", - "20.209.98.0/23", - "20.209.100.0/23", - "20.209.102.0/23", - "20.209.104.0/23", - "20.209.106.0/23", - "20.209.108.0/23", - "20.209.110.0/23", - "20.209.112.0/23", - "20.209.114.0/23", - "20.209.116.0/23", - "20.209.138.0/23", - "20.209.142.0/23", - "20.209.146.0/23", - "20.209.154.0/23", - "20.209.160.0/23", - "20.209.162.0/23", - "20.209.178.0/23", - "20.209.180.0/23", - "20.209.184.0/23", - "20.209.186.0/23", - "20.209.190.0/23", - "20.209.192.0/23", - "20.209.194.0/23", - "20.209.196.0/23", - "20.209.218.0/24", - "20.209.220.0/23", - "20.209.226.0/23", - "20.209.230.0/23", - "20.209.244.0/23", - "20.221.0.0/17", - "20.221.192.0/18", - "20.223.0.0/16", - "20.224.0.0/16", - "20.225.0.0/16", - "20.228.64.0/18", - "20.228.128.0/17", - "20.229.0.0/16", - "20.230.0.0/17", - "20.230.128.0/17", - "20.231.0.0/17", - "20.231.192.0/18", - "20.232.0.0/16", - "20.234.0.0/17", - "20.234.128.0/17", - "20.236.0.0/18", - "20.236.64.0/18", - "20.236.128.0/18", - "20.236.192.0/18", - "20.237.0.0/17", - "20.237.128.0/17", - "20.238.0.0/17", - "20.238.128.0/17", - "20.241.0.0/17", - "20.241.128.0/17", - "20.242.0.0/17", - "20.242.128.0/17", - "20.245.0.0/16", - "20.246.0.0/17", - "20.246.128.0/17", - "20.252.0.0/17", - "20.253.0.0/17", - "20.253.128.0/17", - "23.96.0.0/17", - "23.96.128.0/17", - "23.97.128.0/17", - "23.98.45.0/24", - "23.98.46.0/24", - "23.98.47.0/24", - "23.98.48.0/21", - "23.98.128.0/17", - "23.99.0.0/18", - "23.99.64.0/19", - "23.99.128.0/17", - "23.100.0.0/20", - "23.100.16.0/20", - "23.100.32.0/20", - "23.100.48.0/20", - "23.100.64.0/21", - "23.100.72.0/21", - "23.100.80.0/21", - "23.100.120.0/21", - "23.100.128.0/18", - "23.100.224.0/20", - "23.100.240.0/20", - "23.101.32.0/21", - "23.101.48.0/20", - "23.101.64.0/20", - "23.101.80.0/21", - "23.101.112.0/20", - "23.101.128.0/20", - "23.101.144.0/20", - "23.101.160.0/20", - "23.101.176.0/20", - "23.101.192.0/20", - "23.102.0.0/18", - "23.102.96.0/19", - "23.102.128.0/18", - "23.102.192.0/21", - "23.102.202.0/24", - "23.102.203.0/24", - "23.102.204.0/22", - "23.102.208.0/20", - "23.103.64.32/27", - "23.103.64.64/27", - "40.64.64.0/18", - "40.64.128.0/21", - "40.64.144.0/27", - "40.64.144.32/27", - "40.64.144.64/27", - "40.64.144.192/29", - "40.64.145.0/28", - "40.64.145.160/28", - "40.64.145.176/28", - "40.64.146.80/28", - "40.64.146.96/28", - "40.64.146.176/28", - "40.64.146.192/28", - "40.64.163.0/25", - "40.64.164.128/25", - "40.64.165.0/25", - "40.64.168.128/25", - "40.64.169.0/25", - "40.64.169.128/25", - "40.64.172.128/25", - "40.64.173.128/25", - "40.64.174.0/25", - "40.64.184.0/25", - "40.65.0.0/18", - "40.65.64.0/18", - "40.65.192.0/18", - "40.67.128.0/19", - "40.67.160.0/19", - "40.67.192.0/19", - "40.67.224.0/19", - "40.68.0.0/16", - "40.69.0.0/18", - "40.69.64.0/19", - "40.69.128.0/18", - "40.69.192.0/19", - "40.70.0.0/18", - "40.70.64.0/20", - "40.70.80.0/21", - "40.70.128.0/17", - "40.71.0.0/16", - "40.74.0.0/18", - "40.74.160.0/19", - "40.74.192.0/18", - "40.75.0.0/19", - "40.75.64.0/18", - "40.75.128.0/17", - "40.76.0.0/16", - "40.77.0.0/17", - "40.77.128.128/25", - "40.77.129.0/24", - "40.77.130.0/25", - "40.77.130.128/26", - "40.77.130.192/26", - "40.77.131.0/25", - "40.77.131.128/26", - "40.77.131.224/28", - "40.77.132.0/24", - "40.77.133.0/24", - "40.77.136.0/28", - "40.77.136.32/28", - "40.77.136.48/28", - "40.77.136.64/28", - "40.77.136.80/28", - "40.77.136.96/28", - "40.77.137.0/25", - "40.77.137.128/26", - "40.77.137.192/27", - "40.77.138.0/25", - "40.77.138.128/25", - "40.77.139.0/25", - "40.77.139.128/25", - "40.77.160.0/27", - "40.77.161.64/26", - "40.77.162.0/24", - "40.77.163.0/24", - "40.77.164.0/24", - "40.77.165.0/24", - "40.77.166.160/27", - "40.77.166.192/26", - "40.77.167.0/24", - "40.77.168.0/24", - "40.77.169.0/24", - "40.77.170.0/24", - "40.77.171.0/24", - "40.77.172.0/24", - "40.77.174.0/24", - "40.77.175.0/27", - "40.77.175.64/27", - "40.77.175.96/27", - "40.77.175.160/27", - "40.77.175.192/27", - "40.77.175.240/28", - "40.77.176.0/24", - "40.77.177.0/24", - "40.77.178.0/23", - "40.77.180.0/23", - "40.77.182.0/28", - "40.77.182.16/28", - "40.77.182.32/27", - "40.77.182.64/27", - "40.77.182.96/27", - "40.77.182.128/27", - "40.77.182.192/26", - "40.77.183.0/24", - "40.77.184.0/25", - "40.77.184.128/25", - "40.77.185.128/25", - "40.77.186.0/23", - "40.77.188.0/22", - "40.77.196.0/24", - "40.77.197.0/24", - "40.77.198.0/26", - "40.77.198.64/26", - "40.77.198.128/25", - "40.77.199.0/25", - "40.77.199.128/26", - "40.77.199.192/26", - "40.77.200.0/25", - "40.77.200.128/25", - "40.77.202.0/24", - "40.77.224.0/28", - "40.77.224.32/27", - "40.77.224.96/27", - "40.77.224.128/25", - "40.77.225.0/24", - "40.77.226.128/25", - "40.77.228.0/24", - "40.77.229.0/24", - "40.77.230.0/24", - "40.77.231.0/24", - "40.77.232.128/25", - "40.77.233.0/24", - "40.77.234.0/25", - "40.77.234.160/27", - "40.77.234.192/27", - "40.77.234.224/27", - "40.77.236.0/27", - "40.77.236.32/27", - "40.77.236.80/28", - "40.77.236.128/27", - "40.77.236.160/28", - "40.77.236.176/28", - "40.77.237.0/26", - "40.77.237.64/26", - "40.77.240.0/25", - "40.77.240.128/25", - "40.77.241.0/24", - "40.77.242.0/23", - "40.77.244.0/25", - "40.77.245.0/24", - "40.77.247.0/24", - "40.77.248.0/25", - "40.77.248.128/25", - "40.77.249.0/24", - "40.77.250.0/24", - "40.77.251.0/24", - "40.77.254.0/26", - "40.77.254.128/25", - "40.77.255.0/25", - "40.77.255.128/26", - "40.77.255.192/26", - "40.78.0.0/17", - "40.78.128.0/18", - "40.78.208.32/30", - "40.78.208.48/28", - "40.78.208.64/28", - "40.78.210.0/24", - "40.78.211.0/24", - "40.78.214.0/24", - "40.78.216.0/24", - "40.78.217.0/24", - "40.78.219.0/24", - "40.78.220.0/24", - "40.78.221.0/24", - "40.78.222.0/24", - "40.78.224.0/21", - "40.78.240.0/20", - "40.79.0.0/21", - "40.79.8.0/27", - "40.79.8.32/28", - "40.79.8.64/27", - "40.79.8.96/28", - "40.79.9.0/24", - "40.79.16.0/20", - "40.79.32.0/20", - "40.79.48.0/27", - "40.79.48.32/28", - "40.79.49.0/24", - "40.79.56.0/21", - "40.79.64.0/20", - "40.79.80.0/21", - "40.79.90.0/24", - "40.79.91.0/28", - "40.79.92.0/24", - "40.79.93.0/28", - "40.79.94.0/24", - "40.79.95.0/28", - "40.79.152.0/21", - "40.79.204.0/27", - "40.79.204.32/28", - "40.79.204.48/28", - "40.79.204.64/27", - "40.79.204.96/27", - "40.79.204.128/27", - "40.79.204.160/27", - "40.79.205.64/28", - "40.79.205.96/27", - "40.79.205.192/27", - "40.79.205.224/28", - "40.79.206.0/27", - "40.79.206.64/27", - "40.79.206.128/27", - "40.79.206.160/27", - "40.79.206.192/27", - "40.79.207.80/28", - "40.79.207.128/25", - "40.79.240.0/20", - "40.80.144.0/21", - "40.80.152.0/21", - "40.80.160.0/24", - "40.80.184.0/21", - "40.80.192.0/19", - "40.81.0.0/20", - "40.81.32.0/20", - "40.82.4.0/22", - "40.82.16.0/22", - "40.82.24.0/22", - "40.82.36.0/22", - "40.82.44.0/22", - "40.82.60.0/22", - "40.82.92.0/22", - "40.82.96.0/22", - "40.82.248.0/21", - "40.83.0.0/20", - "40.83.16.0/21", - "40.83.24.0/26", - "40.83.24.64/27", - "40.83.24.128/25", - "40.83.25.0/24", - "40.83.26.0/23", - "40.83.28.0/22", - "40.83.32.0/19", - "40.83.128.0/17", - "40.84.0.0/17", - "40.84.128.0/17", - "40.85.0.0/17", - "40.85.128.0/20", - "40.85.144.0/20", - "40.85.160.0/19", - "40.86.0.0/17", - "40.86.128.0/19", - "40.86.160.0/19", - "40.87.0.0/17", - "40.87.128.0/19", - "40.87.160.0/22", - "40.87.164.0/22", - "40.87.168.0/30", - "40.87.168.8/29", - "40.87.168.16/28", - "40.87.168.32/29", - "40.87.168.48/28", - "40.87.168.64/30", - "40.87.168.70/31", - "40.87.168.72/29", - "40.87.168.80/28", - "40.87.168.96/27", - "40.87.168.128/26", - "40.87.168.192/28", - "40.87.168.210/31", - "40.87.168.212/30", - "40.87.168.216/29", - "40.87.168.224/27", - "40.87.169.0/27", - "40.87.169.32/29", - "40.87.169.44/30", - "40.87.169.48/29", - "40.87.169.56/31", - "40.87.169.60/30", - "40.87.169.64/27", - "40.87.169.96/31", - "40.87.169.102/31", - "40.87.169.104/29", - "40.87.169.112/28", - "40.87.169.128/29", - "40.87.169.136/31", - "40.87.169.140/30", - "40.87.169.160/27", - "40.87.169.192/26", - "40.87.170.0/25", - "40.87.170.128/28", - "40.87.170.144/31", - "40.87.170.152/29", - "40.87.170.160/28", - "40.87.170.176/29", - "40.87.170.184/30", - "40.87.170.194/31", - "40.87.170.196/30", - "40.87.170.214/31", - "40.87.170.216/30", - "40.87.170.228/30", - "40.87.170.232/29", - "40.87.170.240/29", - "40.87.170.248/30", - "40.87.171.2/31", - "40.87.171.4/30", - "40.87.171.8/29", - "40.87.171.16/28", - "40.87.171.36/30", - "40.87.171.40/31", - "40.87.171.72/29", - "40.87.171.80/28", - "40.87.171.96/27", - "40.87.171.128/27", - "40.87.171.160/31", - "40.87.171.166/31", - "40.87.171.168/29", - "40.87.171.176/28", - "40.87.171.192/27", - "40.87.171.224/28", - "40.87.171.240/29", - "40.87.171.248/31", - "40.87.172.0/22", - "40.87.176.0/25", - "40.87.176.128/27", - "40.87.176.160/29", - "40.87.176.174/31", - "40.87.176.184/30", - "40.87.176.192/28", - "40.87.176.216/29", - "40.87.176.224/29", - "40.87.176.232/31", - "40.87.176.240/28", - "40.87.177.16/28", - "40.87.177.32/27", - "40.87.177.64/27", - "40.87.177.96/28", - "40.87.177.112/29", - "40.87.177.120/31", - "40.87.177.124/30", - "40.87.177.128/28", - "40.87.177.144/29", - "40.87.177.152/31", - "40.87.177.156/30", - "40.87.177.160/27", - "40.87.177.192/29", - "40.87.177.200/30", - "40.87.177.212/30", - "40.87.177.216/29", - "40.87.177.224/27", - "40.87.178.0/24", - "40.87.179.0/25", - "40.87.179.128/26", - "40.87.179.192/31", - "40.87.179.202/31", - "40.87.179.204/30", - "40.87.179.208/28", - "40.87.179.224/27", - "40.87.180.0/30", - "40.87.180.4/31", - "40.87.180.14/31", - "40.87.180.16/30", - "40.87.180.20/31", - "40.87.180.28/30", - "40.87.180.32/29", - "40.87.180.42/31", - "40.87.180.44/30", - "40.87.180.48/28", - "40.87.180.64/30", - "40.87.180.74/31", - "40.87.180.76/30", - "40.87.180.80/28", - "40.87.180.96/27", - "40.87.180.128/26", - "40.87.180.192/30", - "40.87.180.202/31", - "40.87.180.204/30", - "40.87.180.208/28", - "40.87.180.224/28", - "40.87.180.240/29", - "40.87.180.248/30", - "40.87.181.4/30", - "40.87.181.8/29", - "40.87.181.16/28", - "40.87.181.32/27", - "40.87.181.64/26", - "40.87.181.128/28", - "40.87.181.144/29", - "40.87.181.152/31", - "40.87.181.162/31", - "40.87.181.164/30", - "40.87.181.168/29", - "40.87.181.176/28", - "40.87.181.192/26", - "40.87.182.4/30", - "40.87.182.8/29", - "40.87.182.24/29", - "40.87.182.32/28", - "40.87.182.48/29", - "40.87.182.56/30", - "40.87.182.62/31", - "40.87.182.64/26", - "40.87.182.128/25", - "40.87.183.0/28", - "40.87.183.16/29", - "40.87.183.24/30", - "40.87.183.34/31", - "40.87.183.36/30", - "40.87.183.42/31", - "40.87.183.44/30", - "40.87.183.54/31", - "40.87.183.56/29", - "40.87.183.64/26", - "40.87.183.144/28", - "40.87.183.160/27", - "40.87.183.192/27", - "40.87.183.224/29", - "40.87.183.232/30", - "40.87.183.236/31", - "40.87.183.244/30", - "40.87.183.248/29", - "40.87.184.0/22", - "40.87.188.0/22", - "40.87.232.0/21", - "40.88.0.0/16", - "40.89.224.0/19", - "40.90.16.0/27", - "40.90.16.128/27", - "40.90.16.192/26", - "40.90.17.64/27", - "40.90.17.96/27", - "40.90.17.192/27", - "40.90.18.64/26", - "40.90.18.128/26", - "40.90.18.192/26", - "40.90.19.64/26", - "40.90.19.128/25", - "40.90.20.0/25", - "40.90.20.128/25", - "40.90.21.0/25", - "40.90.21.128/25", - "40.90.22.0/25", - "40.90.22.128/25", - "40.90.23.0/25", - "40.90.23.128/25", - "40.90.24.128/25", - "40.90.25.0/26", - "40.90.25.64/26", - "40.90.25.128/26", - "40.90.25.192/26", - "40.90.26.128/25", - "40.90.27.64/26", - "40.90.27.128/26", - "40.90.28.64/26", - "40.90.28.128/26", - "40.90.30.160/27", - "40.90.30.192/26", - "40.90.31.128/25", - "40.90.128.16/28", - "40.90.128.128/28", - "40.90.128.224/28", - "40.90.129.128/26", - "40.90.129.192/27", - "40.90.129.224/27", - "40.90.130.0/27", - "40.90.130.64/28", - "40.90.130.96/28", - "40.90.130.160/27", - "40.90.130.192/28", - "40.90.130.224/28", - "40.90.131.32/27", - "40.90.131.192/27", - "40.90.131.224/27", - "40.90.132.48/28", - "40.90.132.96/27", - "40.90.132.128/26", - "40.90.132.192/26", - "40.90.133.0/27", - "40.90.133.64/27", - "40.90.133.96/28", - "40.90.133.112/28", - "40.90.133.128/28", - "40.90.134.64/26", - "40.90.134.128/26", - "40.90.134.192/26", - "40.90.135.0/26", - "40.90.135.64/26", - "40.90.135.128/25", - "40.90.136.0/28", - "40.90.136.16/28", - "40.90.136.32/27", - "40.90.136.160/28", - "40.90.136.176/28", - "40.90.136.224/27", - "40.90.137.96/27", - "40.90.137.192/27", - "40.90.137.224/27", - "40.90.138.0/27", - "40.90.138.160/27", - "40.90.138.208/28", - "40.90.139.32/27", - "40.90.139.192/27", - "40.90.139.224/27", - "40.90.140.64/27", - "40.90.140.96/27", - "40.90.140.128/27", - "40.90.140.160/27", - "40.90.140.192/27", - "40.90.140.224/27", - "40.90.141.0/27", - "40.90.141.32/27", - "40.90.141.96/27", - "40.90.141.128/27", - "40.90.141.160/27", - "40.90.142.128/27", - "40.90.142.224/28", - "40.90.142.240/28", - "40.90.143.0/27", - "40.90.143.192/26", - "40.90.144.0/27", - "40.90.144.32/27", - "40.90.144.64/26", - "40.90.144.128/26", - "40.90.144.192/27", - "40.90.145.0/27", - "40.90.145.32/27", - "40.90.145.64/27", - "40.90.145.160/27", - "40.90.145.192/27", - "40.90.145.224/27", - "40.90.146.0/28", - "40.90.146.16/28", - "40.90.146.32/27", - "40.90.146.64/26", - "40.90.146.128/27", - "40.90.147.0/27", - "40.90.147.96/27", - "40.90.148.0/26", - "40.90.148.64/27", - "40.90.148.96/27", - "40.90.148.128/27", - "40.90.148.160/28", - "40.90.148.176/28", - "40.90.148.192/27", - "40.90.149.96/27", - "40.90.149.128/25", - "40.90.150.32/27", - "40.90.150.128/25", - "40.90.151.144/28", - "40.90.152.160/27", - "40.90.153.0/26", - "40.90.153.96/27", - "40.90.153.128/25", - "40.90.154.64/26", - "40.90.155.0/26", - "40.90.155.128/26", - "40.90.155.192/26", - "40.90.156.128/26", - "40.90.156.192/26", - "40.90.157.64/26", - "40.90.157.128/26", - "40.90.158.64/26", - "40.90.158.128/25", - "40.90.159.0/24", - "40.90.192.0/19", - "40.90.224.0/19", - "40.91.0.0/22", - "40.91.4.0/22", - "40.91.12.16/28", - "40.91.12.48/28", - "40.91.12.64/26", - "40.91.12.128/28", - "40.91.12.160/27", - "40.91.12.208/28", - "40.91.12.240/28", - "40.91.13.64/27", - "40.91.13.96/28", - "40.91.13.128/27", - "40.91.13.240/28", - "40.91.14.0/24", - "40.91.16.0/22", - "40.91.20.0/22", - "40.91.24.0/22", - "40.91.28.0/22", - "40.91.32.0/22", - "40.91.64.0/18", - "40.91.160.0/19", - "40.91.192.0/18", - "40.93.0.0/23", - "40.93.2.0/24", - "40.93.3.0/24", - "40.93.4.0/24", - "40.93.5.0/24", - "40.93.7.0/24", - "40.93.8.0/24", - "40.93.9.0/24", - "40.93.10.0/24", - "40.93.11.0/24", - "40.93.12.0/24", - "40.93.13.0/24", - "40.93.14.0/24", - "40.93.20.0/24", - "40.93.64.0/24", - "40.93.65.0/24", - "40.93.192.0/24", - "40.93.193.0/24", - "40.93.194.0/23", - "40.93.196.0/23", - "40.96.50.0/24", - "40.96.61.0/24", - "40.96.63.0/24", - "40.97.4.0/24", - "40.97.5.0/24", - "40.97.6.0/24", - "40.97.7.0/24", - "40.97.12.0/24", - "40.97.14.0/26", - "40.97.20.0/24", - "40.97.22.0/23", - "40.97.32.0/22", - "40.97.44.0/24", - "40.97.45.0/26", - "40.97.45.64/26", - "40.97.45.128/25", - "40.97.46.0/25", - "40.97.46.128/26", - "40.97.46.192/26", - "40.97.47.0/25", - "40.97.47.128/25", - "40.97.52.0/26", - "40.97.53.0/25", - "40.97.53.128/26", - "40.97.53.192/26", - "40.97.54.0/25", - "40.97.55.64/26", - "40.97.55.128/25", - "40.97.63.128/25", - "40.97.72.0/26", - "40.101.2.0/25", - "40.101.2.128/26", - "40.101.2.192/26", - "40.101.3.0/25", - "40.101.20.64/26", - "40.101.20.128/25", - "40.101.21.0/25", - "40.101.21.128/26", - "40.112.36.0/25", - "40.112.36.128/25", - "40.112.37.0/26", - "40.112.37.64/26", - "40.112.38.192/26", - "40.112.48.0/20", - "40.112.64.0/19", - "40.112.96.0/19", - "40.112.128.0/17", - "40.113.0.0/18", - "40.113.64.0/19", - "40.113.96.0/19", - "40.113.128.0/18", - "40.113.192.0/18", - "40.114.0.0/17", - "40.114.128.0/17", - "40.115.0.0/18", - "40.115.96.0/19", - "40.116.0.0/16", - "40.117.32.0/19", - "40.117.64.0/18", - "40.117.128.0/17", - "40.118.0.0/17", - "40.118.128.0/17", - "40.119.0.0/18", - "40.119.88.0/22", - "40.119.128.0/19", - "40.120.148.0/25", - "40.120.148.128/27", - "40.120.148.160/29", - "40.120.148.168/30", - "40.120.152.0/28", - "40.120.152.16/29", - "40.120.152.24/30", - "40.120.156.0/28", - "40.120.156.16/29", - "40.120.156.24/30", - "40.120.160.0/22", - "40.120.164.2/31", - "40.120.164.4/30", - "40.120.164.8/29", - "40.120.164.16/29", - "40.120.164.24/30", - "40.120.164.36/30", - "40.120.164.40/29", - "40.120.164.48/29", - "40.120.164.56/31", - "40.121.0.0/16", - "40.122.16.0/20", - "40.122.32.0/19", - "40.122.64.0/18", - "40.122.128.0/17", - "40.123.0.0/17", - "40.123.132.0/22", - "40.123.140.0/22", - "40.123.144.0/26", - "40.123.144.64/29", - "40.123.144.104/29", - "40.123.144.112/28", - "40.123.144.128/28", - "40.123.144.144/29", - "40.123.144.156/30", - "40.123.144.160/27", - "40.123.144.192/27", - "40.123.144.224/28", - "40.123.144.240/29", - "40.123.144.248/30", - "40.123.144.252/31", - "40.123.145.6/31", - "40.123.145.8/30", - "40.123.145.12/31", - "40.123.145.22/31", - "40.123.145.24/29", - "40.123.145.32/28", - "40.123.145.48/29", - "40.123.145.56/30", - "40.123.145.68/30", - "40.123.145.72/29", - "40.123.145.80/28", - "40.123.145.96/27", - "40.123.145.128/27", - "40.123.145.160/30", - "40.123.145.166/31", - "40.123.145.168/29", - "40.123.145.176/28", - "40.123.145.192/28", - "40.123.145.208/30", - "40.123.145.212/31", - "40.123.145.222/31", - "40.123.145.224/27", - "40.123.146.0/28", - "40.123.146.16/29", - "40.123.146.24/30", - "40.123.146.28/31", - "40.123.146.42/31", - "40.123.146.44/30", - "40.123.146.48/31", - "40.123.146.54/31", - "40.123.146.56/29", - "40.123.146.64/26", - "40.123.146.128/27", - "40.123.146.160/30", - "40.123.146.164/31", - "40.123.146.182/31", - "40.123.146.184/29", - "40.123.146.192/29", - "40.123.146.200/30", - "40.123.146.204/31", - "40.123.146.210/31", - "40.123.146.212/30", - "40.123.146.216/29", - "40.123.146.224/27", - "40.123.147.0/27", - "40.123.147.32/31", - "40.123.147.38/31", - "40.123.147.40/29", - "40.123.147.48/28", - "40.123.147.64/28", - "40.123.147.80/30", - "40.123.147.84/31", - "40.123.147.104/29", - "40.123.147.112/29", - "40.123.147.138/31", - "40.123.147.140/30", - "40.123.147.144/31", - "40.123.147.148/30", - "40.123.147.152/29", - "40.123.147.160/28", - "40.123.147.176/30", - "40.123.147.180/31", - "40.123.147.184/29", - "40.123.147.192/26", - "40.123.152.0/22", - "40.123.156.0/22", - "40.123.160.0/22", - "40.123.164.0/25", - "40.123.164.128/29", - "40.123.164.136/31", - "40.123.164.150/31", - "40.123.164.152/29", - "40.123.164.160/27", - "40.123.164.192/26", - "40.123.165.4/30", - "40.123.165.8/29", - "40.123.165.16/29", - "40.123.165.24/30", - "40.123.165.30/31", - "40.123.165.32/28", - "40.123.165.48/29", - "40.123.165.56/30", - "40.123.165.60/31", - "40.123.165.68/30", - "40.123.165.72/30", - "40.123.165.78/31", - "40.123.165.80/28", - "40.123.165.96/27", - "40.123.165.128/28", - "40.123.165.144/29", - "40.123.165.154/31", - "40.123.165.156/30", - "40.123.165.160/27", - "40.123.165.192/26", - "40.123.166.0/25", - "40.123.166.128/31", - "40.123.168.0/24", - "40.123.169.0/30", - "40.123.169.6/31", - "40.123.169.8/29", - "40.123.169.16/28", - "40.123.169.32/27", - "40.123.169.64/27", - "40.123.169.96/29", - "40.123.169.104/31", - "40.123.169.108/30", - "40.123.169.112/28", - "40.123.169.140/30", - "40.123.169.144/28", - "40.123.169.160/27", - "40.123.169.192/26", - "40.123.170.0/29", - "40.123.170.8/30", - "40.123.170.12/31", - "40.123.170.22/31", - "40.123.170.24/29", - "40.123.170.32/28", - "40.123.170.52/30", - "40.123.170.86/31", - "40.123.170.88/29", - "40.123.170.96/29", - "40.123.170.104/30", - "40.123.170.108/31", - "40.123.170.116/30", - "40.123.170.120/29", - "40.123.170.130/31", - "40.123.170.132/30", - "40.123.170.136/29", - "40.123.170.144/28", - "40.123.170.160/28", - "40.123.170.176/29", - "40.123.170.184/31", - "40.123.170.192/31", - "40.123.170.196/30", - "40.123.170.200/29", - "40.123.170.208/29", - "40.123.170.216/30", - "40.123.170.220/31", - "40.123.170.224/27", - "40.123.171.0/24", - "40.123.176.0/22", - "40.123.180.0/22", - "40.123.184.0/26", - "40.123.184.64/28", - "40.123.184.80/29", - "40.123.184.88/31", - "40.123.184.98/31", - "40.123.184.100/30", - "40.123.184.104/29", - "40.123.184.112/28", - "40.123.184.128/27", - "40.123.184.168/29", - "40.123.184.176/29", - "40.123.184.184/31", - "40.123.184.194/31", - "40.123.184.196/30", - "40.123.184.200/30", - "40.123.184.204/31", - "40.123.184.208/29", - "40.123.184.230/31", - "40.123.184.232/29", - "40.123.185.8/29", - "40.123.185.16/28", - "40.123.185.32/27", - "40.123.185.64/30", - "40.123.185.100/30", - "40.123.185.104/30", - "40.123.185.110/31", - "40.123.185.112/28", - "40.123.185.128/27", - "40.123.185.192/27", - "40.123.185.224/28", - "40.123.185.240/29", - "40.123.185.250/31", - "40.123.185.254/31", - "40.123.186.0/29", - "40.123.186.8/31", - "40.123.186.28/31", - "40.123.186.42/31", - "40.123.186.44/30", - "40.123.186.48/31", - "40.123.186.52/31", - "40.123.186.56/29", - "40.123.186.64/26", - "40.123.186.128/25", - "40.123.187.0/25", - "40.123.187.128/27", - "40.123.187.160/31", - "40.123.187.170/31", - "40.123.187.172/30", - "40.123.187.176/29", - "40.123.187.188/30", - "40.123.187.192/29", - "40.123.187.200/31", - "40.123.187.204/30", - "40.123.187.208/28", - "40.123.187.226/31", - "40.123.187.228/30", - "40.123.187.232/29", - "40.123.187.244/30", - "40.123.187.248/29", - "40.124.0.0/16", - "40.125.32.0/19", - "40.125.64.0/18", - "40.126.0.0/24", - "40.126.1.0/24", - "40.126.2.0/24", - "40.126.3.0/24", - "40.126.4.0/24", - "40.126.5.0/24", - "40.126.6.0/24", - "40.126.7.0/24", - "40.126.9.0/24", - "40.126.23.0/24", - "40.126.24.0/24", - "40.126.25.0/24", - "40.126.26.0/24", - "40.126.27.0/24", - "40.126.28.0/24", - "40.126.29.0/24", - "40.126.31.0/24", - "40.126.32.0/24", - "40.126.62.128/25", - "40.126.202.0/24", - "40.127.96.0/20", - "40.127.128.0/17", - "51.104.64.0/18", - "51.104.128.0/18", - "51.105.96.0/19", - "51.105.128.0/17", - "51.124.0.0/16", - "51.136.0.0/16", - "51.137.0.0/17", - "51.137.192.0/18", - "51.138.0.0/17", - "51.138.176.0/20", - "51.138.224.0/20", - "51.141.160.0/19", - "51.143.0.0/17", - "51.144.0.0/16", - "51.145.128.0/17", - "52.96.11.0/24", - "52.101.0.0/22", - "52.101.4.0/22", - "52.101.8.0/24", - "52.101.9.0/24", - "52.101.10.0/24", - "52.101.11.0/24", - "52.101.12.0/22", - "52.101.16.0/22", - "52.101.20.0/22", - "52.101.28.0/22", - "52.101.32.0/22", - "52.101.36.0/22", - "52.101.41.0/24", - "52.101.42.0/24", - "52.101.43.0/24", - "52.101.44.0/23", - "52.101.46.0/23", - "52.101.48.0/23", - "52.101.50.0/24", - "52.101.51.0/24", - "52.101.52.0/22", - "52.101.56.0/22", - "52.101.60.0/24", - "52.101.61.0/24", - "52.101.62.0/23", - "52.101.64.0/24", - "52.101.65.0/24", - "52.101.66.0/23", - "52.101.68.0/24", - "52.101.69.0/24", - "52.101.70.0/23", - "52.101.72.0/23", - "52.101.84.0/24", - "52.101.85.0/24", - "52.101.86.0/23", - "52.101.193.0/24", - "52.101.194.0/24", - "52.102.128.0/24", - "52.102.129.0/24", - "52.102.130.0/24", - "52.102.131.0/24", - "52.102.132.0/24", - "52.102.134.0/24", - "52.102.135.0/24", - "52.102.136.0/24", - "52.102.137.0/24", - "52.102.138.0/24", - "52.102.139.0/24", - "52.102.140.0/24", - "52.102.146.0/24", - "52.102.158.0/24", - "52.102.159.0/24", - "52.102.160.0/24", - "52.102.161.0/24", - "52.103.0.0/24", - "52.103.1.0/24", - "52.103.2.0/24", - "52.103.3.0/24", - "52.103.4.0/24", - "52.103.5.0/24", - "52.103.6.0/24", - "52.103.8.0/24", - "52.103.9.0/24", - "52.103.10.0/24", - "52.103.11.0/24", - "52.103.12.0/24", - "52.103.13.0/24", - "52.103.14.0/24", - "52.103.20.0/24", - "52.103.32.0/24", - "52.103.33.0/24", - "52.103.128.0/24", - "52.103.129.0/24", - "52.103.130.0/24", - "52.103.131.0/24", - "52.103.132.0/24", - "52.103.134.0/24", - "52.103.136.0/24", - "52.103.137.0/24", - "52.103.138.0/24", - "52.103.139.0/24", - "52.103.140.0/24", - "52.103.145.0/24", - "52.103.160.0/24", - "52.103.161.0/24", - "52.106.0.0/24", - "52.106.2.0/24", - "52.106.3.0/24", - "52.106.4.0/24", - "52.108.0.0/21", - "52.108.16.0/21", - "52.108.24.0/21", - "52.108.56.0/21", - "52.108.72.0/24", - "52.108.78.0/24", - "52.108.79.0/24", - "52.108.80.0/24", - "52.108.93.0/24", - "52.108.102.0/23", - "52.108.104.0/24", - "52.108.105.0/24", - "52.108.106.0/23", - "52.108.108.0/23", - "52.108.110.0/24", - "52.108.139.0/24", - "52.108.165.0/24", - "52.108.166.0/23", - "52.108.174.0/23", - "52.108.176.0/24", - "52.108.182.0/24", - "52.108.185.0/24", - "52.108.186.0/24", - "52.108.196.0/24", - "52.108.197.0/24", - "52.108.203.0/24", - "52.108.208.0/21", - "52.108.216.0/22", - "52.108.240.0/21", - "52.108.248.0/21", - "52.109.0.0/22", - "52.109.4.0/22", - "52.109.8.0/22", - "52.109.12.0/22", - "52.109.16.0/22", - "52.109.20.0/22", - "52.109.24.0/22", - "52.109.76.0/22", - "52.109.88.0/22", - "52.111.211.0/24", - "52.111.227.0/24", - "52.111.229.0/24", - "52.111.230.0/24", - "52.111.235.0/24", - "52.111.236.0/24", - "52.111.239.0/24", - "52.111.243.0/24", - "52.111.245.0/24", - "52.111.246.0/24", - "52.112.14.0/23", - "52.112.17.0/24", - "52.112.18.0/23", - "52.112.22.0/24", - "52.112.23.0/24", - "52.112.24.0/21", - "52.112.38.0/24", - "52.112.39.0/24", - "52.112.53.0/24", - "52.112.72.0/24", - "52.112.76.0/22", - "52.112.83.0/24", - "52.112.84.0/23", - "52.112.86.0/23", - "52.112.92.0/24", - "52.112.94.0/24", - "52.112.95.0/24", - "52.112.97.0/24", - "52.112.98.0/23", - "52.112.101.0/24", - "52.112.102.0/24", - "52.112.104.0/24", - "52.112.105.0/24", - "52.112.106.0/23", - "52.112.108.0/24", - "52.112.109.0/24", - "52.112.110.0/24", - "52.112.112.0/24", - "52.112.113.0/24", - "52.112.114.0/24", - "52.112.115.0/24", - "52.112.116.0/24", - "52.112.117.0/24", - "52.112.123.0/24", - "52.112.124.0/24", - "52.112.127.0/24", - "52.112.144.0/20", - "52.112.191.0/24", - "52.112.197.0/24", - "52.112.216.0/21", - "52.112.228.0/25", - "52.112.228.128/25", - "52.112.229.0/24", - "52.112.232.0/24", - "52.112.233.0/24", - "52.112.236.0/24", - "52.112.237.0/24", - "52.112.238.0/24", - "52.113.9.0/24", - "52.113.12.0/24", - "52.113.16.0/20", - "52.113.37.0/24", - "52.113.38.0/23", - "52.113.40.0/21", - "52.113.48.0/20", - "52.113.69.0/24", - "52.113.83.0/24", - "52.113.85.0/24", - "52.113.86.0/24", - "52.113.112.0/20", - "52.113.129.0/24", - "52.113.130.0/24", - "52.113.135.0/24", - "52.113.136.0/21", - "52.113.144.0/21", - "52.113.160.0/19", - "52.113.198.0/24", - "52.113.199.0/24", - "52.113.205.0/24", - "52.113.206.0/24", - "52.113.208.0/20", - "52.114.72.0/22", - "52.114.76.0/22", - "52.114.128.0/22", - "52.114.132.0/22", - "52.114.136.0/21", - "52.114.144.0/22", - "52.114.148.0/22", - "52.114.152.0/21", - "52.114.168.0/22", - "52.114.172.0/22", - "52.114.180.0/22", - "52.114.184.0/23", - "52.114.186.0/23", - "52.114.206.0/23", - "52.114.208.0/24", - "52.114.210.0/23", - "52.114.212.0/23", - "52.114.231.0/24", - "52.114.233.0/24", - "52.114.241.0/24", - "52.114.242.0/24", - "52.114.248.0/22", - "52.114.252.0/22", - "52.115.54.0/24", - "52.115.55.0/24", - "52.115.62.0/23", - "52.115.68.0/22", - "52.115.76.0/22", - "52.115.84.0/22", - "52.115.88.0/22", - "52.115.92.0/24", - "52.115.93.0/24", - "52.115.140.0/22", - "52.115.144.0/20", - "52.115.160.0/19", - "52.115.192.0/19", - "52.115.224.0/23", - "52.115.226.0/23", - "52.115.228.0/23", - "52.115.230.0/24", - "52.115.231.0/24", - "52.115.232.0/24", - "52.115.233.0/24", - "52.115.234.0/24", - "52.115.242.0/23", - "52.120.0.0/19", - "52.120.32.0/19", - "52.120.64.0/19", - "52.120.96.0/19", - "52.120.128.0/21", - "52.120.136.0/21", - "52.120.152.0/22", - "52.120.192.0/20", - "52.120.208.0/20", - "52.120.224.0/20", - "52.121.0.0/21", - "52.121.16.0/21", - "52.121.24.0/21", - "52.121.32.0/22", - "52.121.36.0/22", - "52.121.48.0/20", - "52.121.64.0/20", - "52.121.166.0/24", - "52.122.0.0/24", - "52.122.1.0/24", - "52.122.2.0/23", - "52.122.4.0/23", - "52.122.6.0/24", - "52.122.7.0/24", - "52.122.8.0/22", - "52.122.12.0/22", - "52.122.16.0/22", - "52.122.20.0/22", - "52.122.24.0/22", - "52.122.56.0/21", - "52.122.64.0/21", - "52.122.72.0/21", - "52.122.80.0/20", - "52.122.96.0/20", - "52.122.112.0/21", - "52.122.148.0/22", - "52.122.152.0/21", - "52.122.160.0/22", - "52.122.164.0/22", - "52.122.168.0/21", - "52.122.176.0/22", - "52.122.180.0/22", - "52.122.184.0/21", - "52.122.192.0/22", - "52.123.0.0/24", - "52.123.1.0/24", - "52.123.2.0/24", - "52.123.3.0/24", - "52.123.4.0/24", - "52.123.5.0/24", - "52.123.6.0/24", - "52.123.7.0/24", - "52.123.10.0/24", - "52.123.11.0/24", - "52.123.12.0/24", - "52.123.13.0/24", - "52.123.16.0/24", - "52.123.17.0/24", - "52.123.18.0/24", - "52.123.19.0/24", - "52.123.133.0/24", - "52.123.134.0/23", - "52.123.136.0/22", - "52.123.140.0/24", - "52.123.185.0/24", - "52.123.186.0/24", - "52.123.187.0/24", - "52.123.188.0/24", - "52.123.189.0/24", - "52.123.190.0/23", - "52.123.195.0/24", - "52.125.128.0/22", - "52.125.132.0/22", - "52.125.136.0/24", - "52.125.137.0/24", - "52.125.138.0/23", - "52.125.140.0/23", - "52.136.0.0/22", - "52.136.29.0/24", - "52.136.30.0/24", - "52.136.64.0/18", - "52.136.192.0/18", - "52.137.0.0/18", - "52.137.64.0/18", - "52.137.128.0/17", - "52.138.80.0/21", - "52.138.96.0/19", - "52.138.128.0/17", - "52.141.64.0/18", - "52.141.128.0/18", - "52.141.192.0/19", - "52.141.240.0/20", - "52.142.0.0/18", - "52.142.64.0/18", - "52.142.192.0/18", - "52.143.0.0/18", - "52.143.64.0/18", - "52.143.192.0/24", - "52.143.193.0/24", - "52.143.194.0/24", - "52.143.195.0/24", - "52.143.197.0/24", - "52.143.207.0/24", - "52.143.208.0/24", - "52.143.209.0/24", - "52.143.211.0/24", - "52.143.224.0/19", - "52.146.0.0/17", - "52.146.128.0/17", - "52.147.160.0/19", - "52.147.192.0/18", - "52.148.128.0/18", - "52.148.192.0/18", - "52.149.0.0/18", - "52.149.64.0/18", - "52.149.128.0/17", - "52.150.0.0/17", - "52.151.0.0/18", - "52.151.128.0/17", - "52.152.0.0/17", - "52.152.128.0/17", - "52.153.0.0/18", - "52.153.64.0/18", - "52.153.192.0/18", - "52.154.0.0/18", - "52.154.64.0/18", - "52.154.128.0/17", - "52.155.32.0/19", - "52.155.64.0/19", - "52.155.128.0/17", - "52.156.64.0/18", - "52.156.128.0/19", - "52.156.192.0/18", - "52.157.0.0/18", - "52.157.64.0/18", - "52.157.128.0/17", - "52.158.0.0/17", - "52.158.160.0/20", - "52.158.192.0/19", - "52.158.224.0/19", - "52.159.64.0/18", - "52.159.128.0/17", - "52.160.0.0/16", - "52.162.0.0/16", - "52.164.0.0/16", - "52.165.0.0/19", - "52.165.32.0/20", - "52.165.48.0/28", - "52.165.49.0/24", - "52.165.56.0/21", - "52.165.64.0/19", - "52.165.96.0/21", - "52.165.104.0/25", - "52.165.128.0/17", - "52.166.0.0/16", - "52.167.0.0/16", - "52.168.0.0/16", - "52.169.0.0/16", - "52.170.0.0/16", - "52.171.0.0/16", - "52.173.0.0/16", - "52.174.0.0/16", - "52.175.192.0/18", - "52.176.0.0/17", - "52.176.128.0/19", - "52.176.160.0/21", - "52.176.176.0/20", - "52.176.192.0/19", - "52.176.224.0/24", - "52.177.0.0/16", - "52.178.0.0/17", - "52.178.128.0/17", - "52.179.0.0/17", - "52.179.128.0/17", - "52.180.0.0/17", - "52.180.128.0/19", - "52.180.184.0/27", - "52.180.184.32/28", - "52.180.185.0/24", - "52.182.128.0/17", - "52.183.0.0/17", - "52.183.192.0/18", - "52.184.128.0/19", - "52.184.160.0/21", - "52.184.168.0/28", - "52.184.168.80/28", - "52.184.168.96/27", - "52.184.168.128/28", - "52.184.169.0/24", - "52.184.170.0/24", - "52.184.176.0/20", - "52.184.192.0/18", - "52.185.0.0/19", - "52.185.32.0/20", - "52.185.48.0/21", - "52.185.56.0/26", - "52.185.56.64/27", - "52.185.56.96/28", - "52.185.56.128/27", - "52.185.56.160/28", - "52.185.64.0/19", - "52.185.96.0/20", - "52.185.112.0/26", - "52.185.112.96/27", - "52.185.120.0/21", - "52.185.192.0/18", - "52.186.0.0/16", - "52.188.0.0/16", - "52.189.0.0/17", - "52.189.128.0/18", - "52.190.0.0/17", - "52.190.128.0/17", - "52.191.0.0/17", - "52.191.128.0/18", - "52.191.192.0/18", - "52.224.0.0/16", - "52.225.0.0/17", - "52.225.128.0/21", - "52.225.136.0/27", - "52.225.136.32/28", - "52.225.136.64/28", - "52.225.137.0/24", - "52.225.192.0/18", - "52.226.0.0/16", - "52.228.128.0/17", - "52.229.0.0/18", - "52.230.128.0/17", - "52.232.0.0/17", - "52.232.146.0/24", - "52.232.147.0/24", - "52.232.148.0/24", - "52.232.149.0/24", - "52.232.151.0/24", - "52.232.152.0/24", - "52.232.156.0/24", - "52.232.157.0/24", - "52.232.159.0/24", - "52.232.160.0/19", - "52.232.192.0/18", - "52.233.64.0/18", - "52.233.128.0/17", - "52.234.0.0/17", - "52.234.128.0/17", - "52.235.64.0/18", - "52.236.0.0/17", - "52.236.128.0/17", - "52.237.128.0/18", - "52.238.0.0/18", - "52.238.192.0/18", - "52.239.0.0/17", - "52.239.136.0/22", - "52.239.140.0/22", - "52.239.148.128/25", - "52.239.149.0/24", - "52.239.150.0/23", - "52.239.152.0/22", - "52.239.156.0/24", - "52.239.157.0/25", - "52.239.157.128/26", - "52.239.157.192/27", - "52.239.158.0/23", - "52.239.160.0/22", - "52.239.168.0/22", - "52.239.172.0/22", - "52.239.176.128/25", - "52.239.177.32/27", - "52.239.177.64/26", - "52.239.177.128/25", - "52.239.178.0/23", - "52.239.180.0/22", - "52.239.184.0/25", - "52.239.184.160/28", - "52.239.184.192/27", - "52.239.185.32/27", - "52.239.186.0/24", - "52.239.192.0/26", - "52.239.192.64/28", - "52.239.192.96/27", - "52.239.192.160/27", - "52.239.192.192/26", - "52.239.193.0/24", - "52.239.195.0/24", - "52.239.198.0/25", - "52.239.198.192/26", - "52.239.199.0/24", - "52.239.200.0/23", - "52.239.203.0/24", - "52.239.205.0/24", - "52.239.206.0/24", - "52.239.207.32/28", - "52.239.207.64/26", - "52.239.207.128/27", - "52.239.207.192/26", - "52.239.208.0/23", - "52.239.210.0/23", - "52.239.212.0/23", - "52.239.214.0/23", - "52.239.220.0/23", - "52.239.222.0/23", - "52.239.228.0/23", - "52.239.234.0/23", - "52.239.236.0/23", - "52.239.242.0/23", - "52.239.246.0/23", - "52.239.248.0/24", - "52.239.252.0/24", - "52.239.253.0/24", - "52.239.254.0/23", - "52.240.0.0/17", - "52.240.128.0/17", - "52.241.0.0/16", - "52.242.64.0/18", - "52.242.128.0/17", - "52.245.8.0/22", - "52.245.12.0/22", - "52.245.24.0/22", - "52.245.40.0/22", - "52.245.44.0/24", - "52.245.45.0/25", - "52.245.45.128/28", - "52.245.45.160/27", - "52.245.45.192/26", - "52.245.46.0/27", - "52.245.46.48/28", - "52.245.46.64/28", - "52.245.46.112/28", - "52.245.46.128/28", - "52.245.46.160/27", - "52.245.46.192/26", - "52.245.48.0/22", - "52.245.52.0/22", - "52.245.68.0/24", - "52.245.69.32/27", - "52.245.69.64/27", - "52.245.69.96/28", - "52.245.69.144/28", - "52.245.69.160/27", - "52.245.69.192/26", - "52.245.70.0/23", - "52.245.72.0/22", - "52.245.88.0/22", - "52.245.104.0/22", - "52.245.108.0/22", - "52.245.124.0/22", - "52.246.0.0/17", - "52.246.192.0/18", - "52.247.0.0/17", - "52.247.192.0/18", - "52.248.0.0/17", - "52.248.128.0/17", - "52.249.0.0/18", - "52.249.128.0/17", - "52.250.0.0/17", - "52.250.128.0/18", - "52.250.192.0/18", - "52.251.0.0/17", - "52.252.0.0/17", - "52.252.128.0/17", - "52.253.0.0/18", - "52.253.64.0/20", - "52.253.148.0/23", - "52.253.154.0/23", - "52.253.160.0/24", - "52.253.179.0/24", - "52.253.180.0/24", - "52.253.182.0/23", - "52.253.184.0/24", - "52.254.0.0/18", - "52.254.64.0/19", - "52.254.96.0/20", - "52.254.112.0/21", - "52.254.128.0/17", - "52.255.0.0/19", - "52.255.64.0/18", - "52.255.128.0/17", - "57.151.0.0/17", - "65.52.0.0/19", - "65.52.32.0/21", - "65.52.48.0/20", - "65.52.64.0/20", - "65.52.104.0/24", - "65.52.106.0/24", - "65.52.108.0/23", - "65.52.110.0/24", - "65.52.111.0/24", - "65.52.112.0/20", - "65.52.128.0/19", - "65.52.192.0/19", - "65.52.224.0/21", - "65.52.232.0/21", - "65.52.240.0/21", - "65.54.19.128/27", - "65.55.32.128/28", - "65.55.32.192/27", - "65.55.32.224/28", - "65.55.33.176/28", - "65.55.33.192/28", - "65.55.35.192/27", - "65.55.44.8/29", - "65.55.44.16/28", - "65.55.44.32/27", - "65.55.44.64/27", - "65.55.44.96/28", - "65.55.44.112/28", - "65.55.44.128/27", - "65.55.51.0/24", - "65.55.60.176/29", - "65.55.60.188/30", - "65.55.105.0/26", - "65.55.105.96/27", - "65.55.105.160/27", - "65.55.105.192/27", - "65.55.105.224/27", - "65.55.106.0/26", - "65.55.106.64/27", - "65.55.106.128/26", - "65.55.106.192/28", - "65.55.106.208/28", - "65.55.106.224/28", - "65.55.106.240/28", - "65.55.107.0/28", - "65.55.107.48/28", - "65.55.107.64/27", - "65.55.107.96/27", - "65.55.108.0/24", - "65.55.109.0/24", - "65.55.110.0/24", - "65.55.120.0/24", - "65.55.144.0/23", - "65.55.146.0/24", - "65.55.207.0/24", - "65.55.209.0/25", - "65.55.209.128/26", - "65.55.210.0/24", - "65.55.211.0/27", - "65.55.211.32/27", - "65.55.212.0/27", - "65.55.212.128/25", - "65.55.213.0/27", - "65.55.213.64/26", - "65.55.213.128/26", - "65.55.217.0/24", - "65.55.218.0/24", - "65.55.219.0/27", - "65.55.219.32/27", - "65.55.219.64/26", - "65.55.219.128/25", - "65.55.250.0/24", - "65.55.252.0/24", - "68.219.0.0/17", - "68.219.128.0/19", - "68.219.160.0/19", - "68.219.192.0/18", - "68.220.0.0/19", - "68.220.32.0/19", - "68.220.88.0/21", - "68.220.128.0/17", - "70.37.0.0/21", - "70.37.8.0/22", - "70.37.16.0/20", - "70.37.32.0/20", - "70.37.48.0/20", - "70.37.64.0/18", - "70.37.160.0/21", - "74.234.0.0/17", - "74.234.128.0/17", - "74.235.0.0/16", - "74.249.0.0/17", - "74.249.128.0/17", - "94.245.88.0/21", - "94.245.104.0/21", - "94.245.117.96/27", - "94.245.118.0/27", - "94.245.120.128/28", - "94.245.122.0/24", - "94.245.123.144/28", - "94.245.123.176/28", - "98.64.0.0/16", - "98.71.0.0/17", - "98.71.128.0/17", - "104.40.0.0/17", - "104.40.128.0/17", - "104.41.64.0/18", - "104.41.128.0/19", - "104.41.192.0/18", - "104.42.0.0/16", - "104.43.128.0/17", - "104.44.88.0/27", - "104.44.88.32/27", - "104.44.88.64/27", - "104.44.88.96/27", - "104.44.88.128/27", - "104.44.88.160/27", - "104.44.89.0/27", - "104.44.89.64/27", - "104.44.89.128/27", - "104.44.89.160/27", - "104.44.89.192/27", - "104.44.90.192/27", - "104.44.91.0/27", - "104.44.91.32/27", - "104.44.91.64/27", - "104.44.91.96/27", - "104.44.91.128/27", - "104.44.91.160/27", - "104.44.92.64/27", - "104.44.92.96/27", - "104.44.92.192/27", - "104.44.92.224/27", - "104.44.93.0/27", - "104.44.93.160/27", - "104.44.93.192/27", - "104.44.94.0/28", - "104.44.94.16/28", - "104.44.94.32/28", - "104.44.94.48/28", - "104.44.94.64/28", - "104.44.94.80/28", - "104.44.94.160/27", - "104.44.95.0/28", - "104.44.95.80/28", - "104.44.95.96/28", - "104.44.95.128/27", - "104.44.95.160/27", - "104.44.95.240/28", - "104.44.128.0/18", - "104.45.0.0/18", - "104.45.64.0/20", - "104.45.80.0/20", - "104.45.96.0/19", - "104.45.128.0/18", - "104.45.192.0/20", - "104.45.208.0/20", - "104.45.224.0/19", - "104.46.0.0/21", - "104.46.8.0/21", - "104.46.32.0/19", - "104.46.64.0/19", - "104.46.96.0/19", - "104.46.192.0/20", - "104.47.128.0/18", - "104.47.200.0/21", - "104.47.208.0/23", - "104.47.216.64/26", - "104.47.218.0/23", - "104.47.220.0/22", - "104.208.0.0/19", - "104.208.32.0/20", - "104.208.128.0/17", - "104.209.0.0/18", - "104.209.128.0/17", - "104.210.0.0/20", - "104.210.32.0/19", - "104.210.128.0/19", - "104.210.176.0/20", - "104.210.192.0/19", - "104.211.0.0/18", - "104.214.0.0/17", - "104.214.192.0/18", - "104.215.64.0/18", - "108.141.0.0/16", - "108.142.0.0/15", - "131.253.12.16/28", - "131.253.12.40/29", - "131.253.12.48/29", - "131.253.12.160/28", - "131.253.12.192/28", - "131.253.12.208/28", - "131.253.12.224/30", - "131.253.12.228/30", - "131.253.12.248/29", - "131.253.13.0/28", - "131.253.13.16/29", - "131.253.13.24/29", - "131.253.13.32/28", - "131.253.13.48/28", - "131.253.13.72/29", - "131.253.13.80/29", - "131.253.13.88/30", - "131.253.13.96/30", - "131.253.13.128/27", - "131.253.14.4/30", - "131.253.14.8/31", - "131.253.14.16/28", - "131.253.14.32/27", - "131.253.14.96/27", - "131.253.14.128/27", - "131.253.14.160/27", - "131.253.14.192/29", - "131.253.14.208/28", - "131.253.14.224/28", - "131.253.14.248/29", - "131.253.15.8/29", - "131.253.15.16/28", - "131.253.15.32/27", - "131.253.15.192/28", - "131.253.15.208/28", - "131.253.15.224/27", - "131.253.24.0/28", - "131.253.24.192/26", - "131.253.25.0/24", - "131.253.27.0/24", - "131.253.34.224/27", - "131.253.35.128/26", - "131.253.36.128/26", - "131.253.36.224/27", - "131.253.38.0/27", - "131.253.38.32/27", - "131.253.38.128/26", - "131.253.38.224/27", - "131.253.40.0/28", - "131.253.40.16/28", - "131.253.40.32/28", - "131.253.40.64/28", - "131.253.40.80/28", - "131.253.40.96/27", - "131.253.40.128/27", - "131.253.40.192/26", - "131.253.41.0/24", - "134.170.80.64/28", - "134.170.220.0/23", - "134.170.222.0/24", - "137.116.0.0/18", - "137.116.64.0/19", - "137.116.96.0/22", - "137.116.112.0/20", - "137.116.176.0/21", - "137.116.184.0/21", - "137.116.192.0/19", - "137.116.224.0/19", - "137.117.0.0/19", - "137.117.32.0/19", - "137.117.64.0/18", - "137.117.128.0/17", - "137.135.0.0/18", - "137.135.64.0/18", - "137.135.128.0/17", - "138.91.48.0/20", - "138.91.64.0/19", - "138.91.96.0/19", - "138.91.128.0/17", - "151.206.49.16/28", - "151.206.49.32/27", - "151.206.49.64/27", - "151.206.50.48/28", - "151.206.50.64/27", - "151.206.50.96/27", - "151.206.50.128/27", - "151.206.50.160/27", - "151.206.50.192/27", - "151.206.50.224/27", - "151.206.73.0/24", - "151.206.74.0/24", - "151.206.75.0/25", - "151.206.75.128/26", - "151.206.75.192/26", - "151.206.76.0/23", - "151.206.78.0/25", - "151.206.87.0/24", - "151.206.88.0/24", - "151.206.89.0/24", - "151.206.90.0/24", - "151.206.91.0/25", - "151.206.91.128/25", - "151.206.92.0/23", - "151.206.94.0/23", - "151.206.96.0/23", - "151.206.98.0/25", - "151.206.98.128/26", - "151.206.98.192/26", - "151.206.99.0/24", - "151.206.100.0/24", - "151.206.101.0/25", - "151.206.103.0/24", - "151.206.104.0/24", - "157.55.2.128/26", - "157.55.3.0/24", - "157.55.7.128/26", - "157.55.8.64/26", - "157.55.8.144/28", - "157.55.10.160/29", - "157.55.10.176/28", - "157.55.10.192/26", - "157.55.11.128/25", - "157.55.12.64/26", - "157.55.13.64/26", - "157.55.13.128/26", - "157.55.24.0/21", - "157.55.37.0/24", - "157.55.38.0/24", - "157.55.39.0/24", - "157.55.48.0/24", - "157.55.50.0/25", - "157.55.51.224/28", - "157.55.55.0/27", - "157.55.55.32/28", - "157.55.55.100/30", - "157.55.55.104/29", - "157.55.55.136/29", - "157.55.55.144/29", - "157.55.55.152/29", - "157.55.55.160/28", - "157.55.55.176/29", - "157.55.55.200/29", - "157.55.55.216/29", - "157.55.55.228/30", - "157.55.55.232/29", - "157.55.55.240/28", - "157.55.60.224/27", - "157.55.64.0/20", - "157.55.80.0/21", - "157.55.103.32/27", - "157.55.106.0/26", - "157.55.106.128/25", - "157.55.107.0/24", - "157.55.108.0/23", - "157.55.110.0/23", - "157.55.115.0/25", - "157.55.136.0/21", - "157.55.151.0/28", - "157.55.153.224/28", - "157.55.154.128/25", - "157.55.160.0/20", - "157.55.176.0/20", - "157.55.192.0/21", - "157.55.200.0/22", - "157.55.204.1/32", - "157.55.204.2/31", - "157.55.204.33/32", - "157.55.204.34/31", - "157.55.204.128/25", - "157.55.208.0/21", - "157.55.248.0/21", - "157.56.2.0/25", - "157.56.2.128/25", - "157.56.3.0/25", - "157.56.3.128/25", - "157.56.8.0/21", - "157.56.19.224/27", - "157.56.21.160/27", - "157.56.21.192/27", - "157.56.24.160/27", - "157.56.24.192/28", - "157.56.28.0/22", - "157.56.80.0/25", - "157.56.117.64/27", - "157.56.160.0/21", - "157.56.176.0/21", - "157.56.216.0/26", - "168.61.0.0/19", - "168.61.32.0/20", - "168.61.48.0/21", - "168.61.56.0/21", - "168.61.64.0/20", - "168.61.80.0/20", - "168.61.96.0/19", - "168.61.128.0/25", - "168.61.128.128/28", - "168.61.128.160/27", - "168.61.128.192/26", - "168.61.129.0/25", - "168.61.129.128/26", - "168.61.129.208/28", - "168.61.129.224/27", - "168.61.130.64/26", - "168.61.130.128/25", - "168.61.131.0/26", - "168.61.131.128/25", - "168.61.132.0/26", - "168.61.144.0/20", - "168.61.160.0/19", - "168.61.208.0/20", - "168.62.0.0/19", - "168.62.32.0/19", - "168.62.64.0/19", - "168.62.96.0/19", - "168.62.128.0/19", - "168.62.160.0/19", - "168.62.192.0/19", - "168.62.224.0/19", - "168.63.0.0/19", - "168.63.32.0/19", - "168.63.64.0/20", - "168.63.80.0/21", - "168.63.88.0/23", - "168.63.92.0/22", - "168.63.96.0/19", - "172.168.0.0/15", - "172.170.0.0/16", - "172.171.0.0/19", - "172.171.32.0/19", - "172.171.64.0/19", - "172.171.96.0/19", - "172.171.128.0/17", - "172.172.0.0/17", - "172.172.128.0/17", - "172.173.8.0/21", - "172.173.16.0/20", - "172.173.64.0/18", - "172.173.128.0/17", - "172.174.0.0/16", - "172.175.0.0/16", - "172.176.0.0/15", - "172.178.0.0/17", - "172.178.128.0/17", - "172.179.0.0/16", - "172.180.0.0/15", - "172.182.0.0/16", - "172.183.0.0/16", - "172.184.0.0/15", - "172.190.0.0/15", - "172.200.0.0/16", - "172.201.0.0/16", - "172.202.0.0/17", - "172.202.128.0/17", - "172.203.0.0/17", - "172.203.128.0/17", - "172.205.0.0/17", - "172.205.128.0/17", - "172.206.0.0/17", - "172.206.128.0/18", - "172.206.192.0/18", - "172.208.0.0/17", - "172.210.0.0/17", - "172.210.128.0/17", - "172.211.0.0/17", - "172.212.0.0/17", - "172.212.128.0/17", - "172.214.0.0/17", - "172.214.128.0/17", - "172.215.128.0/18", - "191.233.64.0/18", - "191.233.144.0/20", - "191.234.32.0/19", - "191.235.128.0/18", - "191.235.192.0/22", - "191.235.208.0/20", - "191.235.255.0/24", - "191.236.0.0/18", - "191.236.64.0/18", - "191.236.128.0/18", - "191.236.192.0/18", - "191.237.0.0/17", - "191.237.128.0/18", - "191.237.192.0/23", - "191.237.194.0/24", - "191.237.196.0/24", - "191.237.208.0/20", - "191.237.232.0/22", - "191.238.0.0/18", - "191.238.70.0/23", - "191.238.96.0/19", - "191.238.144.0/20", - "191.238.160.0/19", - "191.238.224.0/19", - "191.239.0.0/18", - "191.239.200.0/22", - "191.239.208.0/20", - "191.239.224.0/20", - "193.149.64.0/21", - "193.149.72.0/21", - "193.149.80.0/21", - "193.149.88.0/21", - "199.7.166.8/29", - "199.7.166.16/28", - "199.19.85.24/29", - "199.19.85.32/28", - "199.19.85.48/28", - "199.19.85.64/29", - "199.19.85.80/28", - "199.19.85.224/29", - "199.30.16.0/24", - "199.30.18.0/23", - "199.30.20.0/24", - "199.30.22.0/24", - "199.30.24.0/23", - "199.30.27.0/25", - "199.30.27.144/28", - "199.30.27.160/27", - "199.30.28.64/26", - "199.30.28.128/25", - "199.30.29.0/24", - "199.30.31.0/25", - "199.30.31.192/26", - "204.79.180.0/24", - "204.152.18.0/31", - "204.152.18.8/29", - "204.152.18.32/27", - "204.152.18.64/26", - "204.152.19.0/24", - "207.46.13.0/24", - "207.46.193.192/28", - "207.46.193.224/27", - "207.46.198.128/25", - "207.46.200.96/27", - "207.46.200.176/28", - "207.46.202.128/28", - "207.46.205.0/24", - "207.68.174.40/29", - "207.68.174.184/29", - "207.254.3.32/28", - "207.254.48.0/29", - "207.254.48.160/28", - "208.78.110.56/29", - "208.83.5.64/28", - "208.83.5.224/29", - "209.199.17.80/28", - "209.199.17.192/26", - "209.199.18.0/26", - "209.240.212.0/23", - "213.199.128.0/20", - "213.199.180.32/28", - "213.199.180.96/27", - "213.199.180.192/27", - "213.199.183.0/24", -} diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 41bdb47..05609c8 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -1,12 +1,9 @@ package utils import ( - "bufio" "encoding/binary" - "errors" "fmt" "net" - "os" "os/user" "regexp" "strings" @@ -23,48 +20,6 @@ func IsRoot() bool { return u.Uid == "0" } -// ParseHosts function parses the given hosts (or IP addresses) -// runs a lookup function, validates and ignores IPv6 -func ParseHosts(ips string) ([]net.IP, error) { - allowedIPAddress := []string{ - "127.0.0.1", - "169.254.169.254", - "168.63.129.16", - } - - var retval []net.IP - for _, ip := range func(ips string) []string { - i := strings.Split(ips, ",") - i = append(i, getDNSServers()...) - i = append(i, allowedIPAddress...) - return i - }(ips) { - if i := net.ParseIP(ip); i == nil { - hip, err := lookup(ip) - if err != nil { - continue - } - // accept iPv4 only - for _, v := range hip { - if ipv4 := v.To4(); ipv4 != nil { - retval = append(retval, ipv4) - } - } - } else { - // accept iPv4 only - if ipv4 := i.To4(); ipv4 != nil { - retval = append(retval, ipv4) - } - } - } - - if len(retval) == 0 { - return retval, errors.New("error: invalid IP or hostname") - } - - return retval, nil -} - // parse eBPF program name from *ebpf.Program struct func ParseProgramName(e *ebpf.Program) string { input := e.String() @@ -135,38 +90,3 @@ func IntToIP(ipNum uint32) net.IP { binary.LittleEndian.PutUint32(ip, ipNum) return ip } - -// unexported functions -func lookup(s string) ([]net.IP, error) { - add, err := net.LookupIP(s) - if err != nil { - return add, err - } - - return add, nil -} - -func getDNSServers() []string { - file, err := os.Open("/etc/resolv.conf") - if err != nil { - return nil - } - defer file.Close() - - var dnsServers []string - scanner := bufio.NewScanner(file) - for scanner.Scan() { - line := scanner.Text() - fields := strings.Fields(line) - - if len(fields) >= 2 && fields[0] == "nameserver" { - dnsServers = append(dnsServers, fields[1]) - } - } - - if err := scanner.Err(); err != nil { - return nil - } - - return dnsServers -} From 77517e7b9be5ff6d9cfb3460ea1ba196f8cb7250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Wed, 3 Apr 2024 09:43:40 +0300 Subject: [PATCH 12/15] fix cmd args control --- internal/handlers/tracer/tracer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/handlers/tracer/tracer.go b/internal/handlers/tracer/tracer.go index f112ddf..415f51d 100644 --- a/internal/handlers/tracer/tracer.go +++ b/internal/handlers/tracer/tracer.go @@ -310,7 +310,7 @@ func parseFlags(cmd *cobra.Command) (*domain.Data, error) { allowedHostsFlag := cmd.Flag("allowed-hosts") allowedIPAddrFlag := cmd.Flag("allowed-ips") - if allowedIPAddrFlag.Value.String() == "" || allowedHostsFlag.Value.String() == "" { + if allowedIPAddrFlag.Value.String() == "" && allowedHostsFlag.Value.String() == "" { return nil, errors.New("no allowed hosts or IP addresses provided") } From 74bd6db7f2f54cbc821939e62208fb0e7aa79a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Wed, 3 Apr 2024 13:51:10 +0300 Subject: [PATCH 13/15] update logo --- docs/img/kntrl_logo.png | Bin 248337 -> 17212 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 docs/img/kntrl_logo.png diff --git a/docs/img/kntrl_logo.png b/docs/img/kntrl_logo.png old mode 100644 new mode 100755 index 51dc2b474dcd8263857a9989431a8b3a963d1aea..147d8be8b3790a8d32e0ec130365edd3d84f06e4 GIT binary patch literal 17212 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 F|36FkDl7m1 literal 248337 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%0D_N|?(`A3vqBg&Y_ET6U;i#8Q~YN3!n<-eSLW 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 Kog6Kj(EkArn>_&l From 05d202a0d9c6e9d7f9c22cb786b29b21e5e3550a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Wed, 3 Apr 2024 14:56:14 +0300 Subject: [PATCH 14/15] add OPA desc to readme --- Readme.md | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/Readme.md b/Readme.md index 5f30166..b7b38eb 100644 --- a/Readme.md +++ b/Readme.md @@ -28,7 +28,7 @@ You can start using kntrl agent by simply running the following command: ```yaml - name: kntrl agent - run: sudo ./kntrl run --mode=monitor --hosts=download.kondukto.io,${{ env.GITHUB_ACTIONS_URL }} + run: sudo ./kntrl run --mode=monitor --allowed-hosts=download.kondukto.io,${{ env.GITHUB_ACTIONS_URL }} --allowed-ips=10.0.2.3 ``` OR with the docker: @@ -41,7 +41,7 @@ OR with the docker: --cgroupns=host \ --volume=/sys/kernel/debug:/sys/kernel/debug:ro \ --volume /tmp:/tmp \ - --rm docker.io/kondukto/kntrl:0.1.0 run --mode=trace --hosts=kondukto.io,download.kondukto.io + --rm docker.io/kondukto/kntrl:0.1.0 run --mode=trace --allowed-hosts=kondukto.io,download.kondukto.io ``` This action will deploy kntrl into any GitHub Actions build. @@ -73,8 +73,10 @@ The agent supports the following parameters: | Name | Default | Description | | ------------------------ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `mode` | monitor | kntrl for detected behaviours (monitor or prevent/trace) | -| `hosts` | | allowed host list. IP or hostname (192.168.0.100, example.com, .github.com) | -| `level` | info | level of detail for logging (info, debug) | +| `allowed-hosts` | | allowed host list. (example.com, .github.com) | +| `allowed-ips` | | allowed IP list. (192.168.0.100, 1.1.1.1) | +| `allow-local-ranges` | true | allow access to local IP ranges | +| `allow-github-meta` | false | allow access to GitHub meta IP ranges (https://api.github.com/meta) | | `output-file` | `/tmp/kntrl.out` | report file | | ### Running kntrl on monitoring mode @@ -102,7 +104,24 @@ The agent supports the following parameters: --volume=/sys/kernel/debug:/sys/kernel/debug:ro \ --volume /tmp:/tmp \ --rm docker.io/kondukto/kntrl:0.1.0 \ - --mode=trace --hosts=download.kondukto.io, .github.com + --mode=trace --allowed-hosts=download.kondukto.io, .github.com +``` + +## Open Policy Agent (OPA) Rules +`kntrl` supports an OPA-based policy engine to determine whether the event should be blocked or not. All the policy rules are stored under the bundle/kntrl/ directory. + +An example rego rule: +``` +package kntrl.network["is_local_ip_addr"] + +import rego.v1 + +policy if { + ipaddr := input.daddr + local_ranges := ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8", "0.0.0.0/32"] + net.cidr_contains(local_ranges[_], ipaddr) + data.allow_local_ip_ranges == true +} ``` ## Reporting From 35bbe8e372bc731716302f85f2b1a2b944775590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20Kalpako=C4=9Flu?= Date: Wed, 3 Apr 2024 18:05:05 +0300 Subject: [PATCH 15/15] add new policy test --- Readme.md | 2 -- bundle/assets/github/data.json | 1 + pkg/policy/policy_test.go | 5 +++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index b7b38eb..11c3947 100644 --- a/Readme.md +++ b/Readme.md @@ -1,7 +1,5 @@ ![kntrl logo](./docs/img/kntrl_logo.png) -# Kntrl - `kntrl` is an eBPF based runtime agent that monitors and prevents anomalous behaviour defined by you on your pipeline. kntrl achieves this by monitoring kernel calls, and denying access as soon as your defined behaviour is detected. Refer to this [presentation](https://docs.google.com/presentation/d/1nmbqGfIxp9UyxlfT5EJyQsEWtQaXVoWD9Qjj1MJevuk/edit?usp=sharing) to dive deeper into how we are achieving what kntrl does. It can work as a single binary (`kntrl`) or with a docker runner (`docker.io/kondukto/kntrl:0.1.0`). diff --git a/bundle/assets/github/data.json b/bundle/assets/github/data.json index bed458b..2bde4f9 100644 --- a/bundle/assets/github/data.json +++ b/bundle/assets/github/data.json @@ -143,6 +143,7 @@ "20.69.67.168/29" ], "actions": [ + "168.63.129.16/32", "4.148.0.0/16", "4.149.0.0/18", "4.149.64.0/19", diff --git a/pkg/policy/policy_test.go b/pkg/policy/policy_test.go index b771a96..0603916 100644 --- a/pkg/policy/policy_test.go +++ b/pkg/policy/policy_test.go @@ -33,6 +33,11 @@ var testCases = map[string]struct { []byte(`{"daddr":"4.148.0.12", "domains": ["foo.bar"]}`), true, }, + "allow_github_meta_1": { + []byte(`{"allowed_hosts":["foo.com"], "allowed_ip_addr":["1.1.1.1"], "allow_github_meta": true, "allow_local_ip_ranges": false}`), + []byte(`{"pid":1636,"task_name":".NET ThreadPool","proto":"tcp","daddr":"20.102.39.57","dport":443,"domains":["."]}`), + true, + }, } func TestPolicyRaw(t *testing.T) {