Door Anoniem: Of fail2ban
http://www.fail2ban.org/wiki/index.php/Main_Page
Block login after 3 failed attempts for 1 hour ;-)
Ik ben daarmee begin 2010 gestopt toen de netwerken van gecompromitteerde pc's al een poosje zo omvangrijk waren dat elke poging van een duidelijk samenhangende dictionary-attack van een ander IP-adres kwam (de loginnamen waren alfabetisch, de IP-adressen willekeurig). Fail2ban zag de verbanden niet meer en was nutteloos geworden. De aanvallers hielden duidelijk rekening met fail2ban en soortgelijke tools. Gaat dat tegenwoordig weer beter?
Je kan het ook omdraaien en de poort alleen openzetten wanneer dat nodig is. Er bestaan allerlei varianten van port knocking die dat faciliteren. Die vervangen natuurlijk niet de authenticatie, maar op de een of andere manier reageren critici van port knocking alsof dat meteen het enige is wat je nog doet. Wat ik tegenkwam in tools die dit faciliteren kwam wat omslachtig op me over, dus begon ik simpel en zette via iptable-rules de ssh-poort gedurende 30 seconden open voor nieuwe verbindingen door op een nep-URL te reageren binnen de website die op de betreffende server draait:
iptables -A INPUT -p tcp --dport http -m string --algo kmp --string 'GET /klopklop/' -m recent --set --name BINNEN
iptables -A INPUT -p tcp --dport ssh -m recent --rcheck --seconds 30 --name BINNEN -j ACCEPT
Er staat bij mij iets anders dan klopklop en BINNEN ;-). Er is al een rule die verkeer op bestaande verbindingen toelaat, dus er hoeft alleen even tijd gemaakt te worden om een nieuwe verbinding op te zetten. Vanuit een shell (of een script) doe je:
wget http://<server>/klopklop/ # geeft een 404 Not Found
ssh <server> # lukt alleen in de eerste 30 seconden
De ssh-toegang staat alleen open voor het IP-adres van waar de URL werd opgevraagd. Voor de authenticatie gebruik ik sleutels, dit dient alleen om de poort te camoufleren, vergelijkbaar met het gebruiken van een afwijkende poort. Ik heb sinds ik dit zo ingesteld heb, een kleine twee jaar nu, niet één brute force-aanval meer gezien, dus in al zijn eenvoud is het voor mij heel effectief. Daar moet ik wel bij aantekenen dat de ssh-toegang van buiten weinig wordt gebruikt, en dus ook deze constructie niet, wat de kans dat iemand die op de verbinding meeluistert het trucje doorkrijgt klein houdt. Maar een alternatieve poort voor ssh is nog makkelijker te doorzien, dus daar doet dit niet voor onder, en de URL is zonodig snel aangepast.