Category Archives: Beveiliging

Houd hackers buiten de deur met Fail2ban

Beveiliging is een zeer breed begrip, er is niet één tool die ervoor zorgt dat hackers geen kans hebben om in te breken op je servers.  Optimale veiligheid bereik je door een een juiste verhouding na te streven tussen beleid en techniek.

Één van de tools die bijdraagt aan veiligheid door middel van techniek is Fail2ban. Fail2ban houdt realtime de logbestanden van je server in de gaten. Het blokkeert i.p.-adressen die kwaadaardige handelingen uit proberen te voeren, zoals veel authenticatiefouten of zoeken naar bekende exploits in software.

Optioneel kun je Fail2ban een e-mail laten sturen als er een i.p.-adres wordt geblokkeerd. Er worden, door middel van een WHOIS worden er ook ook gegevens achterhaald van een i.p.-adres. Bijvoorbeeld:

-------- Original Message --------
Subject: [Fail2Ban] SSH: banned 116.10.191.222
Date:	Wed, 18 Jun 2014 19:05:54 +0000
From:	Fail2Ban <fail2ban@mijnserver.nl>
To:	beheer@marsman-ic.nl

Hi,

The IP 116.10.191.222 has just been banned by Fail2Ban after
5 attempts against SSH.

Here are more information about 116.10.191.222:

[Querying whois.arin.net]
[Redirected to whois.apnic.net]
[Querying whois.apnic.net]
[whois.apnic.net]
% [whois.apnic.net]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

% Information related to '116.8.0.0 - 116.11.255.255'

inetnum:        116.8.0.0 - 116.11.255.255
netname:        CHINANET-GX
descr:          CHINANET Guangxi province network
descr:          Data Communication Division
descr:          China Telecom
country:        CN
admin-c:        CR76-AP
tech-c:         BD37-AP
status:         ALLOCATED PORTABLE
remarks:        service provider
mnt-by:         APNIC-HM
mnt-lower:      MAINT-CHINANET
mnt-lower:      MAINT-CHINANET-GX
<knip>
......
</knip>
% This query was served by the APNIC Whois Service version 1.69.1-APNICv1r0 (WHOIS1)

Regards,

Marsman ICT Consultancy - Fail2Ban

In bovenstaande e-mail zie je dat i.p.-adres 116.10.191.222 is geblokkeerd omdat er 5 maal vanaf dit i.p.-adres met een verkeerde login is geprobeerd in te loggen via SSH. Dit is ook te zien in het log op de server (/var/log/secure):

Jun 18 19:04:00 mijnserver sshd[7059]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.10.191.222  user=root

Tijd voor de installatie

