IP-allowlist
De IP-allowlist beperkt je organisatie tot de netwerken die je opgeeft. Is de lijst ingesteld, dan wordt een verzoek van een adres daarbuiten geweigerd, ook als de inloggegevens geldig zijn en de gebruiker via SSO is ingelogd.
Je vindt hem onder Beveiliging › Toegang › IP-toegestane lijst (<your-org>/_admin/security/access/ip-allowlist). Alleen eigenaren van de organisatie kunnen hem wijzigen.
Waar de lijst geldt
Er is één lijst, en die geldt voor elk onderdeel hieronder:
| Onderdeel | Wat van buiten de lijst wordt geweigerd |
|---|---|
| Webbeheer | <your-org>/_admin/* |
| fremforge-API | https://frem.sh/_app/api/v1/orgs/<your-org>/* |
| Webinterface van repository’s | De pagina’s van de organisatie en haar private repository’s, bestanden, issues, pull requests, releases en bijlagen |
| REST-API van Forgejo | https://frem.sh/api/v1/-aanroepen op de private repository’s van de organisatie, en op de organisatie zelf |
| Git over HTTPS | Klonen, fetch en push |
| Git LFS | Downloads en uploads van objecten, en bestandsvergrendelingen |
| Pakketregisters | Elk register, inclusief het containerregister |
| Git via SSH | Niets. Zie Git over SSH valt er niet onder. |
Publieke repository’s blijven voor iedereen leesbaar, omdat hun inhoud toch al openbaar is. Een lid dat op een publieke repository is ingelogd, wordt nog steeds gecontroleerd zodra diegene pusht, instellingen wijzigt of de pagina’s van de organisatie opent. Anonieme bezoekers krijgen nooit een weigering te zien: een private repository ziet er voor hen hetzelfde uit als altijd.
De beveiligingspagina toont Waar de lijst nu geldt, met één regel per onderdeel: Afgedwongen, Alleen gelogd (met de reden) of Valt er niet onder. De API geeft dezelfde informatie terug in surfaces. Zijn deze pagina en dat paneel het oneens, dan heeft het paneel gelijk.
Uitrol. Eén lijst voor elk onderdeel wordt geleidelijk ingeschakeld. Tot je organisatie is overgezet, kan het paneel een onderdeel tonen als Alleen gelogd — wordt nog uitgerold. Verzoeken van buiten de lijst worden dan in het auditlog vastgelegd, maar niet geweigerd. Het webbeheer en Git over HTTPS worden overal afgedwongen (bij een oudere lijst met scope
weballeen het webbeheer; zie hieronder).
De lijst instellen
- Gebruik CIDR-notatie:
203.0.113.0/24,2001:db8::/48. Eén adres is/32, of/128voor IPv6. - Zet één bereik per regel, of scheid ze met komma’s. Het maximum is 100 bereiken.
/0wordt geweigerd. Wil je elk adres toestaan, laat de lijst dan leeg.- Neem je kantoor- en VPN-bereiken op, en de uitgaande adressen van alle CI die niet op fremforge draait.
- De pagina toont Je adres op dit moment: het adres dat fremforge voor jou ziet.
Je kunt jezelf niet buitensluiten door op te slaan. Bevat een afdwingende lijst je eigen adres niet, dan wordt het opslaan geweigerd: voeg je adres toe, of vink eerst Alleen-auditvoorbeeld aan.
Een wijziging werkt binnen ongeveer een minuut op elk onderdeel.
Alleen-auditvoorbeeld
Met Alleen-auditvoorbeeld aan legt elk onderdeel de verzoeken vast die het zou weigeren, maar laat ze door. Een goede manier om een lijst in te voeren:
- Voer de bereiken in en vink Alleen-auditvoorbeeld aan. Sla op.
- Gebruik de organisatie een dag of twee zoals gewoonlijk, inclusief CI en eventuele integraties.
- Bekijk de gebeurtenissen
ip_allowlist.would_blockin het auditlog. Elke gebeurtenis noemt het onderdeel, het adres, een voorbeeldpad en hoeveel verzoeken ze vertegenwoordigt. - Voeg legitieme bereiken toe die je hebt gemist.
- Vink Alleen-auditvoorbeeld uit. Vanaf nu wordt de lijst afgedwongen.
Door fremforge gehoste runners
CI-jobs op de eigen runners van fremforge bereiken je organisatie vanuit het netwerk van fremforge, niet vanuit het jouwe. Het token dat voor een job wordt aangemaakt, werkt altijd. Door fremforge gehoste runners toestaan (standaard aan) bepaalt of andere inloggegevens die vanaf een runner worden gebruikt, zoals een PAT of een OAuth-token dat als secret is opgeslagen, ook werken. Zet dit uit als je wilt dat een gestolen PAT nutteloos is, zelfs wanneer hij vanuit een CI-job wordt gebruikt.
Zelf gehoste runners en externe CI worden net als elke andere client beoordeeld op hun uitgaande adres. Voeg die adressen toe aan de lijst.
Als een eigenaar is buitengesloten
Je adres kan veranderen: een nieuw kantoor, een VPN-storing, een reis. Noodtoegang (break-glass) zet elk onderdeel 24 uur lang op alleen loggen. Niets wordt blijvend omzeild, en elke stap wordt in het auditlog vastgelegd.
- Selfservice voor eigenaren. Open
https://frem.sh/_app/ip-allowlist/break-glass?org=<your-org>vanaf elk netwerk, ingelogd als eigenaar. We mailen een ondertekende link naar het eigen e-mailadres van je account. De link werkt 30 minuten. Open hem en bevestig. Weigeringspagina’s en Git-foutmeldingen voor je organisatie tonen dit adres. - De support van fremverk kan op verzoek dezelfde noodtoegang voor je organisatie inschakelen.
Noodtoegang eindigt na 24 uur vanzelf en wordt nooit verlengd zolang hij aan staat. Herstel de lijst en beëindig hem daarna eerder met Noodtoegang nu beëindigen op de beveiligingspagina.
Acties in het auditlog: ip_allowlist.break_glass.activated, ip_allowlist.break_glass.ended.
Lijsten van vóór de tijd dat één lijst elk onderdeel dekte
Oudere lijsten hadden een scope: web (alleen webbeheer) of web+git (plus Git over HTTPS). Die lijsten blijven afdwingen waar ze dat eerder deden. Op de andere onderdelen loggen ze verzoeken die geweigerd zouden worden, gedurende 30 dagen nadat we de eigenaren van de organisatie hebben geïnformeerd, en daarna dwingen ze ook daar af. De beveiligingspagina toont de datum.
Wil je niet wachten, gebruik dan Nu op alle onderdelen afdwingen (actie in het auditlog: security.ip_allowlist.enforce_all). Je kunt een lijst niet terugzetten naar een oude scope, en elke nieuwe lijst dekt elk onderdeel.
Git over SSH valt er niet onder
De IP-allowlist filtert Git over SSH niet. SSH bereikt fremforge via een load balancer die het adres van de client vervangt door dat van een van onze eigen clusternodes, dus het adres waarvandaan je ontwikkelaar verbinding maakt, is voor ons niet zichtbaar. We beoordelen een verbinding niet op een adres waarvan we weten dat het onjuist is. Een lijst die stilletjes elke SSH-gebruiker blokkeert, of ze stilletjes allemaal doorlaat terwijl hij beweert te filteren, zou erger zijn dan het gewoon te zeggen.
Moet in je organisatie elke Git-bewerking op IP worden gefilterd:
- Zet SSH-protocol toestaan uit op de pagina Authenticatiebeleid. Dit is de standaard voor organisaties die na 2026-05-22 zijn aangemaakt.
- Laat leden HTTPS gebruiken met Git Credential Manager (Veilig inloggen). Git over HTTPS valt wel onder de lijst.
Met SSH uit wordt elke Git-bewerking via SSH op de repository’s van de organisatie geweigerd: push, klonen en fetch, en Git LFS via SSH. Dat is een weigering van SSH als geheel, geen IP-controle, dus de beveiligingspagina toont Git over SSH nog steeds als Valt er niet onder, en de API geeft ssh_covered: false terug.
Wat een geweigerd verzoek te zien krijgt
| Onderdeel | Antwoord |
|---|---|
| fremforge-API | 403 not-in-allowlist met het adres dat we zagen |
| Webinterface, webbeheer | Een weigeringspagina met de organisatie en het adres, en de link voor noodtoegang |
| REST-API van Forgejo, LFS, pakketten | 403 met dezelfde melding |
| Git over HTTPS | git toont de melding en de link voor noodtoegang |
Elke weigering wordt vastgelegd als ip_allowlist.blocked, en elk verzoek dat alleen wordt gelogd als ip_allowlist.would_block. Herhalingen vanaf hetzelfde adres op hetzelfde onderdeel worden gegroepeerd in één gebeurtenis met een count, zodat een verkeerd geconfigureerde CI-lus het log niet overspoelt.
API
De lijst is ook beschikbaar via de fremforge-API, met de scopes policy:read en policy:write.
# Read: the list, the runner toggle, per-surface modes, break-glass state
curl -H "Authorization: Bearer $TOKEN" \
https://frem.sh/_app/api/v1/orgs/<your-org>/security
# Replace the list
curl -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"cidrs":["203.0.113.0/24","2001:db8::/48"],"audit_only":true,"allow_platform_runners":true}' \
https://frem.sh/_app/api/v1/orgs/<your-org>/security/ip-policyHet object ip_allowlist bevat cidrs, scope, audit_only, allow_platform_runners, surfaces (per onderdeel: mode is enforce of audit, plus een reason), new_surfaces_enforce_at, break_glass_until en ssh_covered.
Via de API geldt de bescherming tegen buitensluiten voor het eigen adres van de aanroeper. Fouten: invalid-cidr voor een ongeldig bereik, invalid-allowlist voor meer dan 100 bereiken, een bereik /0 of een lijst die de aanroeper zou blokkeren, en invalid-scope voor een oude scope.
Beperkingen
- Kan de Git-service van fremforge het beleid van de organisaties langer dan 24 uur niet lezen, dan stopt hij met het afdwingen van de lijst in plaats van elke organisatie te weigeren. De fremforge-API en het webbeheer worden daardoor niet geraakt. Zo’n storing is een platformincident waarop we ingrijpen; bij normaal gebruik wordt het niet verwacht.
- Adressen worden beoordeeld zoals de edge van fremforge ze ziet. Een proxy of NAT voor je gebruikers bepaalt welk adres dat is, dus zet het uitgaande bereik van de proxy op de lijst.
- Maximaal 100 bereiken.