Så fungerar det
Både agenten och insamlaren skickar en rapport till ipmanager med POST /api/v1/agent/report över HTTPS, med en API-nyckel i Authorization-headern. ipmanager gör sedan följande för varje adress i rapporten:
- Ny IP-adress: skapas med status ”i bruk”, och källan markeras som agent eller skanning.
- Känd adress: ”senast sedd” uppdateras. Ändrat värdnamn eller ändrad MAC-adress uppdateras och loggas i revisionsloggen.
- Adress som var ledig eller frånkopplad: sätts till ”i bruk” igen.
- Ingen ändring: bara ”senast sedd” uppdateras, utan ny post i revisionsloggen.
Om organisationen har nått adressgränsen skapas inga nya adresser. De räknas som limited i svaret, medan kända adresser fortfarande uppdateras.
| Agent | Insamlare | |
|---|---|---|
| Körs på | Varje maskin som ska rapportera | En maskin i nätet |
| Hittar | Maskinens egna adresser, värdnamn och MAC | Allt som svarar på ping, ARP-tabellen, omvänd DNS och DHCP-leasar |
| Plattform | Linux och macOS (shell), Windows (PowerShell) | Python 3 utan beroenden, oftast på Linux |
| Passar för | Servrar och fasta maskiner | Skrivare, IoT, AV-utrustning och allt där du inte kan installera något |
1. Skapa en API-nyckel
Gå till Automatisk identifiering och API i ipmanager och skapa en ny nyckel med behörigheten agent. En agentnyckel kan bara skicka rapporter – den kan inte läsa eller ta bort data. Nyckeln visas bara en gång, så spara den på ett säkert ställe. Skapa gärna en nyckel per plats eller insamlare, så att du kan återkalla en enskild nyckel utan att påverka de andra.
2a. Agent på Linux och macOS
curl -fsSo /usr/local/bin/ipm-agent.sh https://ipmanager.no/api/v1/agent/scripts/ipm-agent.sh
chmod 755 /usr/local/bin/ipm-agent.sh
# Testa
IPM_TOKEN=ipm_xxxxxxxx sh /usr/local/bin/ipm-agent.shLägg nyckeln i en fil som bara root kan läsa, i stället för i crontab:
mkdir -p /etc/ipmanager
echo 'IPM_TOKEN=ipm_xxxxxxxx' > /etc/ipmanager/agent.env
chmod 600 /etc/ipmanager/agent.env# /etc/cron.d/ipmanager – rapportera var 15:e minut
*/15 * * * * root . /etc/ipmanager/agent.env && IPM_TOKEN=$IPM_TOKEN sh /usr/local/bin/ipm-agent.sh >/dev/null 2>&1# /etc/systemd/system/ipm-agent.service
[Unit]
Description=ipmanager agent
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/etc/ipmanager/agent.env
ExecStart=/bin/sh /usr/local/bin/ipm-agent.sh
# /etc/systemd/system/ipm-agent.timer
[Unit]
Description=Run ipmanager agent every 15 minutes
[Timer]
OnBootSec=2min
OnUnitActiveSec=15min
RandomizedDelaySec=60
[Install]
WantedBy=timers.targetsystemctl daemon-reload
systemctl enable --now ipm-agent.timer2b. Agent på Windows
New-Item -ItemType Directory -Force C:\ProgramData\ipmanager | Out-Null
Invoke-WebRequest https://ipmanager.no/api/v1/agent/scripts/ipm-agent.ps1 -OutFile C:\ProgramData\ipmanager\ipm-agent.ps1
# Testa
$env:IPM_TOKEN = 'ipm_xxxxxxxx'
powershell -NoProfile -ExecutionPolicy Bypass -File C:\ProgramData\ipmanager\ipm-agent.ps1[Environment]::SetEnvironmentVariable('IPM_TOKEN', 'ipm_xxxxxxxx', 'Machine')
schtasks /Create /TN "ipmanager agent" /RU SYSTEM /SC MINUTE /MO 15 /F `
/TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\ProgramData\ipmanager\ipm-agent.ps1"3. Insamlare i ditt eget nät
Insamlaren är ett enda Python 3-skript utan beroenden. Det körs på en maskin i nätet – en server, en virtuell maskin eller en liten Linux-burk – och fungerar som mellanhand: det ser nätet inifrån och rapporterar ut till ipmanager.
curl -fsSO https://ipmanager.no/api/v1/agent/scripts/ipm-collector.py
python3 ipm-collector.py --help
# Svep två nät och ta med ARP-tabellen
python3 ipm-collector.py --token ipm_xxxxxxxx --arp 10.20.0.0/24 10.20.3.0/24Insamlaren pingar adresserna i de nät du anger, läser maskinens ARP-tabell för att hitta MAC-adresser, slår upp omvänd DNS för värdnamn och kan läsa leasar från dnsmasq och ISC DHCP. Se --help för alla alternativ.
# /etc/cron.d/ipmanager-collector – varje timme
0 * * * * root . /etc/ipmanager/agent.env && python3 /opt/ipmanager/ipm-collector.py --token "$IPM_TOKEN" --arp 10.20.0.0/16 >/dev/null 2>&14. DNS-kontroll av interna namn
Publika IP-adresser kontrolleras automatiskt från ipmanager.no mot publik DNS en gång per dygn. Interna namn – som .local eller Active Directory-DNS – kan bara slås upp inifrån. Därför kan insamlaren kontrollera dem med --dns-check, mot DNS-servern i ditt eget nät.
Insamlaren hämtar de registrerade adresserna med värdnamn i de nät du anger, slår upp PTR-posten för varje IP och A/AAAA-posten för varje namn och rapporterar resultatet. ipmanager sätter status OK, avvikelse eller saknas (PTR eller A/AAAA), och avvikelser visas också under Avvikelser. Med --no-scan hoppar insamlaren över ping-svepet och kontrollerar bara DNS.
IPM_TOKEN=ipm_xxxxxxxx python3 ipm-collector.py --dns-check --no-scan 10.20.0.0/16# /etc/cron.d/ipmanager-dns – varje natt kl. 03.15
15 3 * * * root . /etc/ipmanager/agent.env && IPM_TOKEN="$IPM_TOKEN" python3 /opt/ipmanager/ipm-collector.py --dns-check --no-scan 10.20.0.0/16 >/dev/null 2>&1Använder ni korta värdnamn kan ni ange ett DNS-suffix i ipmanager, så att fil01 kontrolleras som fil01.skola.local. Adresser utan värdnamn får ett förslag från PTR-posten som kan användas med ett klick.
Avvikelser från rapporterna
Rapporterna från agenter och insamlare används också för att hitta avvikelser: dubblerad IP (två MAC-adresser på samma IP inom några minuter), fel MAC på en registrerad IP (den registrerade MAC-adressen skrivs inte över), en känd MAC på en annan IP, maskiner på adresser som är registrerade som lediga, reserverade eller utfasade, IP-adresser utanför registrerade subnät, fasta adresser i DHCP-intervall och ändrade värdnamn. Avvikelserna löses automatiskt när förhållandet försvinner, och administratörerna får mejl om nya kritiska avvikelser och varningar.
Brandvägg och nätverk
- Agent och insamlare behöver bara utgående TCP 443 till
ipmanager.no. Inget behöver öppnas inåt. - Insamlaren måste kunna skicka ICMP echo (ping) till de nät den ska svepa. Maskiner med en värdbrandvägg som blockerar ping hittas inte med ping, men kan dyka upp via ARP eller DHCP.
- Går utgående trafik via en proxy kan skripten använda de vanliga proxyvariablerna (
HTTPS_PROXY).
Säkerhet
- Använd nycklar med behörigheten agent. De kan bara rapportera, inte läsa eller ta bort.
- Spara nyckeln i en fil som bara root eller SYSTEM kan läsa, inte i skript som checkas in i versionshantering.
- Sidan för API-nycklar visar när varje nyckel senast användes och från vilken IP. Återkalla nycklar som inte används.
- Skripten är ren text. Läs igenom dem innan du kör dem.
Felsökning
| Svar | Orsak |
|---|---|
401 invalid_token | Fel nyckel, eller så har nyckeln återkallats. |
403 insufficient_scope | Nyckeln har inte behörigheten agent. |
limited > 0 i svaret | Organisationen har nått adressgränsen. Nya adresser skapades inte. |
| Inga nya adresser från insamlaren | Kontrollera att ping är tillåtet och att näten är angivna i CIDR-notation. |
Se API-dokumentationen för det exakta formatet på rapporten.