Begræns adgangskodeforsøg på Linux for at beskytte kritiske tjenester

  • Konfiguration af PAM-moduler som pam_faillock og pam_tally2 giver dig mulighed for at blokere konti efter flere mislykkede forsøg på Red Hat, Debian og Ubuntu.
  • Justering af MaxAuthTries i sshd_config begrænser antallet af genforsøg pr. SSH-forbindelse og supplerer dermed blokeringspolitikker på systemniveau.
  • Filer som /etc/login.defs, /etc/shadow og værktøjer som change og passwd administrerer udløb af adgangskoder og globale parametre.
  • Modulerne pam_cracklib og pam_pwquality styrker adgangskodernes kompleksitet og forhindrer svage nøgler og usikker genbrug.

Sikkerhed ved at begrænse adgangskodeforsøg i Linux

Begræns adgangskodeforsøg i Linux Det er ikke bare en særhed hos paranoide administratorer; det er en af ​​de mest effektive foranstaltninger til at stoppe brute-force-angreb og uautoriseret adgang, både i desktop- og servermiljøer. Hvis din computer indeholder følsomme oplysninger eller opretter forbindelse til internettet, bør du sikre denne del af systemet. gennemgå dit lokale netværk.

Udover at indstille en stærk adgangskode, konfigurer midlertidige eller permanente låse efter flere fejl Dette er nøglen: det bremser angribere, genererer flere logfiler til revision og giver dig mulighed for at kombinere denne beskyttelse med andre adgangskodepolitikker (udløb, kompleksitet, genbrug osv.). Lad os roligt, men detaljeret, se på, hvordan dette gøres i forskellige distributioner og på forskellige niveauer af systemet.

Kontolåsning på grund af mislykkede loginforsøg på Red Hat, CentOS og derivater

I uddelingerne baseret på Red Hat (RHEL, CentOS, Rocky, AlmaLinux…)Kontoblokering på grund af mislykkede forsøg håndteres med PAM-modulet pam_faillockDette modul styrer, hvor mange mislykkede loginforsøg der er tilladt, hvor længe kontoen er låst, og hvilke brugere der er berørt (inklusive, hvis du ønsker det, root-brugeren).

For at anvende denne politik skal du normalt redigere de globale PAM-filer /etc/pam.d/system-auth og i nogle versioner også /etc/pam.d/adgangskodegodkendelseDisse filer fungerer som skabeloner for de fleste godkendelsestjenester på systemet (konsollogin, sudo, SSH osv.).

Disse filer indeholder linjer, der ligner disse, inden for sektionen af auth y konto:

auth required pam_faillock.so preauth silent audit deny=2 unlock_time=120
auth pam_faillock.so authfail audit deny=2 unlock_time=120
account required pam_faillock.so

Den første handlingslinje før reel godkendelse (preauth)Den anden kører, når godkendelsen mislykkes, og den tredje er ansvarlig for at kontrollere kontoens låsestatus i løbet af fasen af kontoVed at ændre parametrene kan du tilpasse politikken til dine behov.

De mest almindelige parametre for pam_faillock lyd:

  • revisionAktiverer detaljeret logføring af loginforsøg, så der efterlades spor i systemloggene (f.eks. i / Var / log / sikker).
  • afvis=2Dette angiver det maksimale antal mislykkede adgangskodeforsøg, før kontoen låses. I dette eksempel er det 2, men du kan øge det (3, 5, 10…).
  • oplåsningstid=120: angiver blokeringstiden i sekunder. Her ville det være 120 sekunder (2 minutter), indtil kontoen automatisk genaktiveres.
  • tavsHvis den er til stede, Det viser ikke brugeren, at de er blevet blokeretDen stopper simpelthen med at acceptere logins, hvilket gør systemet mindre "ordrigt" for en angriber.

En vigtig detalje er, at som standard rod er udelukket fra denne blokHvis du vil have de samme regler til at gælde for det, skal du tilføje parameteren even_deny_root i pam_faillock-linjerne i auth-sektionen. Dette styrker sikkerheden, men du bør overveje risikoen for at miste adgang, hvis du laver for mange fejl.

Når en konto er låst, og du ikke bruger parameteren tavsSystemet kan vise eksplicitte meddelelser, der advarer om, at brugeren har overskredet det tilladte antal forsøg. Dette er nyttigt i testmiljøer til at verificere konfigurationen, selvom det i produktionsmiljøer normalt er bedst ikke at give for mange oplysninger.

