Hulpartikel overzicht

Hulpartikel

DirectAdmin Tutorial Series 2: Je VPS beveiligen

Dit is het tweede deel van onze DirectAdmin Tutorial Series. Ben je een nieuwe VPS aan het inrichten, dan raden wij aan om bij deel 1 te beginnen en geen delen over te slaan.

Geautomatiseerde bots scannen doorlopend IP's op kwetsbaarheden. Om te voorkomen dat hierdoor problemen op je VPS ontstaan, is de beveiliging van je VPS inrichten het eerste dat wij na de installatie doen.

Het grootste deel van deze bots gaan automatisch IP adressen af tot zij een hit krijgen op poort 22 en probeert vervolgens als 'root' binnen te dringen op je VPS middels Brute Force aanvallen. Om die reden is SSH-toegang voor de root-user standaard uitgeschakeld op onze VPSen met DirectAdmin. Je kunt hier lezen hoe je een gebruiker voor SSH maakt.

Gezien het grote aantal IP's dat gebruikt wordt door bots kunnen wij deze niet allemaal in onze eigen firewall opnemen, noch krijgen wij melding van de pogingen tot het binnendringen op je VPS.

Beveiligingsmaatregelen

Om je VPS te beveiligen doorlopen wij de volgende stappen:

  • Verander je SSH-poort.
  • Beperk de toegang tot DirectAdmin tot specifieke IP's.
  • Bruteforce-beveiliging in de vorm van Fail2Ban en een configuratie aanpassing in DirectAdmin.
  • Anti-virus / malware beveiliging met ClamAV.
  • Optioneel: beperk de toegang op 'Admin Level' tot specifieke IP's.

Dit is relatief complexe materie. Als je onderstaande stappen gebruikt om een bestaande (i.p.v. nieuwe) VPS te updaten, maak dan altijd eerst een snapshot van je VPS voordat je een update uitvoert. Zo heb je altijd een snapshot om op terug te vallen als blijkt dat er door een wijziging een probleem ontstaat.

Verander je SSH-poort

Naast dat de root-user standaard geen SSH-toegang heeft tot je VPS, raden wij aan je SSH-poort te veranderen. Dit is een vorm van 'security through obscurity'; door je SSH-poort te veranderen maak je namelijk je VPS onzichtbaar voor het grootste deel van de aanvallende bots (zo niet alle bots). Een bijkomend voordeel is dat je log bestanden overzichtelijker blijven en je een duidelijker beeld krijgt wanneer je VPS daadwerkelijk gericht wordt aangevallen.

Stap 1

Verbind met je VPS via de VPS-console in je controlepaneel of via SSH. Controleer je gebruikte poorten met het onderstaande commando.

sudo netstat -tulpn | less

Een overzicht zoals in het screenshot hier onder verschijnt. In dit overzicht zijn de poort nummers de getallen in de rij 'Local Address' achter de dubbele punt.

netstat overview


 

Stap 2

Kies een willekeurig poort nummer tussen 0 en 65535 dat niet in het overzicht getoond wordt (bijvoorbeeld 47592) en druk op 'q' om netstat te stoppen.


 

Stap 3

Open het SSH-configuratiebestand met het onderstaande commando. Je kunt hiervoor ook vim gebruiken.

sudo nano /etc/ssh/sshd_config

 

Stap 4

Het configuratiebestand opent en je ziet onder andere het onderstaande stuk code.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22 
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress :: 

Uncomment of verwijder de # voor '#Port 22' en verander het nummer naar het nummer dat je onder stap 2 hebt gekozen, bijvoorbeeld:

Port 47592

Sla het bestand op en sluit het bestand af door achtereenvolgens op ctrl+X > y > enter te drukken.


 

Stap 5

Voeg de gekozen poort toe aan je firewall, en verwijder poort 22 met onderstaande commando's. Vervang 47592 door het poortnummer dat je in stap 2 hebt gekozen.

sudo firewall-cmd --permanent --zone=public --add-port=47592/tcp
sudo firewall-cmd --permanent --zone=public --remove-port=22/tcp

 

Stap 6

Herlaad/herstart vervolgens je firewall- en SSH-configuratie met de volgende commando's:

sudo firewall-cmd --reload
sudo systemctl restart sshd

Controleer tot slot dat SSH gebruik maakt van de nieuwe poort met het commando:

sudo ss -tnlp | grep sshd
Bruteforce-beveiliging

