DenyHost er et lille program der kører i baggrunden og holder øje med hvor mange mislykkedes ssh forsøg maskinen modtaget, og hvis den modtager for mange fra den samme IP Adresse blokeres denne adresse simpelthen.
Det er ikke særligt svært at sætte op, men nu sider jeg og skal installere det på en lang række maskiner så jeg tænkte at jeg lige ville bruge lejligheden til at få skrevet et blogindlæg om det 😉
Først:
# apt-get install denyhosts
og nu virker det faktisk, lad os teste:
# ssh lab01.mikjaer.com lab01:~# ssh server -l root root@server's password: Permission denied, please try again. root@server's password: Permission denied, please try again. root@server's password: Permission denied (publickey,password). lab01:~# ssh server -l root root@server's password: Permission denied, please try again. root@server's password: Permission denied, please try again. root@server's password: Permission denied (publickey,password). lab01:~# ssh server -l root ssh_exchange_identification: Connection closed by remote host
Efter relativt få forsøg bliver forbindelsen blokeret og vi får ikke længere lov at forsøge os frem, så langt så godt, men jeg kunne godt tænke mig at blive informeret når det sker, derfor retter jeg i /etc/denyhosts.conf: (Tilpas flg. værdier)
ADMIN_EMAIL = root@localhost SMTP_HOST = smtp.eksempel.dk SMTP_FROM = DenyHosts <nobody@server>
Herefter:
# /etc/init.d/denyhosts restart
Gentag nu ovenstående test (slet ip adressen på din server i /etc/hosts.deny for at fjerne den tidligere opnåede spærring). Det skulle gerne resultere i en mail som denne:
Added the following hosts to /etc/hosts.deny: 208.254.58.144 (mobismtp.vls-global.com) 218.77.120.142 (unknown) 209.165.131.61 (osscszibscnvm-2.gci.net) 109.75.21.200 (as1.navacom.de) 77.76.109.119 (77-76-109-119.static.unassigned.as8607.net) 93.189.94.179 (pixeliastudio.siliconpeople.net) 116.58.221.96 (116-58-221-96.net-infinity.net) 1.234.20.21 (unknown) 192.168.0.212 (lab1.mikjaer.com)
Det sidste, men absolut ikke ubetydelige, er muligheden for at synkronisere dine indstillinger med denyhost’s egen database over angrebsadresser, rediger igen /etc/denyhosts.conf, og udkommenter flg. linie:
SYNC_SERVER = http://xmlrpc.denyhosts.net:9911
Playing the waiting game … hvis du går ud og laver en kop kaffe og venter 10-20 minutter, så kan du i /var/log/denyhosts se noget lign.:
2012-10-08 22:47:46,188 - sync : INFO sent 2 new hosts 2012-10-08 22:47:46,188 - sync : ERROR [Errno 2] No such file or directory: '/var/lib/denyhosts/sync-timestamp' 2012-10-08 22:47:46,526 - sync : INFO received 0 new hosts
Hvilket viser at kommunikation med sync-serveren fungerer, og du kan nu tjekke indholdet af /var/lib/denyhosts/sync-timestamp og konkludere at filen nu ér oprettet, og dermed ikke er “Not found” næste gang sync kører.
Lidt senere:
2012-10-08 22:52:47,171 - sync : INFO received 20 new hosts 2012-10-08 22:52:47,172 - denyhosts : INFO received new hosts: ['175.184.20.235', '180.153.148.20', '61.155.178.242', '117.21.208.26', '222.68.193.150', '50.63.141.243', '159.226.43.35', '115.124.104.71', '199.201.126.83', '75.117.157.193', '212.250.207.123', '183.203.15.239', '81.169.170.213', '190.146.233.184', '88.191.123.49', '182.140.140.7', '12.43.112.222', '122.155.7.225', '202.117.3.104', '94.142.233.169']
Evt. verificer i /etc/hosts.deny at ip adresserne er oprettet i filen, det er den hos mig.
Ergo virker det!
Nu har du ikke blot taget et vigtigt skridt for at sikre dig selv, men også hjulpet til med at beskytte andre ved automatisk at indmelde angrebsforsøg til de centrale servere.
En sidste ting du kan gøre, hvis du vil undgå at risikere at lukke dig selv ude er at whiteliste din egen ip adresse, tilføj flg. til /etc/hosts.allow:
ALL: 10.20.30.40
Happy hacking 😉