Ubuntu (15.10) server (veiliger) inrichten
Enige tijd geleden omschreef ik hoe je een Ubuntu 14.10 server moest inrichten in: Ubuntu server ipv Windows. Nu crasht mijn server steeds door brute force attacks, ddos aanvallen en dergelijk. Dus ik installeer maar weer een nieuwe server, dit keer veiliger om problemen te voorkomen. Daarnaast maakte ik wat configuratie problemen bij de vorige en wil ik het nu in één keer goed doen.
Het installeren blijft ingewikkeld en daarom maak ik voor mezelf een handleiding. Dus hier komt een stappenplan. Omdat ik een Mac heb ga ik uit van een installatie die ik bereik vanaf de Mac.
Ubuntu server inrichten voor Dummies, versie 2
LAMP, Linux, Apache, MySQL & PHP
1. Kies een goede hosting uit. Zelf ga ik de server niet hosten en onderhouden. Daarvoor moet je een bepaalde internetverbinding hebben en je hebt altijd een computer aanstaan. Ik host mijn server bij Tilaa.nl.
2. Maak op je computer verbinding via SSH naar de computer. Zo heb je een remote terminal waar je alle acties op uit kan voeren. In de Mac zit al een standaard SSH-client, voor Windows raad ik PuTTY aan.
Maak dan verbinding met de computer. In de terminal gaat dat als volgt:
ssh root@serverip
3. Update je installatie met de laatste pakketten voor Ubuntu met het volgende commando:
sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo apt-get -y autoclean
4. Dan zet ik de locale van mijn server naar algemeen GB
sudo locale-gen "en_GB.UTF-8" && sudo dpkg-reconfigure locales
En daarna in de environment zet ik deze variabelen nog:
sudo nano /etc/environment
En ik plak het volgende onder ‘PATH’
LC_ALL="en_GB.UTF-8" LC_CTYPE="en_GB.UTF-8" LANGUAGE="en_GB.UTF-8"
Als je dan de server herstart kloppen de talen wel. Dan kunnen meteen de updates geactiveerd worden.
5. En dan installeren we Apache, de webserver van Ubuntu:
sudo apt-get install apache2
Je kan checken door: http://serverip in je browser in te typen of de installatie is geslaagd.
6a. Ik wil gebruik maken een database, in dit geval van MySQL. Dit installeer je als volgt:
sudo apt-get install mysql-server
Maar omdat ik een aantal andere modules er ook bij wil hebben zet ik die met een spatie er ook achter en dit commando heb ik hieronder gezet:
sudo apt-get install mysql-server php5-mysql
Zorg dat je het root wachtwoord wat je moet invullen voor de MySQL root gebruiker ergens opslaat.
b. Initialiseer de databases met:
sudo mysql_install_db
c. secure de MySQL installatie met het volgende commando, ik gebruikte de standaard opties;
sudo /usr/bin/mysql_secure_installation
Je moet meteen het zojuist ingevulde wachtwoord gebruiken.
7a. Dan installeren we PHP
sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt
b. Dan is het handig om index.php op te nemen als default document. Dit doe je in een bepaald bestand;
sudo nano /etc/apache2/mods-enabled/dir.conf
Het staat al standaard bij mij zo:
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
c. Je kan PHP op je server testen door een info pagina aan te maken. Dit doe je als volgt:
sudo nano /var/www/html/info.php
In het lege veld vul je in:
< ?php phpinfo(); ?>
daarna kan je dit bestand benaderen via: http://serverip/info.php
Tja, en dan ben je in principe klaar 🙂 Maar zo simpel is het nog niet. Het is verstandig om wat extra modules van PHP te installeren. Zelf wil ik graag WordPress en phpBB kunnen draaien op deze server. Dan heb je het één en ander nodig. Een overzicht vraag je als volgt op:
apt-cache search php5-
8. Dan kan ik deze goed gebruiken: php5-xmlrpc, php5-gd, php5-imagick, php5-json. Dus installeer ik;
sudo apt-get install php5-xmlrpc php5-gd php5-imagick php5-json
Ubuntu hardening
In principe werkt de server nu zoals het moet. Er is alleen een klein probleem als je de server wilt aansluiten op internet. Er zijn namelijk aardig wat mensen die voor de lol in proberen te breken op je server. Ik zie regelmatig mensen die proberen in te loggen via SSH met mijn root-user of van alles proberen in WordPress en andere zaken. Hier kan je het één ander aan doen, ik ga hier wat stappen doorlopen.
1. Stap één, houdt je installatie up-to-date. via een update commando kan je allerlei updates installeren zodat de meest bekende zwakheden van Ubuntu server gedicht zijn.
2. De root gebruiker is de baas van je server, het is niet handig als men daar het wachtwoord van vindt. Daarom is het verstandig om een extra user aan te maken voor het gebruikelijke beheer. Mocht deze bekend worden kan je hem altijd weg gooien en opnieuw aanmaken.
Gebruiker aanmaken:
sudo useradd -d /home/[gebruikersnaam] -s /bin/bash -m [gebruikersnaam]
Geef de gebruiker sudo rechten
sudo usermod -a -G sudo [gebruikersnaam]
Stel een wachtwoord in:
sudo passwd [gebruikersnaam]
Als je nu iets wilt als administrator wilt uitvoeren dan moet je het commando met sudo uitvoeren. Ga je heel veel werk doen is het verstandig om “sudo su” uit te voeren, dan hoef je niet steeds het wachtwoord in te voeren.
3. Dan is het verstandig dat root niet meer in kan loggen. Men geeft nog wel eens de tip dat je root helemaal uit moet zetten, ik houd hem graag beschikbaar als ik wat via het console moet doen. Wel wil ik graag voorkomen dat je root kan gebruiken via SSH.
sudo nano /etc/ssh/sshd_config
Zoek dan “PermitRootLogin” op en zet deze op “no”.
Daarnaast geef root een onmogelijk (en lang) wachtwoord (inspiratie):
sudo passwd root
4. Inloggen met een certificaat voorkomt dat men aan de voordeur van je server met brute force wachtwoorden proberen te raden. Immers heb je een certificaat nodig om in te kunnen loggen via SSH. Hiervoor moet je wel wat stappen doorlopen:
Eerst een key aanmaken op je Mac, deze opslaan in .ssh folder en rechten zo zetten dat alleen jijzelf de folder in kan zien.
mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa
Als je de keygen opstart vraagt hij om een locatie en filename, de standaard van id_rsa is prima. Een passphrase is een versleuteling van de key. Zonder deze versleuteling kan iedereen hem gebruiken. Door een wachtwoord op te geven kan je de key alleen gebruiken als het wachtwoord bekend is, aanrader dus.
Nu moet je de public key verhuizen naar de server waarvoor je hem wilt gebruiken. Persoonlijk heb ik het via SFTP overgezet naar de server. De public key heet: id_rsa.pub. De private key, privé dus enkel voor jou, is opgeslagen in het bestand id_rsa. Allebei te vinden in je homefolder/.ssh
Eenmaal op de server kan je de public key opslaan in een lijstje van keys die de server vertrouwt voor SSH verbindingen. Ik log weer in met mijn useraccount die ik eerder heb aangemaakt en voer het volgende uit. Hierbij ga ik er vanuit dat via SFTP de public key in de home folder staat:
mkdir ~/.ssh sudo chown -R [gebruikersnaam]:[gebruikersnaam] ~/.ssh sudo chmod 700 ~/.ssh touch ~/.ssh/authorized_keys cat ~/id_rsa.pub >> ~/.ssh/authorized_keys rm ~/id_rsa.pub
We hebben een folder aangemaakt voor SSH, ook hier de rechten goed gezet. Het bestand authorized_keys aangemaakt en de public key hier in gezet. Daarna hebben we de public key niet meer nodig en gooien we hem weg. Als je nu een verbinding maakt kan je met je keys inloggen. Let wel dat je nu bij het inloggen je passphrase moet gebruiken.
Om te voorkomen dat men alsnog via de ssh-prompt allerlei wachtwoorden uitprobeert is het verstandig om inloggen met wachtwoorden nu uit te zetten. Immers log je in met een certificaat. Eenmaal ingelogd moet je nog wel het wachtwoord van de user invullen als je admin taken gaat doen door sudo te gebruiken.
sudo nano /etc/ssh/sshd_config
Vind “#PasswordAuthentication yes”. Verander dit naar “PasswordAuthentication no” en sla het bestand op.
Daarna moet de SSH service nog herstart worden:
sudo service sshd restart
en men kan alleen nog met certificaten inloggen. Ik gebruik op de iPhone/iPad Prompt van Panic. Deze kan prima met certificaten ipv inloggen met een wachtwoord omgaan.
5. Secure shared memory, zorg dat gedeeld geheugen niet gebruikt kan worden om onderdelen van je server te ‘besmetten’. Via gedeeld geheugen kan je code van Apache wellicht uitvoeren in het geheugen van MySQL o.i.d.
Ik heb dit aangepast in fstab:
sudo nano /etc/fstab
En daar heb ik de volgende regel toegevoegd:
#secure shared memory tmpfs /run/shm tmpfs defaults,noexec,nosuid 0 0
Hierna is het verstandig de server even te herstarten.
6. Check je server af en toe op rootkits. Wie weet heeft men het één en ander geïnstalleerd en houd hij/zij zo het één en ander in de gaten bij je.
Installeer de rootkit hunter
sudo apt-get install rkhunter
En voer deze af en toe uit:
sudo rkhunter --update sudo rkhunter --propupd sudo rkhunter --check
7. Harden PHP voor de veiligheid
Open de config file:
sudo nano /etc/php5/apache2/php.ini
En dan de volgende instellingen als volgt neerzetten:
expose_php = Off display_errors = Off track_errors = Off html_errors = Off
8. Harden Apache security file
sudo nano /etc/apache2/conf-enabled/security.conf
En let dat de volgende zaken zijn ingesteld:
ServerTokens Prod ServerSignature Off TraceEnable Off
9. Zet de firewall aan, ufw was bij mij standaard geïnstalleerd, maar het is een eenvoudige firewall-tool.
Installeren:
sudo apt-get install ufw
En configureren & checken:
sudo ufw allow ssh sudo ufw allow http sudo ufw enable sudo ufw status verbose
PHPMyAdmin installeren
Om het voor mezelf wat beter beheersbaar te houden heb ik nog wat uitbreidingen geïnstalleerd. Eentje daarvan is PHPMyAdmin. Dit is een web-based MySQL beheer tool. Het maakt het werken met MySQL een stuk eenvoudiger, alhoewel het via de command-line ook goed te doen is. PHPMyAdmin installeer je als volgt:
1. Ik neem aan dat je nog verbinding hebt via SSH en dat het niet zo lang is geleden dat je;
sudo apt-get update
gedaan. Dus alles is nog up-to-date.
2a. Dan installeren we PHPMyAdmin met nog wat overige Apache tools.
sudo apt-get install phpmyadmin apache2-utils
b. kies voor Apache2 uiteraard, daarna YES en vul je MySQL root ww in en tot slot het wachtwoord wat je wilt gebruiken om op PHPMyAdmin in te loggen.
3. Dan moeten we PHPMyAdmin nog toevoegen aan Apache, dat doe je als volgt;
a. Open de Apache Configuratie
sudo nano /etc/apache2/apache2.conf
b. En helemaal onderaan het bestand include dan PHPMyAdmin
Include /etc/phpmyadmin/apache.conf
4. Herstart Apache.
sudo service apache2 restart
5. Test de installatie door naar: http://serverip/phpmyadmin te gaan.
Security wat aanschroeven
PHPMyAdmin is best veilig, maar het kan geen kwaad om het nog iets veiliger te maken. Je kan de bestanden zelf ook nog beveiligen zodat alleen geautoriseerde mensen gebruik kunnen maken van PHPMyAdmin. Dan heb je met een bestandsbeveiliging en database beveiliging twee lagen van autoriseren.
1a. Eerst moeten we Apache vatbaar maken voor .htaccess bestanden. Daarin kan je per folder instellingen doen. Dus we openen de config file van Apache.
sudo nano /etc/phpmyadmin/apache.conf
1b. Voeg onder de regel:
AllowOverride All
toe, ik heb het gewoon onder DirectoryIndex index.php gezet.
2a. Nu moeten we het .htaccess bestand maken dat de autorisatie regelt om bij de files te komen. Maak/open de pagina met:
sudo nano /usr/share/phpmyadmin/.htaccess
2b. Plak hier de volgende tekst in:
AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/apache2/.phpmyadmin.htpasswd Require valid-user
AuthType is het type van authenticatie. AuthName is de tekst die je ziet als om het wachtwoord wordt gevraagd. AuthUserFile is de plek waar het wachtwoord bestand zit. Require valid-user houdt in dat je echt het wachtwoord moet opgeven om verder te kunnen.
3. Dan maken we het wachtwoorden bestand aan:
sudo htpasswd -c /etc/apache2/.phpmyadmin.htpasswd username
Vul dan het gewenste wachtwoord in.
4. Test de installatie door naar: http://serverip/phpmyadmin te gaan. Als het goed is wordt je nu om je gegevens gevraagd alvorens je de pagina ziet.
Nu heb je een volledige functionerende server waar je WordPress, phpBB en nog vele andere zaken op kan draaien. Via SFTP kan je er bestanden naar uploaden. Let op dat je dan wel het volgende pad aanhoudt, want hier staat je website:
/var/www/html
Bronnen:
Deze post is tot stand gekomen met de volgende bronnen waar ik hevig op ‘geleund’ heb;
Digital Ocean – How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu
Digital Ocean – How To Install and Secure phpMyAdmin on Ubuntu 12.04
Harden Ubuntu
How to secure an Ubuntu 12.04 LTS server
Trackbacks & Pingbacks
[…] Let op: Deze blog-post is vervangen door: Ubuntu (15.10) server (veiliger) inrichten. […]
[…] Let op: Deze blog-post is vervangen door: Ubuntu (15.10) server (veiliger) inrichten. […]
Reacties zijn gesloten.