Bots proberen automatisch binnen te dringen door bruteforce aanvallen uit te voeren op je VPS op verschillende vlakken, zoals op SSH, Exim (uitgaande mail server), DirectAdmin. Met name Fail2Ban biedt hier een goede bescherming tegen.

Fail2Ban

Fail2ban beschermt je VPS door IP's te bannen die pogingen doen tot misbruik van je VPS, bijvoorbeeld wanneer zij te veel foutieve password pogingen doen, zoeken naar exploits, etc. Wij bevelen dan ook Fail2Ban van harte aan.

De installatie en configuratie van Fail2ban behandelen wij in onze Fail2Ban handleiding.

Let wel: DirectAdmin zal onder 'Message System' waargenomen bruteforce aanvallen blijven melden, maar die worden met Fail2Ban wel afgevangen.


 

DirectAdmin

In DirectAdmin kun je instellen dat bij meerdere foutieve inlogpogingen het betreffende IP wordt geblokkeerd. Deze stap is optioneel en heeft geen toegevoegde waarde als je toegang DirectAdmin beperkt tot specifieke IP's (zie het stuk onder 'Sta DirectAdmin toegang enkel toe voor specifieke IP's').

 

Stap 1

Log in op DirectAdmin als de 'admin'-gebruiker en klik op 'Administrator Settings' onder 'Extra features'.


 

Stap 2

Vink onder 'security' de opties 'Blacklist IPs for excessive DA login attempts' en 'Prevent 127.0.0.1 from being Blacklisted' aan. Je kunt naar eigen inzicht het aantal toegestane pogingen hier ook aanpassen.


 

Stap 3

Sroll naar onderen en sla de wijzigingen op door onderaan rechts op 'Save' te klikken.


 

Stap 4

Let op! Whitelist jezelf zodat je niet per ongeluk geband wordt als je zelf even niet op je wachtwoord komt. Verbind hiervoor met je VPS via SSH of de VPS-console en geef het volgende commando op:

sudo echo "123.123.123.123." >> /usr/local/directadmin/data/admin/ip_whitelist

Vervang 123.123.123.123 door je eigen IP.

Sta DirectAdmin toegang enkel toe voor specifieke IP's

Onze VPS'en met DirectAdmin gebruiken standaard 'firewalld' als firewall. Je kunt er voor kiezen om in firewalld enkel specifieke IP's toe te staan te verbinden met poort 2222. Poort 2222 is de poort waar je verbinding mee maakt om in te loggen op DirectAdmin.

 

Stap 1

Verbind met je VPS via de VPS console in je controlepaneel of via SSH. Zet als eerste poort 2222 dicht met onderstaand commando (i.e. in werkelijkheid verwijder je poort 2222 uit de lijst van open poorten):

sudo firewall-cmd --permanent --zone=public --remove-port=2222/tcp

 
Stap 2

Met onderstaande commando's maak je een uitzondering voor je eigen IP-adres zodat enkel je eigen IP kan verbinden op poort 2222.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
rule family="ipv4"
source address="1.2.3.4"
port protocol="tcp" port="2222" accept'

Vervang 1.2.3.4 door je daadwerkelijke IP adres. Herhaal deze stappen om meer IP's toegang te geven.


 

Stap 3

Laad firewalld opnieuw om de wijzigingen te verwerken:

sudo firewall-cmd --reload

 

Aanvullende Tips:

  • Om je configuratie rechtstreeks aan te passen of te controleren gebruik je het volgende commando:
    sudo nano /etc/firewalld/zones/public.xml 
    Je krijgt onderstaand overzicht te zien.

    Je kunt hier de vorige stappen ongedaan maken door het stukje vanaf <rule tot en met </rule> te verwijderen en de volgende regel weer toe te voegen:

    <port protocol="tcp" port="2222"/>
  • Je kunt de stappen in dit onderdeel ook gebruiken om andere poorten dicht te zetten. Doe dit wel enkel wanneer je zeker weet dat je de juiste poort dichtzet.

Anti-virus / malware beveiliging met ClamAV

ClamAV is een gratis, open source anti-virus programma voor de detectie van o.a. trojans, virussen en malware op je VPS.

In onze ClamAV handleiding voor CentOS 7 laten wij je zien hoe je ClamAV installeert, zorgt dat ClamAV automatisch start, en je VPS dagelijks scant.

Optioneel: IP-restrictie voor DirectAdmin Administrator Level commando's

In een eerdere stap hebben wij uitgelegd hoe je enkel specifieke IP's toestaat om met DirectAdmin te verbinden.

