download-geo-zones.sh 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env bash
  2. # Download ipdeny.com aggregated zone files for all blocked countries.
  3. # Run this on a machine WITH internet access, then rsync the output
  4. # directory to the DMZ host and set geo_zone_files_dir in your inventory.
  5. #
  6. # Usage:
  7. # ./scripts/download-geo-zones.sh [output-dir]
  8. #
  9. # Example workflow:
  10. # # On your workstation:
  11. # ./scripts/download-geo-zones.sh /tmp/geo_zones
  12. # rsync -av /tmp/geo_zones/ sarman@dmz-host:/opt/geo_zones/
  13. #
  14. # # Then run the playbook pointing at the cache:
  15. # ansible-playbook -K playbooks/geo_blocking.yml -e geo_zone_files_dir=/opt/geo_zones
  16. set -euo pipefail
  17. BASE_URL="https://www.ipdeny.com/ipblocks/data/aggregated"
  18. OUT_DIR="${1:-/tmp/geo_zones}"
  19. # All blocked country codes (excludes US and ipdeny-absent territories)
  20. COUNTRIES=(
  21. AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ
  22. BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BW BY BZ
  23. CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CY CZ
  24. DE DJ DK DM DO DZ
  25. EC EE EG ER ES ET
  26. FI FJ FK FM FO FR
  27. GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GT GU GW GY
  28. HK HN HR HT HU
  29. ID IE IL IM IN IO IQ IR IS IT
  30. JE JM JO JP
  31. KE KG KH KI KM KN KP KR KW KY KZ
  32. LA LB LC LI LK LR LS LT LU LV LY
  33. MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ
  34. NA NC NE NF NG NI NL NO NP NR NU NZ
  35. OM
  36. PA PE PF PG PH PK PL PM PR PS PT PW PY
  37. QA
  38. RE RO RS RU RW
  39. SA SB SC SD SE SG SI SK SL SM SN SO SR SS ST SV SX SY SZ
  40. TC TD TG TH TJ TK TL TM TN TO TR TT TV TW TZ
  41. UA UG UM UY UZ
  42. VA VC VE VG VI VN VU
  43. WF WS
  44. YE YT
  45. ZA ZM ZW
  46. )
  47. mkdir -p "$OUT_DIR"
  48. echo "Downloading ${#COUNTRIES[@]} zone files to $OUT_DIR ..."
  49. ok=0; fail=0
  50. for cc in "${COUNTRIES[@]}"; do
  51. url="${BASE_URL}/${cc,,}-aggregated.zone"
  52. dest="${OUT_DIR}/${cc,,}.zone"
  53. if curl -fsSL --connect-timeout 10 --max-time 30 -o "$dest" "$url"; then
  54. (( ++ok ))
  55. else
  56. echo " SKIP $cc (no zone file at ipdeny.com)"
  57. rm -f "$dest"
  58. (( ++fail ))
  59. fi
  60. done
  61. echo "Done: $ok downloaded, $fail skipped."
  62. echo ""
  63. echo "Next steps:"
  64. echo " rsync -av ${OUT_DIR}/ USER@DMZ_HOST:/opt/geo_zones/"
  65. echo " ansible-playbook -K playbooks/geo_blocking.yml -e geo_zone_files_dir=/opt/geo_zones"