De kans is groot dat jouw SSH-server al honderden keren per dag aangevallen wordt. Het gebruik van het woord groot is een understatement. Ik ben ervan overtuigd dat jouw server vrijwel zeker honderden aanvallen per dag ondergaat.Desondanks bekijken veel ontwikkelaars de /var/log map nauwelijks. Voer nu eens een simpele journalctl -f |grep ssh uit in de terminal.
Als je de logs goed bekijkt:
-
Wie
-
Wanneer
-
Waar
-
Hoe
ze probeerden in te loggen op de server, wordt duidelijk zichtbaar.
In dit artikel geef ik een overzicht vanuit het perspectief van een ontwikkelaar over hoe je SSH-serverlogs kunt interpreteren en echte hacking-indicatoren kunt ontdekken.
1. Waar worden SSH-logs opgeslagen?
De locatie van SSH-logs verschilt een beetje per Linux-distributie.
Over het algemeen:
-
Ubuntu / Debian-gebaseerd
/var/log/auth.log
-
CentOS / RHEL-gebaseerd
/var/log/secure
-
gemeenschappelijke systemd-opdrachten
journalctl -u ssh.serviceofjournalctl -u sshd
Je kunt tail gebruiken, maar persoonlijk geef ik de voorkeur aan het bekijken via journald. Dit komt omdat je de logs van alle services op één plek kunt bekijken.
# Voorbeeld voor Ubuntu
sudo tail -f /var/log/auth.log
# Voorbeeld voor CentOS/RHEL
sudo tail -f /var/log/secure
# Live bekijken van systemd service logs
sudo journalctl -u ssh.service -f
tip: Zelfs op een ontwikkelserver is het goed om af en toe de gewoonte aan te nemen om logs te “bewaken” met tail -f.
Klik "hier" voor meer informatie over het gebruik van journald!
2. Een regel van de SSH-log ontleden
Laten we een typische regel uit SSH-logs bekijken om de structuur te begrijpen. (Voorbeeld voor Ubuntu)
2.1 Succesvolle aanmelding met een openbare sleutel
Jan 10 12:34:56 myserver sshd[12345]: Accepted publickey for deploy from 203.0.113.10 port 50312 ssh2: ED25519 SHA256:xxxx
De betekenis van elke sectie:
-
Jan 10 12:34:56: Datum, tijd -
myserver: Hostnaam -
sshd[12345]: Procesnaam (SSH-daemon) en PID -
Accepted publickey: Succevolle authenticatie, methode is openbare sleutel -
for deploy: Naam van het inlogaccount -
from 203.0.113.10: IP-adres van de verbinding -
port 50312: Clientzijde poort -
ssh2: ED25519 ...: Protocol-/sleuteltype-informatie
Als je dit begrijpt, kun je snel bepalen “wie en van waar met welke sleutel is ingelogd”.
2.2 Mislukte aanmelding met een wachtwoord
Jan 10 12:35:01 myserver sshd[12346]: Failed password for root from 198.51.100.23 port 50320 ssh2
-
Failed password: Mislukte wachtwoordauthenticatie -
for root: Poging met het root-account -
from 198.51.100.23: Afstands-IP
Als deze logs tientallen tot honderden keren op korte tijd voorkomen,
is het vrijwel zeker een brute-force-aanval.
2.3 Poging tot inloggen met een niet-bestaande gebruiker
Jan 10 12:35:05 myserver sshd[12347]: Invalid user admin from 198.51.100.23 port 50325
Invalid user admin: Poging tot inloggen met hetadminaccount dat niet op de server bestaat
Dit is ook een patroon dat vaak door geautomatiseerde bots wordt gebruikt.
3. Typische aanvalspatronen aan de hand van logs
3.1 Brute-force aanval
Kenmerken:
-
Failed passwordlogs komen in korte tijd zeer veel voor -
Verschillende pogingen van hetzelfde IP-adres
-
Accountnamen zoals
root,admin,test,oracleworden gebruikt
Snel controlevoorbeeld:
# Totaal aantal Failed password
sudo grep "Failed password" /var/log/auth.log | wc -l
# Welk account het meest aangevallen wordt
sudo grep "Failed password" /var/log/auth.log \
| awk '{for (i=1;i<=NF;i++) if ($i=="for") print $(i+1)}' \
| sort | uniq -c | sort -nr | head
3.2 Scannen naar niet-bestaande gebruikers
sudo grep "Invalid user" /var/log/auth.log | head
Als er veel van deze logs zijn, betekent dit dat er gewoon een poging gedaan wordt om te raden welke accounts op deze server bestaan.
3.3 Overmatige pogingen van een specifiek IP-adres
Controleer welke IP's bijzonder vaak falen:
sudo grep "Failed password" /var/log/auth.log \
| awk '{print $(NF-3)}' \
| sort | uniq -c | sort -nr | head
Hier is $(NF-3) gewoonlijk het IP dat naar from <IP> verwijst,
maar het kan iets verschillen per omgeving, dus je moet het aanpassen aan je eigen logformat.
4. Ongewone signalen vinden tussen “succesvolle” aanmeldingen
Aanvallen blijven meestal mislukt, maar het echt verontrustende zijn de succesvolle aanmeldingen.
4.1 Geaccepteerde logs verzamelen
sudo grep "Accepted" /var/log/auth.log
Geef bijzondere aandacht aan:
-
Toegang met accounts die normaal niet gebruikt worden
-
Toegang op ongebruikelijke tijdstippen (bijv. 3 uur 's nachts)
-
IP-adressen uit ongebruikelijke landen/segmenten (niet vanuit het bedrijf/thuis/VPN)
4.2 Bekijk recente aanmeldgeschiedenis in één keer
De last opdracht toont de recente aanmeldgeschiedenis.
# Recente SSH-aanmeldingen
last -i | head
# Mislukte aanmeldingen (in ondersteunde omgevingen)
lastb | head
“toegang zonder mijn medeweten” opmerken.
5. Praktische loganalyse: Voorbeeld van een snelle controleroutine
Stel dat je een SSH-server hebt,
laten we een controle routine creëren die in 5 minuten kan worden uitgevoerd.
5.1 Stap 1: Totale mislukkingen in aanmeldingen controleren
sudo grep "Failed password" /var/log/auth.log | wc -l
sudo grep "Invalid user" /var/log/auth.log | wc -l
- Als deze getallen plotseling toenemen, is het aanleiding om te vermoeden dat de “intensiteit van de aanval” is toegenomen.
5.2 Stap 2: Top 10 IP’s met de meeste aanvallen
sudo grep "Failed password" /var/log/auth.log \
| awk '{print $(NF-3)}' \
| sort | uniq -c | sort -nr | head
- De bovenste IP’s kunnen worden toegevoegd aan de firewall/
fail2banregels.
5.3 Stap 3: Pogingen om in te loggen als root
sudo grep "Failed password for root" /var/log/auth.log | tail
sudo grep "Accepted.*root" /var/log/auth.log
Acceptedbetekent dat er al met succes is ingelogd als root, wat zeer gevaarlijk is.
5.4 Stap 4: Recent geslaagde aanmeldingen scannen
sudo grep "Accepted" /var/log/auth.log | tail -n 50
Hier zijn de punten om op te letten:
-
Is het een IP dat ik niet ken?
-
Vindt het plaats in normale werkuren?
-
Is het een nieuw account dat voor het eerst opduikt?
6. Wat heb je aan logs? Direct toepasbare verdediging
Als je een aanval ruikt in de logs,
moet je nu verdedigingsinstellingen toepassen.
6.1 Wachtwoord inloggen uitschakelen (alleen openbare sleutels toestaan)
In /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes
Na het aanpassen:
sudo systemctl reload sshd
# of
sudo service ssh restart
Zorg ervoor dat je eerst succesvol hebt ingelogd met de openbare sleutel voordat je het wachtwoord uitschakelt.
Als je dit verkeerd doet, kun je jezelf buitensluiten.
6.2 Direct inloggen als root verbieden
PermitRootLogin no
Voorkom directe toegang als root,
het is beter om in te loggen met een gewoon account en vervolgens sudo te gebruiken.
6.3 Poort wijzigen (om ruis te verminderen)
Port 22 # -> bijvoorbeeld naar: 2222
-
Het veranderen van de poort verhoogt niet noodzakelijk de “beveiliging”, maar
-
de overvloedige logs van ongebreideld automatisch scannen/aanvallen zullen aanzienlijk verminderen,
waardoor je echte verdachte signalen beter kunt detecteren.
6.4 Gebruik maken van tools zoals fail2ban
fail2ban monitort de logs en
-
wanneer van hetzelfde IP-adres
-
binnen korte tijd
-
meerdere mislukte aanmeldingen plaatsvinden
voegt deze automatisch toe aan de firewallregels om te blokkeren.
Het concept is eenvoudig:
-
Bewaken van
auth.logvoor hetFailed passwordpatroon -
Bij overschrijding van een bepaalde drempel wordt het IP geblokkeerd met iptables/ufw
Het automaten van loganalyse om brute-force aanvallen automatisch te blokkeren.
6.5 Beperk SSH-toegang via een firewall
Als het mogelijk is:
-
Stel alleen toegang toe vanaf het bedrijfs-VPN of specifieke vaste IP's naar
22/tcp(of wijzig de poort) -
Blokkeer de rest volledig
Bijvoorbeeld een eenvoudig voorbeeld met ufw
sudo ufw allow from 203.0.113.50 to any port 22 proto tcp
sudo ufw deny 22/tcp
7. “Minimale log controle routine” voor ontwikkelaars
Als we het samenvatten tot wat realistisch is voor ontwikkelaars tijdens hun werk,
zulke stappen kunnen de beveiligingsgevoeligheid volledig veranderen.
Een keer per week:
-
Bekijk het aantal
Failed password,Invalid userin de afgelopen week -
Controleer de TOP 10 IP's met de meeste mislukkingen
-
Kijk in de
Acceptedlogs-
Nieuwe IP's,
-
Ongewone tijdstippen,
-
Onbekende accounts
-
-
Blokkeer verdachte IP's met de firewall/
fail2banenzovoort
Een keer zelf met je ogen bekijken,
geeft je al een gevoel van “Oh, deze server wordt echt elke dag aangevallen”
en vergroot de wil om tijd in beveiligingsinstellingen te investeren.

Conclusie: Open nu meteen de logs
SSH-beveiliging begint niet met grootschalige oplossingen,
maar met het zien van wat er werkelijk op mijn server gebeurt.
-
Kijk naar
/var/log/auth.logof/var/log/secure -
Lees het aan de hand van
Failed password,Invalid user,Accepted -
Als iets vreemd is, verander dan onmiddellijk instellingen en overweeg om een firewall en
fail2banin te stellen
Als je dit artikel helemaal hebt gelezen,
ben je nu klaar om je voor te bereiden om “hacking te voorkomen door geen logs te bekijken”
Nu kun je de terminal openen en de serverlogs zelf bekijken.
Voor ontwikkelaars moet beveiliging een vereiste en een routine zijn.
댓글이 없습니다.