Every IPAuth flow has the same two parts. You click an auth URL from your browser whenever your IP changes. Your server polls a server URL on a cron and updates its firewall to match. That's the whole product.
Both connections initiate from your side — your browser hits IPAuth, your server polls IPAuth. We never push anything inbound. The firewall change happens entirely inside your own boundary, by code you control.
Clicking the auth URL is a normal HTTPS GET from your browser. IPAuth sees your public IP and stores it under your key.
Cron polls the server URL on a schedule you choose. Reads the IP IPAuth has stored. Nothing on your box accepts incoming connections from IPAuth.
Your shell script updates ufw / pf / Windows Firewall. The change never leaves the server. Your control plane stays yours.
Stop brute-force noise. One bookmark to click when you switch networks. ufw allows only you.
See the SSH flow →Self-service team allowlist for staging domains. Each member gets their own pair. No VPN client.
See the Web flow →You run 5+ servers. Exposing port 22 means constant brute-force noise in auth.log and the risk that a stolen key gets used from anywhere. IPAuth locks 22 to a single IP — yours — and follows you when you move.
#!/bin/sh SERVER_URL="https://ipauth.net/serverquery/?key=YOUR_KEY" CURIP=$(curl --max-time 5 -fsS "$SERVER_URL" | grep -oE '"ipaddress":"[0-9.]+' | cut -d'"' -f4) [ -n "$CURIP" ] && ufw allow from "$CURIP" to any port 22 proto tcp comment "ipauth"
Drop it in cron every 2 minutes. Done. Combine with a bastion failsafe rule (a stable IP you control as a backup recovery path) so you never lock yourself out.
You're running staging.mycompany.com on ports 80/443 for previews — a half-built feature your QA team wants to see, a customer demo, a marketing review URL. You don't want it indexed, scraped, or screenshotted by anyone outside the team. A VPN feels heavy. IPAuth gives each team member a personal auth URL; the staging server allows only their current IPs.
Each team member has their own pair. The script reads all their server URLs and rebuilds an ipset that's referenced by an iptables rule on ports 80 + 443. Replace the KEYS list with each member's server key.
#!/bin/sh
SET=ipauth_team
KEYS="key_alice key_bob key_carol"
ipset create $SET hash:ip -exist
ipset flush $SET
for K in $KEYS; do
IP=$(curl --max-time 5 -fsS "https://ipauth.net/serverquery/?key=$K" \
| grep -oE '"ipaddress":"[0-9.]+' | cut -d'"' -f4)
[ -n "$IP" ] && ipset add $SET "$IP" -exist
done
Reference the set once in iptables (paired with a default-deny for those ports):
iptables -I INPUT -m set --match-set ipauth_team src \ -p tcp -m multiport --dports 80,443 -j ACCEPT
Cron every 2 minutes. Works the same way with nftables sets, pf tables, or Windows Firewall remote-address lists — pick the primitive your stack uses.
From any browser. IPAuth records the IP that hit it.
Cron / scheduled task hits it every few minutes. Reads the current registered IP.
Your shell script swaps the allow rule. Any port you choose, any service.
Generate a pair and wire up your first server in under 5 minutes.
Create a key pair →