Met fail2ban
, blokkeert uw Linux-computer automatisch IP-adressen met te veel verbindingsfouten. Het is zelfregulerende beveiliging! We laten u zien hoe u het kunt gebruiken.
Beveiliging Beveiliging Beveiliging
De hertogin van Windsor, Wallis Simpson, zei ooit beroemd: “Je kunt nooit te rijk of te mager zijn.” We hebben dit bijgewerkt voor onze moderne, onderling verbonden wereld: u kunt nooit te voorzichtig of te veilig zijn.
Als uw computer inkomende verbindingsverzoeken accepteert, zoals Secure Shell (SSH) -verbindingen, of als een web- of e-mailserver fungeert, moet u deze beschermen tegen brute-force-aanvallen en wachtwoord-raden.
Om dit te doen, moet u verbindingsverzoeken controleren die geen toegang krijgen tot een account. Als ze zich herhaaldelijk niet binnen een korte periode kunnen authenticeren, moeten ze worden uitgesloten van verdere pogingen.
De enige manier waarop dit praktisch kan worden bereikt, is door het hele proces te automatiseren. Met een beetje eenvoudige configuratie, fail2ban
beheert het toezicht, het verbod en het ongedaan maken voor u.
fail2ban
integreert met de Linux-firewall iptables
. Het dwingt de verboden op de verdachte IP-adressen af door regels aan de firewall toe te voegen. Om deze uitleg overzichtelijk te houden, gebruiken we iptables
met een lege regelset.
Als u zich zorgen maakt over de beveiliging, heeft u waarschijnlijk een firewall die is geconfigureerd met een goed gevulde regelset. fail2ban
voegt alleen zijn eigen regels toe en verwijdert deze – uw reguliere firewallfuncties blijven onaangeroerd.
We kunnen onze lege regelset zien met deze opdracht:
sudo iptables -L
VERWANT: De beginnershandleiding voor iptables, de Linux Firewall
Fail2ban
Installeren fail2ban
is eenvoudig voor alle distributies die we hebben gebruikt om dit artikel te onderzoeken. Op Ubuntu 20.04 is de opdracht als volgt:
sudo apt-get install fail2ban
Typ op Fedora 32:
sudo dnf install fail2ban
Op Manjaro 20.0.1 gebruikten we pacman
:
sudo pacman -Sy fail2ban
Fail2ban configureren
De fail2ban
installatie bevat een standaard configuratiebestand genaamd jail.conf. Dit bestand wordt overschreven wanneer fail2ban
is geüpgraded, dus we gaan onze wijzigingen kwijt als we dit bestand aanpassen.
In plaats daarvan kopiëren we het bestand jail.conf naar een bestand met de naam jail.local. Door onze configuratiewijzigingen in jail.local te plaatsen, blijven ze behouden tijdens upgrades. Beide bestanden worden automatisch gelezen door fail2ban
.
Dit is hoe het bestand te kopiëren:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Open nu het bestand in uw favoriete editor. We gaan gebruiken gedit
:
sudo gedit /etc/fail2ban/jail.local
We zoeken twee secties in het bestand: [DEFAULT] en [sshd]. Zorg er echter voor dat u de daadwerkelijke secties vindt. Die labels verschijnen ook bovenaan in een sectie waarin ze worden beschreven, maar dat is niet wat we willen.
U vindt de [DEFAULT] sectie ergens rond regel 40. Het is een lange sectie met veel opmerkingen en uitleg.
Blader omlaag naar regel 90 en u vindt de volgende vier instellingen die u moet weten:
-
negeren Een witte lijst met IP-adressen die nooit zullen worden verbannen. Ze hebben een permanente Get Out of Jail Free-kaart. Het localhost IP-adres (
127.0.0.1
) staat standaard in de lijst, samen met het IPv6-equivalent (::1
). Als er andere IP-adressen zijn waarvan je weet dat ze nooit mogen worden verbannen, voeg ze dan toe aan deze lijst en laat een spatie tussen elk adres. - bantime: De duur waarvoor een IP-adres is geblokkeerd (de “m” staat voor minuten). Als u een waarde typt zonder een “m” of “h” (voor uren), wordt deze als seconden behandeld. Een waarde van -1 zal een IP-adres permanent verbannen. Pas op dat u uzelf niet permanent buitensluit.
- vindtijd: De hoeveelheid tijd waarin te veel mislukte verbindingspogingen zullen resulteren in een IP-adres dat wordt geblokkeerd.
- maxretry: De waarde voor ‘te veel mislukte pogingen’.
Als een verbinding vanaf hetzelfde IP-adres wordt gemaakt maxretry
mislukte verbindingspogingen binnen het findtime
periode, zijn ze verboden voor de duur van de bantime
. De enige uitzonderingen zijn de IP-adressen in het ignoreip
lijst.
fail2ban
plaatst de IP-adressen voor een bepaalde tijd in de gevangenis. fail2ban
ondersteunt veel verschillende jails, en elk vertegenwoordigt bevat de instellingen die van toepassing zijn op een enkel verbindingstype. Hierdoor kunt u verschillende instellingen hebben voor verschillende verbindingstypen. Of je kunt hebben fail2ban
bewaak alleen een gekozen set verbindingstypen.
Je hebt het misschien geraden van de [DEFAULT] sectienaam, maar de instellingen die we hebben bekeken, zijn de standaardinstellingen. Laten we nu eens kijken naar de instellingen voor de SSH-gevangenis.
VERWANT: Tekstbestanden grafisch bewerken op Linux met gedit
Een gevangenis configureren
Met jails kun je verbindingstypen in- en uitschakelen fail2ban's
toezicht houden. Als de standaardinstellingen niet overeenkomen met de instellingen die u op de gevangenis wilt toepassen, kunt u specifieke waarden instellen voor bantime
, findtime
, en maxretry
.
Scrol omlaag naar regel 280 en u ziet het [sshd] sectie.
Hier kunt u waarden instellen voor de SSH-verbindingsjail. Om deze gevangenis op te nemen in de monitoring en banning, moeten we de volgende regel typen:
enabled = true
We typen ook deze regel:
maxretry = 3
De standaardinstelling was vijf, maar we willen voorzichtiger zijn met SSH-verbindingen. We hebben het teruggezet op drie en vervolgens het bestand opgeslagen en gesloten.
We hebben deze gevangenis toegevoegd aan fail2ban's
bewaken en een van de standaardinstellingen overschrijven. Een gevangenis kan een combinatie van standaard- en gevangenispecifieke instellingen gebruiken.
Fail2ban inschakelen
Tot nu toe hebben we geïnstalleerd fail2ban
en geconfigureerd. Nu moeten we het inschakelen als een auto-startservice. Vervolgens moeten we het testen om er zeker van te zijn dat het werkt zoals verwacht.
In staat te stellen fail2ban
als service gebruiken we de systemctl
opdracht:
sudo systemctl enable fail2ban
We gebruiken het ook om de service te starten:
sudo systemctl start fail2ban
We kunnen de status van de service controleren met systemctl
ook:
sudo systemctl status fail2ban.service
Alles ziet er goed uit – we hebben groen licht, dus alles is in orde.
Eens kijken of fail2ban
gaat akkoord:
sudo fail2ban-client status
Dit weerspiegelt wat we hebben opgezet. We hebben een enkele gevangenis ingeschakeld, genaamd [sshd]. Als we de naam van de gevangenis opnemen bij ons vorige commando, kunnen we er dieper op ingaan:
sudo fail2ban-client status sshd
Dit geeft het aantal fouten en verboden IP-adressen weer. Op dit moment zijn alle statistieken natuurlijk nul.
Onze gevangenis testen
Op een andere computer doen we een SSH-verbindingsverzoek naar onze testmachine en typen we het wachtwoord opzettelijk verkeerd. Bij elke verbindingspoging krijgt u drie pogingen om het wachtwoord juist te krijgen.
De maxretry
waarde wordt geactiveerd na drie mislukte verbindingspogingen, niet drie mislukte wachtwoordpogingen. We moeten dus drie keer een onjuist wachtwoord typen om de verbindingspoging te mislukken.
We zullen dan opnieuw proberen om verbinding te maken en het wachtwoord nog drie keer verkeerd typen. De eerste poging tot een onjuist wachtwoord van het derde verbindingsverzoek zou moeten worden geactiveerd fail2ban.
Na het eerste onjuiste wachtwoord bij het derde verbindingsverzoek, krijgen we geen antwoord van de externe machine. We krijgen geen uitleg; we krijgen gewoon de koude schouder.
U moet op Ctrl + C drukken om terug te keren naar de opdrachtprompt. Als we het nog een keer proberen, krijgen we een ander antwoord:
ssh dave@ubuntu20-04.local
Voorheen was het foutbericht ‘Toestemming geweigerd’. Deze keer wordt de verbinding ronduit geweigerd. We zijn persona non grata. We zijn verbannen.
Laten we eens kijken naar de details van het [sshd] weer de gevangenis:
sudo fail2ban-client status sshd
Er waren drie fouten en één IP-adres (192.168.4.25) is verbannen.
Zoals we eerder al zeiden, fail2ban
dwingt verboden af door regels toe te voegen aan de firewallregelset. Laten we de regelset nog eens bekijken (deze was voorheen leeg):
sudo iptables -L
Er is een regel toegevoegd aan het INPUT-beleid, waardoor SSH-verkeer naar het f2b-sshd
ketting. De regel in het f2b-sshd
chain weigert SSH-verbindingen van 192.168.4.25. We hebben de standaardinstelling voor bantime
, dus binnen 10 minuten wordt dat IP-adres ongedaan gemaakt en kan het nieuwe verbindingsverzoeken indienen.
Als je een langere ban-duur instelt (zoals enkele uren), maar je wilt dat een IP-adres eerder een ander verbindingsverzoek doet, kun je dit vroegtijdig vrijgeven.
We typen het volgende om dit te doen:
sudo fail2ban-client set sshd unbanip 192.168.5.25
Als we op onze externe computer nog een SSH-verbindingsverzoek doen en het juiste wachtwoord typen, mogen we verbinding maken:
ssh dave@ubuntu20-04.local
Simpel en effectief
Eenvoudiger is meestal beter, en fail2ban
is een elegante oplossing voor een lastig probleem. Het vergt heel weinig configuratie en legt nauwelijks operationele overhead op – voor u of uw computer.