Surfguard resolves a hostname to the public IP addresses it points at and refuses anything that would reach an internal network: private, loopback, link-local and carrier-grade NAT space, plus the IPv6 transition ranges a naive guard misses (IPv4-mapped, SIIT, NAT64, 6to4, Teredo). It resolves and classifies only; the caller owns the fetch and pins the connection to a returned address so DNS rebinding cannot swap in a blocked one. Standard library only, no runtime dependencies.

Required Ruby Version

>= 3.1

Authors

37signals

Versions

  1. 0.1.3 August 13, 2026 (15 KB)
  2. 0.1.2 August 12, 2026 (14.5 KB)
  3. 0.1.1 August 12, 2026 (14.5 KB)
  4. 0.1.0 August 12, 2026 (12 KB)

Pushed by

GitHub

SHA 256 checksum