For at se en bestemt brugers mislykkede loginforsøg kan du på Red Hat-systemer bruge kommandoen fejllås peger på den konto, du er interesseret i:

faillock --user lionel

Denne kommando viser Hvor mange mislykkede forsøg har brugeren samlet?, inklusive den IP-adresse, der bruges i tilfælde af SSH, og andre detaljer, der er relevante for revisionen. Derudover kan du altid gennemgå, hvad der vises i / Var / log / sikkerhvor disse sikkerhedshændelser vil blive registreret.

begræns adgangskodeforsøg i Linux

Kontolåsning på grund af mislykkede loginforsøg i Debian og Ubuntu

I tilfælde af Debian, Ubuntu og derivaterLogikken er den samme, men det anvendte PAM-modul ændrer sig. Traditionelt har det været brugt pam_tally2 at tælle mislykkede forsøg og automatisk blokere konti, selvom det i moderne versioner anbefales at migrere til pam_faillockAlligevel er pam_tally2 stadig meget til stede i mange guider og miljøer.

For at anvende en lås baseret på antallet af mislykkede forsøg i typisk Debian, redigerer du normalt filen /etc/pam.d/common-authsom definerer standardgodkendelsespolitikken for de fleste lokale tjenester. Du kan tilføje en linje som denne:

auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600

Med denne konfiguration er systemet Kontoen er blokeret efter 3 mislykkede forsøg.Den opretholder låsen i 120 sekunder for normale brugere og i 600 sekunder for root. Desuden, hvis der opstår fejl med modulet (onerr=fejl), af sikkerhedsmæssige årsager nægtes adgang i stedet for at blive tilladt.

De vigtigste parametre for pam_tally2 lyd:

  • onerr=fejlHvis der er et problem med at læse eller opdatere forsøgstælleren, nægtes godkendelse for at undgå, at en dør ved et uheld efterlades åben.
  • afvis=3Maksimalt antal mislykkede forsøg tilladt, før kontoen låses. En værdi på 3 er normalt ret rimelig i praksis.
  • oplåsningstid=120: tid i sekunder, som kontoen forbliver låst for standardbrugere.
  • revision: logger oplysninger om godkendelsesfejl (i Debian er det normalt /var/log/auth.log).
  • even_deny_root: tvinger rod til også at blive talt med i dette låsesystem, noget der bør bruges med forsigtighed.
  • root_unlock_time=600: specifik låsetid for root-kontoen, i sekunder, uafhængigt af de andre brugere.

Når blokeringen aktiveres, vil brugeren se en besked, der angiver, at deres konto er blevet midlertidigt deaktiveret på grund af for mange mislykkede loginforsøg. Dette giver administratoren mulighed for at opdage mistænkelig adfærd og advarer brugeren om, at noget er galt.

For at se de mislykkede forsøg, der er registreret af pam_tally2 For en specifik bruger (for eksempel Lionel) kan du bruge:

pam_tally2 -u lionel

Denne kommando viser antallet af akkumulerede fejl Og det giver dig mulighed for manuelt at nulstille tælleren, hvis det er nødvendigt, med yderligere muligheder. Derudover har du, ligesom i Red Hat, altid mulighed for at gennemgå /var/log/auth.log for at se mere detaljeret, hvad der skete i hvert godkendelsesforsøg.

Begræns SSH-forsøg med MaxAuthTries

Et af de mest almindelige indgangspunkter på Linux-servere er SSHDerfor er det afgørende at kontrollere, hvor mange godkendelsesforsøg der er tilladt pr. forbindelse. Det er her, politikken kommer i spil. MaxAuthTries, som er konfigureret i filen / Etc / ssh / sshd_config fra OpenSSH-serveren.

Ideen er enkel: MaxAuthTries definerer det maksimale antal tilladte godkendelsesforsøg pr. SSH-forbindelseHvis denne grænse overskrides, afbryder serveren forbindelsen, hvilket tvinger angriberen til at starte en ny session for at fortsætte med at prøve kombinationer, hvilket markant forsinker automatiserede brute-force-angreb.

For at konfigurere det skal du blot redigere konfigurationsfilen:

sudo nano /etc/ssh/sshd_config

Find eller tilføj derefter en linje som denne:

MaxAuthTries 3

Med denne værdi, Kun tre godkendelsesforsøg er tilladt pr. SSH-forbindelseHvis brugeren laver den samme fejl flere gange, logger sshd-daemonen dem ud. For at ændringen kan træde i kraft, skal tjenesten genindlæses eller genstartes, for eksempel med:

sudo systemctl restart sshd