Voor de installatie maak ik gebruik van een Debian-based besturingssysteem (LInux mint). Fail2ban is opgenomen in veel distributies of anders te installeren vanaf source.

    • Gebruik de package manager van je distributie om Fail2ban te installeren:
      mijnserver ~ # sudo apt-get install fail2ban
      Reading package lists... Done
      Building dependency tree       
      Reading state information... Done
      Suggested packages:
        python-gamin
      The following NEW packages will be installed:
        fail2ban
      0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
      Need to get 108 kB of archives.
      After this operation, 501 kB of additional disk space will be used.
      Get:1 http://archive.ubuntu.com/ubuntu/ saucy/universe fail2ban all 0.8.10-3 [108 kB]
      Fetched 108 kB in 0s (164 kB/s)    
      Selecting previously unselected package fail2ban.
      (Reading database ... 226197 files and directories currently installed.)
      Unpacking fail2ban (from .../fail2ban_0.8.10-3_all.deb) ...
      Processing triggers for man-db ...
      Processing triggers for ureadahead ...
      ureadahead will be reprofiled on next reboot
      Setting up fail2ban (0.8.10-3) ...
       * Starting authentication failure monitor fail2ban                          [ OK ]
      

      Zoals je ziet wordt Fail2ban netjes geïnstalleerd en gestart als daemon met de standaard instellingen.

  • Stel de configuratie in naar wens: In /etc/fail2ban/ vind je de bestanden om Fail2ban in te stellen. fail2ban.conf hoeft niet te worden aangepast. In dit voorbeeld zal ik in het bestand jail.conf een aantal parameters toelichten en de jail doornemen voor SSH.
    mijnserver /etc/fail2ban # vim jail.conf
    [DEFAULT] # Standaard instellingen die per jail kunnen worden over overruled.
    ignoreip = 127.0.0.1/8 # Zet hier vooral je eigen I.P.-adres in!>
    bantime&nbsp; = 600 # Aantal seconden dat een I.P.-adres geblokkeerd wordt.
    findtime = 600 # Tijd waarbinnen het aantal 'maxretry's' moet plaatsvinden.
    maxretry = 3 # Hoeveel foute pogingen er worden toegestaan binnen de 'findtime'
    backend = auto # Welke techniek er moet worden gebruikt.
    destemail = beheer@marsmanic.nl # Waar de mail heen moet gaan (zie hierboven).
    banaction = iptables-multiport # Wat te gebruiken om te bannen?
    mta = sendmail # Welke MTA moet er worden gebruikt om te mailen?
    protocol = tcp # Standaard protocol
    chain = INPUT # Als bij banaction iptables wordt gebruikt, in welke chain?

    De SSH Jail:

    [ssh] # De jail
    
    enabled  = true # Is de jail actief?
    port     = ssh # Welke poort? In dit geval 22
    filter   = sshd # Waar moet fail2ban op fileren in het log?
    logpath  = /var/log/auth.log # welk logbestand moet er worden gebruikt?
    maxretry = 3 # hoeveel foute inlogpogingen worden er toegestaan?
  • Herstart en wacht af!
    mijnserver # sudo /etc/init.d/fail2ban restart
     * Restarting authentication failure monitor fail2ban                         [ OK ]

 

Je kunt nu vanaf een andere machine proberen 3x achter elkaar in te loggen met een fout wachtwoord. De vierde keer zal er een timeout optreden en zul je een mail ontvangen van je ‘inbraakpoging’.

Mocht je er niet uitkomen of wil je de installatie door Marsman ICT Consultancy laten uitvoeren, kun je altijd contact opnemen.

–Martijn

Beveilig /tmp op je Linux systeem

Om je systeem veilig te houden is het belangrijk om de /tmp map als een aparte partitie te mounten en ervoor te zorgen dat bestanden in deze map nooit uitvoerbaar kunnen zijn.

Een belangrijke reden hiervoor is dat veel applicaties en websites de map /tmp gebruiken om tijdelijke bestanden op te slaan, hier is /tmp ook voor bedoeld (Zie ook FHS op Wikipedia voor meer informatie over de mappen-structuur onder Linux). Veel exploits proberen om bestanden op te slaan en uit te voeren in /tmp omdat dit vaak de enige schrijfbare map is voor een applicatie of website. Om dit te voorkomen gaan we van /tmp een aparte partitie maken op en deze mounten met de opties: noexec (sta niet toe dat binaire bestanden uitvoerbaar zijn) en nosuid (sta niet toe dat de eigenaar van een bestand wordt aangepast) Zie ook de Linux Man Page over Mount.

De praktijk:

  • Maak een 2GB bestand voor je nieuwe /tmp partitie:
    root@srvprd05:~# dd if=/dev/zero  of=/dev/tmpfs  bs=1024   count=2000000
  • Voorzie /dev/tmpfs van de Ext3 indeling:
    root@srvprd05:~# /sbin/mkfs.ext3 /dev/tmpfs
  • Maak een backup van de bestaande map:
    root@srvprd05:~# cp -Rfp /tmp /tmpback
  • Mount de nieuwe /tmp partitie en zet de rechten goed:
    root@srvprd05:~# mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp
    root@srvprd05:~# chmod 1777 /tmp
  • Kopieer de data naar de nieuwe partitie:
    root@srvprd05:~# cp -Rfp /tmpback/.* /tmp/
  • Bewerk /etc/fstab en voeg het volgende toe:
    /dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
  • Test de regel die je aan hebt gemaakt:
    root@srvprd05:~# mount -o remount /tmp
  • Om bovenstaande te controleren kun je simpelweg een shell-script proberen uit te voeren in /tmp. Als je de melding krijgt: “permission denied” is het gelukt.

Mocht je er niet uitkomen of wil je dit laten uitvoeren, kun je altijd contact opnemen.

–Martijn