Je hoort vaak dat voor ssh authenticatie een key veiliger is dan een wachtwoord. Stel nu dat je met maar 1 wachtwoord via ssh kunt inloggen op je server en dat wachtwoord is ca. 20 tekens lang en bestaat deels uit vreemde tekens (dus in theorie niet te raden). Is een wachtwoord dan net zo veilig?
De reden waarom ik dit vraag ... een wachtwoord vind ik prettig omdat ik die vanaf iedere locatie kan toepassen. Ik ben zelf de enige die het wachtwoord kent.
Niet of maar én: je kunt een SSH-key mét passphrase gebruiken.
Verschillende locaties (en zelfs verschillende clients op één locatie) is een voorbeeld van een situatie waarin je meerdere SSH-keys gebruikt, één voor elke client. Als één client namelijk is gecompromitteerd, wil je niet meteen de toegang vanaf andere clients moeten blokkeren.
Ik schat zomaar in dat een wachtwoord voor jou veel voordelen heeft en vermits het 20 tekens lange wachtwoord maar niet het root wachtwoord is want dat kan eindeloos (brute force) geprobeerd worden. Zie je logfiles. Wanner je gebruik wil maken van ssh keys dan moet je voor je grafische webadmin en plesk spul via je browser over een ssh tunnel gaan werken. Dat lijkt me mijl op zeven en veel gedoe en dus een nadeel. Ik gebruik voor het werk geen onhandig stateless grafisch spul en werk inderdaad alleen met ssh key en ip beveiliging. Alleen mijn thuis ip is geautoriseerd op de firewalls van werk. Dus putty opstarten en klik meteen ingelogd. Voor root acties gebruiken we dan sudo. Het is dus niet een kwestie van voor en nadelen afwegen maar ook de wensen en de mogelijkheden. Er is geen heilige graal van beveiliging.
Ward, ik heb inderdaad gelezen dat je ook "én" kunt gebruiken, een key met een pass phrase. Maar dan moet ik dus wel altijd een key hebben. Stel dat ik op een andere locatie ben en toch een keer moet inloggen, dan kan dat dus niet.
John, begrijp ik goed dat men op root ongelimiteerd kan bruteforcen en op elke andere user niet? Dus als ik root-login disable en daarnaast 1 andere user gebruik om in te loggen zit ik "goed"?
> begrijp ik goed dat men op root ongelimiteerd kan bruteforcen
Nee. Elke user is te bruteforcen, maar het mooie van root is dat je weet dat die user op een *nix-systeem altijd bestaat. ;-) Een slimme systeembeheerder stelt overigens zijn systeem zo in dat root-logins over het netwerk niet mogelijk zijn (zoals "PermitRootLogin no" in sshd_config). Een aanvaller moet dan én een geldige username én het bijbehorende password zien te achterhalen.
Blijft alleen nog het punt van die gestaag groeiende secure-log (of auth-log, afhankelijk van je distributie). Dat heb ik verholpen door de secure-log te scannen in een cronjob die elke 2 minuten draait. Zie ik in de laatste 1000 regels meer dan 5 mislukte loginpogingen (voor elke willekeurige gebruiker) vanaf hetzelfde IP-adres, en staat dat adres niet in een whitelist, dan resulteert dat in het commando "iptables -I INPUT -s $ip_adres -j DROP" (in jip-en-janneketaal: blokkeer die sukkel). Het adres wordt bovendien toegevoegd aan de blacklist-database die over alle servers wordt gesynchroniseerd, zodat het betreffende IP-adres binnen een paar minuten op alle servers geblokkeerd is. Dat maakt het bruteforcen er niet eenvoudiger op. ;-)
Overigens verwijs ik bepaalde urls (zoals /cgi-bin/php of alles wat met /w00t begint) door naar hetzelfde script, zodat ook pipo's die onze webservers afscannen naar bekende vulnerabilities dat niet erg lang volhouden.
> begrijp ik goed dat men op root ongelimiteerd kan bruteforcen
Ja, op user root kan men in principe ongelimiteerd brute forcen. Ik zie in mijn logwatch oneindig veel pogingen om met root in te loggen. Ik heb inderdaad zoals Willem al aangeeft RootLogin=No staan dus men komt er nooit in met root. Brute Force op gewone users is daarintegen makkelijk uit te sluiten door simpel de gewone user op max 3 foute logins en dan blocked te zetten. Daar kan geen brute force tegenop. Dus stel dat een username extern bekend raakt dan is bij de 3e poging brute force de pret al over. Dat noem ik niet echt brute force, 3 pogingen. Die user geef je dan wel weer vrij maar bij de 2e keer ga je toch eens kijken wat er gebeurt. Ik heb deze cron entry dagelijks om 00:10 uur:
/usr/sbin/logwatch --detail high --range yesterday >/var/log/logwatch.log 2>&1
Ozzie, je moet maar eens kijken naar Logwatch en dan in Detail Level of Output op 10 zetten en kijken wie en wat er zoals dagelijks (honderden) pogingen gedaan wordt op je systeem. Zowel ssh als http
Gebruik jij een panel? Ik meen dat dit soort beveiligingsfunctionaliteit hier namelijk standaard al zit ingebouwd. Maar als je dus PermitRootLogin disablet, dan ben je dus eigenlijk "veilig"?
@Aad:
>> /usr/sbin/logwatch --detail high --range yesterday >/var/log/logwatch.log 2>&1
Wat doe je hier dan precies mee? Als ik het goed begrijp overschrijft dit bestand zichzelf dagelijks? Ga jij dan iedere dag kijken wat er is gebeurd?
Wat doe je hier dan precies mee? Als ik het goed begrijp overschrijft dit bestand zichzelf dagelijks? Ga jij dan iedere dag kijken wat er is gebeurd?
Ik heb dit bestand opgegeven in de round robin van logfiles en ik bewaar er 30 om terug te kijken. In het begin heb ik ook de volgende cron regel gebruikt:
/usr/sbin/logwatch --detail high --range yesterday --mailto [email protected]
Als je ze zelf per maand wil bewaren kan je de bestandsnaam ook uitbreiden met: $(date +\%d).