Het aantal mensen dat verbindt met DirectAdmin op administrator niveau is doorgaans nog beperkter. Bij grotere organisaties heb je vaak meerdere mensen met toegang op reseller en/of user niveau, maar slechts één of enkele DirectAdmin administrators.

Door enkel het IP van de administrators daadwerkelijk toe te staan om als administrator commando's uit te voeren in DirectAdmin, voorkom je dat iemand anders administrator commando's kan uitvoeren als bijvoorbeeld je wachtwoord zou uitlekken en bekend wordt bij iemand met een user-account.

 

Stap 1

Verbind met je VPS via de VPS-console in je controlepaneel of via SSH. Open / maak vervolgens /usr/local/directadmin/scripts/custom/all_pre.sh aan met het commando:

sudo nano /usr/local/directadmin/scripts/custom/all_pre.sh 

 

Stap 2

Voeg de onderstaande code toe aan dit bestand.

     #!/bin/sh
    USERTYPE=`grep usertype= /usr/local/directadmin/data/users/${username}/user.conf | cut -d= -f2`
    
    if [ "${USERTYPE}" = "admin" ]; then
       if [ "$caller_ip" = "1.2.3.4" ]; then
           exit 0;
       fi
    
       #repeat the check on the IP as many times as desired.
    
       echo "IP $caller_ip is not allowed to be logged in as an Admin";
       exit 1;
    fi
    exit 0; 
     

    Pas 1.2.3.4 aan naar het daadwerkelijke IP adres dat je wil toestaan. Eventueel sta je meerdere IP's toe door onderstaand stuk opnieuw toe te voegen direct boven '#repeat the check on the IP as many times as desired.' en 1.2.3.4 aan te passen naar het gewenste IP.

       if [ "$caller_ip" = "1.2.3.4" ]; then
            exit 0;
       fi

     

    Stap 3

    Pas tot slot de rechten aan van de file, anders heeft DirectAdmin niet de benodigde rechten om all_pre.sh te gebruiken en krijg je een 'Access Denied'-foutmelding.

    sudo chmod 700 /usr/local/directadmin/scripts/custom/all_pre.sh

     

    Je hebt met bovenstaande stappen een solide beveiliging van je VPS opgezet. Klik hier om verder te gaan naar Deel 3: Je VPS updaten.

     

    Heb je ook een goed idee?

    Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

    Heeft dit artikel je geholpen?

    Maak een account aan of log in om een beoordeling achter te laten.

    Reacties

    Maak een account aan of log in om een reactie te plaatsen.

    0
    Matthijs van Beek Admin 20 augustus 2018 (#1791)

    @jeffreyvanrossum

    Bedankt voor je feedback! Op dit moment hebben wij nog een aardige hoeveelheid documentatie op de planning staan. Wij gaan je verzoek in ieder geval zeker meenemen voor wanneer wij aan een groter documentatie project beginnen met betrekking tot security (vermoedelijk in 2019).

    0
    jeffreyvanrossum 13 augustus 2018 (#1753)

    Wat mij interessant lijkt zijn een aantal tips m.b.t. controleren of alles goed is ingesteld en functioneel is. Ik zie b.v. dagelijks tientallen meldingen over brute force aanvallen in DirectAdmin. Ik begrijp dat dit veel voorkomt, maar vraag me daarom wel af of de configuratie wel goed is. Een andere tip die ik nuttig zou vinden, wellicht is dat meer iets voor een separate tutorial, is het kunnen instellen van IP-blocks of juist IP whitelists op server-niveau.

    0
    Matthijs van Beek Admin 11 juni 2018 (#1404)

    @rakovich

    Bedankt voor je feedback! Er ontbrak inderdaad een stap die nodig is om hiervan gebruik te maken die wij gelijk hebben toegevoegd als derde stap in dit onderdeel. De rechten staan by default niet goed voor all_pre.sh wanneer je dit bestand net hebt aangemaakt waardoor DirectAdmin te weinig rechten heeft om het bestand te gebruiken. De rechten moeten aangepast worden met chmod 700 (zie artikel).

    0
    rakovich 7 juni 2018 (#1393)

    Laatste stap heeft niet gewerkt'Optioneel:IP restrictie voor DirectAdmin Administrator Level commando's'. Ik kon nog wel inloggen met de admin maar geen enkel admin menu openen. Er werd een melding weergegeven 'Access Denied - /usr/local/directadmin/scripts/custom/all_pre.sh'. Ik dacht dat er misschien fout in de code was, maar deze was wel goed. Komt overeen met de volgende artikel https://help.directadmin.com/item.php?id=349

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op