MaxAuthTries erstatter ikke PAM-moduler som pam_tally2 eller pam_faillock, men snarere arbejder paralleltSSH-serveren styrer, hvor mange på hinanden følgende forsøg der er tilladt i en enkelt session, mens PAM holder et globalt antal pr. bruger og kan blokere deres konto på systemniveau.

Ud over MaxAuthTries anbefales det at kombinere andre SSH-sikkerhedsforanstaltninger for at gøre tjenesten meget mere robust:

  • Skift standardportStop med at bruge port 22 og flyt SSH til en mindre åbenlys port, hvilket hjælper med at filtrere mange grundlæggende automatiske scanninger fra.
  • Brug offentlige nøgler i stedet for blot adgangskoderGodkendelse ved hjælp af SSH-nøgler eliminerer problemet med svage adgangskoder og er langt mere robust mod brute-force-angreb.
  • Begræns kilder ved hjælp af en firewall eller konfigurer en DMZAt tillade SSH kun fra bestemte IP-adresser eller netværksområder tilføjer en meget effektiv barriere på netværksniveau.

PAM Linux

Begræns lokale godkendelsesforsøg med PAM

Ud over SSH, den lokal godkendelse (konsol, TTY'er, sudo, grafisk displayhåndtering) administreres også med PAM. I Debian og Ubuntu, for eksempel, filen /etc/pam.d/common-auth Det er hjertet i denne konfiguration, og i Red Hat-systemer spilles dens rolle systemgodkendelse (og nogle gange adgangskodegodkendelse).

Udover dedikerede blokeringsmoduler som pam_faillock eller pam_tally2, tillader nogle distributioner begrænsning af loginforsøg og -tider direkte via login.defsI denne fil, som er placeret i /etc/login.defsVærdier som følgende erklæres:

  • LOGIN_REFERSØG: maksimalt antal forsøg tilladt ved loginprompten før processen afbrydes.
  • LOGIN_TIMEOUT: maksimal tid, i sekunder, som login-sessionen må vente på brugerinput.

Hvis du f.eks. justerer LOGIN_REFERSØG Med en grænse på 3 adgangskoder har en bruger kun tre forsøg på at indtaste sin adgangskode i en enkelt loginsession, før systemet lukker forsøget og tvinger dem til at genstarte processen. Det låser ikke kontoen i sig selv, men det gør det. begrænser forsøg pr. session.

I den samme fil login.defs Du kan også justere andre relevante sikkerhedsparametre, såsom:

  • PASS_MAX_DAYS: maksimalt antal dage, en adgangskode kan bruges, før den skal ændres med tvang.
  • PASS_MIN_DAYSMinimum antal dage mellem adgangskodeændringer for at undgå for hyppige og "kædede" ændringer.
  • PASS_WARN_AGEdages varsel før adgangskoden udløber, så brugeren har tid til at reagere.
  • PASS_MIN_LEN y PASS_MAX_LÆNGDEMinimum og maksimal adgangskodelængde.
  • PASS_ALTID_ADVARSEL: advarer, når adgangskoden ikke opfylder bestemte styrkekriterier.
  • PASS_CHANGE_TRIES: maksimalt antal forsøg på ændring af adgangskode, hvis den nye adgangskode anses for at være for simpel.
  • KRYPTERINGSMETODE: hash-algoritme til brug for adgangskoder (det sædvanlige i dag er SHA-512, angivet som $ 6 $).

Disse direktiver påvirker primært nye brugere Disse oprettes efter justering af login.defs, så det er en bekvem måde at etablere en grundlæggende politik for hele organisationen.

Håndtering af forsøg og udløb med /etc/shadow og change-kommandoen

Filen / etc / shadow Det er her, systemet gemmer de krypterede adgangskoder for lokale brugere sammen med alle udløbsoplysninger. Selvom de ikke ændres manuelt dagligt, hjælper forståelsen af ​​deres struktur i høj grad med at revidere og forbedre sikkerhedspolitikker.

I hver linje af / etc / shadow Flere felter vises, adskilt af kolon. De mest relevante for vores politikker er:

  • Brugernavn: identificerer den konto, som resten af ​​felterne tilhører.
  • Krypteret adgangskode: gemmes som $id$salt$hashetHvor $id$ angiver algoritmen ($1 MD5, 2a$/2y$ Blowfish, 5 dollars SHA-256, 6 dollars SHA-512), efterfulgt af salt og hash.
  • Sidste ændring af adgangskodeAntal dage siden 1. januar 1970 (epoke), hvor den sidst blev ændret.
  • Minimum og maksimum antal dages brugDe styrer, hvornår adgangskoden kan ændres igen, og hvornår den udløber.
  • Udløbsvarsel dageHvor mange dage før udløb begynder den at underrette brugeren.
  • Dage med inaktivitetHvor lang tid tager det, før kontoen er helt deaktiveret, når adgangskoden er udløbet?
  • Absolut kontoudløbsdato: også i dageformat siden 1970, markerer det øjeblik, hvor login ikke længere er tilladt for den pågældende bruger.

For at administrere disse parametre uden direkte at berøre /etc/shadow, bruges følgende kommando: jagt (skift alder), som giver dig mulighed for at justere adgangskoden og kontoudløbet for bestemte brugere.

Nogle almindelige muligheder for jagt lyd:

  • -d, –sidste dag: angiver dagen for den sidste ændring af adgangskode (i dage siden epokeformat eller med en læsbar dato).
  • -E, –udløber: angiver den dato, hvorfra kontoen udløber.
  • -I, –inaktivMarkerer kontoen som inaktiv et antal dage efter adgangskoden udløber.
  • -m, –mindage: definerer det mindste antal dage mellem ændringer af adgangskoder.
  • -M, –maks dage: angiver det maksimale antal dage, som adgangskoden er gyldig.
  • -W, –advarselsdage: angiver, hvor mange dage før udløb den vil begynde at underrette.
  • -l, –liste: viser brugerens aktuelle udløbsstatus.

For eksempel for at kontrollere brugerens udløbsoplysninger pepe Det kan udføres:

chage -l pepe

Udgangen vil indikere datoen for den seneste ændring, om adgangskoden udløber eller ej, inaktivitet og minimum og maksimum antal dage...blandt andre data. Med dette værktøj kan du anvende politikker individuelt, bruger for bruger eller i scripts, der behandler hele grupper af konti.

Politikker for adgangskodekompleksitet med pam_cracklib og pam_pwquality

Det er godt at begrænse antallet af forsøg med adgangskoder, men hvis adgangskoderne er noget i retning af "123456" eller "qwerty", kommer du ikke særlig langt. Derfor er det afgørende. tving stærke adgangskoder ved hjælp af PAM-moduler som f.eks. pam_cracklib og i nyere versioner, pam_pwkvalitet.

Modulet pam_pwkvalitet Det er en videreudvikling af cracklib, og det integrerer med biblioteker som f.eks. libpwkvalitet at verificere, at adgangskoder ikke findes i ordbøger, ikke er for korte, og ikke gentager simple mønstre eller brugerens personlige data. Det er integreret i RHEL-baserede miljøer og kan installeres i Debian/Ubuntu ved hjælp af pakker som f.eks. libpam-cracklib y libpam-pwquality.

Når den er installeret, udføres den primære konfiguration normalt i filen /etc/security/pwquality.confhvor du kan definere kompleksitetsparametre såsom:

  • difok: antal tegn, der skal være forskellige fra den forrige adgangskode.
  • minlen: minimum acceptabel længde for den nye adgangskode.
  • dkredit, ukredit, lkredit, okreditKreditering for at inkludere cifre, store bogstaver, små bogstaver og andre tegn.
  • minklasseMinimum antal forskellige tegnklasser kræves (små bogstaver, store bogstaver, cifre, symboler).
  • max gentag: maksimalt antal tilladte identiske tegn i træk.
  • maxclassrepeat: maksimalt antal på hinanden følgende tegn af samme klasse.
  • gecocheckkontrollerer at adgangskoden ikke indeholder ord fra brugerens GECOS-felt (kommentar) i /etc/passwd.
  • diktpathsti til den ordbog, der bruges til at kontrollere, om en adgangskode er en del af et kendt ord.
  • badwords: liste over ord, der eksplicit er forbudt.

Systemet kreditter Det er særligt fleksibelt. Grundlæggende set får en adgangskode kreditter for at inkludere en række forskellige tegn; disse kreditter kan kompensere for en lidt kortere længde. For eksempel med minlen=10 y dkredit=2En adgangskode på 8 tegn med 2 cifre kan bestå filteret, fordi den tilføjer 2 ekstra credits. Men hvis du definerer negative credits, skal du bruge mindst ét ​​negativt tegn (f.eks. dkredit=-1 (kræver mindst ét ​​ciffer, ingen undtagelser).

med minklasse Du kan kræve, at adgangskoden indeholder flere forskellige klasser. En værdi på 2 kræver f.eks. en kombination af bogstaver og tal, bogstaver og symboler osv. minklasse=4 Det ville kræve brug af små bogstaver, store bogstaver, cifre og specialtegn samtidig, noget der er meget typisk i krævende virksomhedspolitikker.

Værktøjer som pwscore De giver dig mulighed for at teste en adgangskodes styrke i forhold til definerede politikker. Når en adgangskode sendes igennem pwscoreDette fortæller dig, om nøglen opfylder kravene eller ej, og hvis ikke, hvilken regel den overtræder (utilstrækkelig længde, for simpel, for lig den forrige osv.).

Konfigurer robuste politikker på Debian og Ubuntu med pam_cracklib

I Debian/Ubuntu-systemer er det meget almindeligt at bruge pam_cracklib (eller pwquality via PAM) for at håndhæve adgangskodepolitikken. Nøglefilen her er /etc/pam.d/common-password, som definerer, hvordan ændringer af adgangskoder håndteres for systembrugere.

Før du rører ved noget, er det god praksis at lave en sikkerhedskopi af filen:

sudo cp /etc/pam.d/common-password /root/

Derefter kan du redigere den med din foretrukne teksteditor (nano, vim osv.) med superbrugerrettigheder. Indeni finder du en linje, der ligner:

password requisite pam_cracklib.so retry=3 minlen=8 difok=3

Her defineres parametre som følgende:

  • prøve igen: antal forsøg tilladt for brugeren ved ændring af adgangskode, før ændringen mislykkes.
  • minlenMinimum adgangskodelængde.
  • difok: antal tegn, der skal være forskellige fra den forrige adgangskode.
  • ukredit, lkredit, dkredit, okreditPositive eller negative kreditter for store bogstaver, små bogstaver, cifre og andre tegn.

For eksempel kunne en ret krævende politik være:

password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3

Med denne opsætning, Hver ny adgangskode skal være mindst 12 tegn langAdgangskoden skal være mindst 3 tegn lang fra den forrige og indeholde mindst 3 store bogstaver, 3 små bogstaver, 3 cifre og 3 symboler. Det er en meget streng politik, men ekstremt effektiv mod trivielle adgangskoder.

Når du har ændret politikken, kan du teste den ved at ændre din egen adgangskode med:

sudo passwd

Hvis adgangskoden ikke opfylder kravene, viser systemet meddelelser med årsagen: for kort, ligner et ord i en ordbog, overdreven gentagelse af tegn osv. Når adgangskoden overholder politikken, anvendes ændringen uden problemer.

Udover at stramme politikken for nye ændringer tillader Debian og Ubuntu tving eksisterende brugere til at ændre deres adgangskode at tilpasse sig de nye regler. Med kommandoen:

passwd -e USUARIO

Brugerens adgangskode er markeret som udløbet, og ved næste login skal de angive en ny adgangskode, der overholder den nuværende politik. Du kan også kontrollere global udløb af adgangskoder med:

passwd -w 5 -x 30 USUARIO

Donde -x 30 fastsætter en maksimal gyldighed på 30 dage for adgangskoden og -w 5 Dette får systemet til at give dig besked 5 dage før udløbsdatoen. Hvis du tilføjer -jeg 1:

passwd -w 5 -x 30 -i 1 USUARIO

Kontoen vil blive markeret som inaktiv, hvis brugeren ikke ændrer sin adgangskode. en dag efter den er udløbet, hvilket tvinger administratoren til at gribe ind for at genaktivere den.

Selvom det i årevis ofte er blevet anbefalet at rotere adgangskoder, kvalificerer moderne sikkerhedsretningslinjer (såsom dem fra NIST) denne praksis: Det er at foretrække at vælge lange og komplekse adgangskoder og tofaktorgodkendelsessystemer, i stedet for at gennemtvinge alt for hyppige ændringer, der ender med at generere forudsigelige nøgler.

Konfigurer omhyggeligt PAM-modulerne (pam_faillock, pam_tally2, pam_cracklib, pam_pwquality) og nøglefiler som f.eks. /etc/pam.d/common-auth, /etc/pam.d/common-password, /etc/login.defs, / Etc / ssh / sshd_config og forstå, hvordan disse beslutninger afspejles i / etc / shadowDette markerer forskellen mellem et "standard"-system og et virkeligt hærdet miljø mod uautoriseret adgang og brute-force-angreb.

Nmap
relateret artikel:
Revider dit lokale netværk med Nmap og Wireshark trin for trin

Tilføj som foretrukken kilde