Een adres blokkeren en een account vergrendelen zijn twee verschillende mechanismen, en ze falen in tegengestelde richtingen. Een adresverbod stopt één bron en het doelaccount blijft vanaf elders bereikbaar; een accountvergrendeling stopt die identiteit overal, ook op de laptop van de gebruiker zelf.

Voor een VPN die authenticatie aan PAM delegeert, is de teller wat de PAM-stack bereikt, niet wat de listener heeft gelogd.

Twee tellers, twee verschillende slachtoffers

Een snelheidsbegrenzer kijkt naar een bron en vraagt hoeveel pogingen daar recent vandaan kwamen. Een vergrendeling kijkt naar een identiteit en vraagt hoeveel fouten dat account heeft opgebouwd. De eerste beschermt beschikbaarheid, de tweede de inloggegevens; geen van beide vervangt de ander.

Daarom is de zin we blokkeren het IP na vijf fouten geen antwoord op een rapport over credential stuffing. De aanvaller wisselt van bron, elk krijgt weinig pogingen, en het account wordt nooit geteld. Omgekeerd laat een vergrendeling zonder broncontrole de aanvaller het account onbeperkt vergrendeld houden door opzettelijk te falen.

De twee controles hebben ook verschillende herstelverhalen. Een adresverbod verloopt via een timer waar niemand over na hoeft te denken; een accountvergrendeling kan een beheerder, een gedocumenteerde wachttijd of een selfservice-reset vereisen.

Vind de opslag die de telling al bezit

Voordat u iets toevoegt, stel vast of er al een foutopslag bestaat. Een lokaal Linux-account, een directorydienst en een externe identiteitsprovider houden elk hun eigen telling bij, en een PAM-module ervoor maakt een tweede in plaats van de eerste uit te breiden.

grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20

Lees het servicebestand dat de VPN werkelijk noemt en volg de include-regels. In veel distributies bevat de VPN-dienst een gedeeld bestand, wat betekent dat de telling die u afstelt ook geldt voor SSH en lokale aanmeldingen.

Als de directory al een vergrendeling afdwingt, is de nuttige vraag hoe het PAM-gesprek tot die beslissing komt en hoe de VPN dat rapporteert. Een lokale telling erbovenop wordt niet de teller van de directory, en de twee beleidsregels kunnen het oneens zijn over wanneer het account opent.

pam_faillock heeft drie aanroepplekken, niet één

De module scheidt drie bewerkingen die één gekopieerde regel meestal vervaagt: controleren of het account al vergrendeld is, een fout vastleggen en de geschiedenis wissen na een succes.

Hier gaat een migratie van een ouder telmodule meestal mis. Een regel uit een werkend pam_tally2-voorbeeld in een pam_faillock-stack kopiëren is geen hernoeming; de gedocumenteerde opzet is anders, en een verkeerd geplaatste aanroep kan fouten vastleggen zonder ze ooit te controleren.

faillock --user alice
faillock --user alice --reset

Het inspectiegereedschap is de snelste manier om te zien of de teller echt is: het toont de vastgelegde fouten voor een account en kan ze wissen. Als een gecontroleerde fout die uitvoer niet verandert, staat de aanroep verkeerd.

Een eigen servicenaam is geen isolatie

De VPN een eigen PAM-servicebestand geven maakt het beoogde beleid zichtbaar, maar beperkt het effect niet. Elke include van een gedeeld bestand haalt mee wat dat bestand doet, inclusief tellingen voor het hele systeem.

Beslis expliciet of de vergrendeling alleen VPN-toegang dekt of elke dienst die hetzelfde account authenticeert. Beide antwoorden zijn verdedigbaar; de fout is denken dat u het ene koos terwijl de stack het andere uitvoert.

Neem dan de kosten mee. Een aanvaller kan de vergrendeling veroorzaken, en de gebruiker die lijdt is de eigenaar van het account. Drempel, wachttijd en het administratieve herstelpad zijn deel van het beleid, en het herstel mag niet afhangen van het herconfigureren van de VPN tijdens een incident.

Accepteer de volgorde, niet één weigering

Test met aangewezen identiteiten volgens een goedgekeurd plan, en test een keten in plaats van één gebeurtenis: een geldig account authenticeert, een opzettelijk fout wachtwoord verplaatst de teller, de ingestelde vergrendeling treedt in werking, en het gedocumenteerde herstel geeft de toegang terug.

faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'

Bekijk het succesgedrag even zorgvuldig als het foutgedrag. Als een geslaagde aanmelding de geschiedenis niet wist, raakt een account vergrendeld na een langzame opeenhoping van gewone fouten. Als het alles uit elke dienst wist, is de teller zwakker dan het beleid beweert.

Stop ten slotte onbeheerde clients voordat u de overwinning uitroept. Opgeslagen inloggegevens die op de achtergrond opnieuw proberen, maken minuten na een herstel opnieuw fouten en vergrendelen het account weer. Snelheidsbeperking op basis van de bron kan als extra controle blijven, maar het is niet het accountbeleid.

Gerelateerde artikelen