Zoeken op website

Initiële serverconfiguratie met Ubuntu 20.04/18.04 en 16.04


Deze tutorial begeleidt u bij de eerste basisstappen die u moet configureren op een nieuw geïnstalleerde Ubuntu-server om de veiligheid en betrouwbaarheid van uw server te vergroten.

De configuraties die in dit onderwerp worden uitgelegd, zijn vrijwel hetzelfde voor alle Ubuntu-serversystemen, wat betreft het onderliggende besturingssysteem, of Ubuntu is geïnstalleerd op een bare-metal-server, op een privé virtuele machine of op een virtuele machine uitgebouwd in een publieke VPS-cloud.

Vereisten

  • Ubuntu 20.04 Serverinstallatie
  • Ubuntu 18.04 Serverinstallatie
  • Ubuntu 16.04 Serverinstallatie

Update en upgrade het Ubuntu-systeem

De eerste stap die u moet uitvoeren in het geval van een nieuwe installatie van de Ubuntu-server of een nieuw geïmplementeerde Ubuntu VPS is ervoor zorgen dat het systeem en alle systeemcomponenten, zoals de kernel, de apt-pakketbeheerder en alle andere geïnstalleerde pakketten zijn up-to-date met de nieuwste uitgebrachte versies en beveiligingspatches.

Om de Ubuntu-server bij te werken, logt u in op de serverconsole met een account met rootrechten of rechtstreeks als root en voert u de onderstaande opdrachten uit om het update- en upgradeproces uit te voeren.

sudo apt update 

Nadat u de updateopdracht hebt uitgevoerd, ziet u het aantal beschikbare pakketten voor het upgradeproces en de opdracht die wordt gebruikt voor het weergeven van de pakketupgrades.

sudo apt list --upgradable

Nadat u de lijst met pakketten hebt geraadpleegd die beschikbaar zijn voor upgraden, voert u de onderstaande opdracht uit om het systeemupgradeproces te starten.

sudo apt upgrade

Om alle lokaal gedownloade deb-pakketten en alle andere apt-get-caches te verwijderen, voert u de onderstaande opdracht uit.

sudo apt autoremove
sudo apt clean

Maak een nieuw account aan in Ubuntu

Als veiligheidsmaatregel is het root-account standaard volledig uitgeschakeld in Ubuntu. Om een nieuw account op het systeem aan te maken, logt u in op het systeem met de accountgebruiker met rootrechten en maakt u een nieuw account aan met de onderstaande opdracht.

Dit nieuwe account krijgt via de opdracht sudo rootbevoegdheden en wordt gebruikt om administratieve taken in het systeem uit te voeren. Zorg ervoor dat u een sterk wachtwoord instelt om dit account te beschermen. Volg de aduser-prompt om de gebruikersgegevens en het wachtwoord in te stellen.

sudo adduser ubuntu_user

Als dit account aan een andere systeembeheerder wordt toegewezen, kunt u de gebruiker dwingen zijn wachtwoord bij de eerste inlogpoging te wijzigen door de volgende opdracht te geven.

sudo chage -d0 ubuntu_user

Voorlopig kan de nieuw toegevoegde gebruiker geen administratieve taken uitvoeren via het sudo-hulpprogramma. Om dit nieuwe gebruikersaccount beheerdersrechten te verlenen, moet u de gebruiker toevoegen aan de systeemgroep “sudo” door de onderstaande opdracht te geven.

sudo usermod -a -G sudo ubuntu_user

Standaard mogen alle gebruikers die tot de groep “sudo” behoren opdrachten uitvoeren met rootrechten via het sudo-hulpprogramma. De Sudo-opdracht moet worden gebruikt voordat de opdracht wordt geschreven die nodig is voor uitvoering, zoals weergegeven in het onderstaande voorbeeld.

sudo apt install package_name

Test of de nieuwe gebruiker over de rootrechten beschikt door in te loggen op het systeem en de opdracht apt update uit te voeren, voorafgegaan door sudo.

su - ubuntu_user
sudo apt update

Configureer de systeemhostnaam in Ubuntu

Meestal wordt de hostnaam van de machine ingesteld tijdens het systeeminstallatieproces of wanneer de VPS in de cloud wordt gemaakt. U moet echter de naam van uw machine wijzigen om de bestemming van uw server beter weer te geven of om het uiteindelijke doel ervan beter te beschrijven.

In een groot bedrijf worden machines vernoemd naar complexe naamgevingsschema's om de machine in de racks van het datacenter gemakkelijk te kunnen identificeren. Als uw Ubuntu-machine bijvoorbeeld een mailserver zal gebruiken, moet de naam van de machine dit feit weerspiegelen en kunt u de hostnaam van de machine bijvoorbeeld instellen als mx01.mijndomein.lan.

Voer de volgende opdracht uit om details over de hostnaam van uw machine weer te geven.

hostnamectl

Om de naam van uw machine te wijzigen, voert u het hostnamectl-commando uit met de nieuwe naam die u voor uw machine gaat configureren, zoals geïllustreerd in het onderstaande fragment.

sudo hostnamectl set-hostname tecmint

Controleer de nieuwe naam van uw systeem met een van de onderstaande opdrachten.

hostname
hostname -s
cat /etc/hostname 

Stel SSH in met Public Key Authenticatie in Ubuntu

Om de systeembeveiliging van een Ubuntu-server te verhogen, moet u SSH-authenticatie met openbare sleutels instellen voor een lokaal account. Om een SSH-sleutelpaar te genereren, voert u de publieke en private sleutel, met een gespecificeerde sleutellengte, zoals 2048 bits, de volgende opdracht uit op uw serverconsole.

Zorg ervoor dat u bent ingelogd op het systeem met de gebruiker voor wie u de SSH-sleutel instelt.

su - ubuntu_user
ssh-keygen -t RSA -b 2048

Terwijl de sleutel wordt gegenereerd, wordt u gevraagd een wachtwoordzin toe te voegen om de sleutel te beveiligen. U kunt een sterke wachtwoordzin invoeren of ervoor kiezen om de wachtwoordzin leeg te laten als u taken via de SSH-server wilt automatiseren.

Nadat de SSH-sleutel is gegenereerd, kunt u de openbare sleutel naar een externe server kopiëren door de onderstaande opdracht uit te voeren. Om de openbare sleutel op de externe SSH-server te installeren, heeft u een extern gebruikersaccount nodig met de juiste machtigingen en inloggegevens om in te loggen op de externe server.

ssh-copy-id remote_user@remote_server

U zou automatisch via SSH moeten kunnen inloggen op de externe server met behulp van de openbare-sleutelauthenticatiemethode. U hoeft het externe gebruikerswachtwoord niet toe te voegen als u SSH-authenticatie met openbare sleutels gebruikt.

Nadat u bent ingelogd op de externe server, kunt u beginnen met het uitvoeren van opdrachten, zoals w command om de op afstand ingelogde ssh-gebruikers weer te geven, zoals weergegeven in de onderstaande schermafbeelding.

Typ exit in de console om de externe SSH-sessie te sluiten.

ssh remote_user@remote_server
w
exit

Om de inhoud van uw openbare SSH-sleutel te zien, zodat u de sleutel handmatig op een externe SSH-server kunt installeren, geeft u de volgende opdracht op.

cat ~/.ssh/id_rsa.pub

Beveiligde SSH-server in Ubuntu

Om de SSH-daemon te beveiligen, moet u het standaard SSH-poortnummer wijzigen van 22 in een willekeurige poort, hoger dan 1024, en externe SSH-toegang tot het root-account weigeren via wachtwoord of sleutel, door het hoofdconfiguratiebestand van de SSH-server te openen en de volgende wijzigingen aan te brengen.

sudo vi /etc/ssh/sshd_config

Zoek eerst naar de commentaarregel #Port22 en voeg daaronder een nieuwe regel toe (vervang het luisterpoortnummer overeenkomstig):

Port 2345

Sluit het bestand niet, scroll naar beneden en zoek naar de regel #PermitRootLogin ja, verwijder het commentaar op de regel door het # teken (hashtag) aan het begin van de regel te verwijderen en wijzig de regel zodat deze eruitziet zoals weergegeven in het onderstaande fragment.

PermitRootLogin no

Start daarna de SSH-server opnieuw op om de nieuwe instellingen toe te passen en test de configuratie door te proberen vanaf een externe machine op deze server in te loggen met het root-account via het nieuwe poortnummer. De toegang tot het root-account via SSH moet worden beperkt.

sudo systemctl restart sshd

Voer ook netstat of ss command uit en filter de uitvoer via de grep-opdracht om het nieuwe luisterpoortnummer voor de SSH-server weer te geven.

sudo ss -tlpn| grep ssh
sudo netstat -tlpn| grep ssh

Er zijn situaties waarin u na een periode van inactiviteit automatisch alle externe SSH-verbindingen met uw server wilt verbreken.

Om deze functie in te schakelen, voert u de onderstaande opdracht uit, die de bash-variabele TMOUT toevoegt aan het verborgen bestand .bashrc van uw account en elke SSH-verbinding forceert die wordt gemaakt met de naam van de De verbinding met de gebruiker wordt verbroken of de verbinding wordt verbroken na 5 minuten inactiviteit.

echo 'TMOUT=300' >> .bashrc

Voer de tail-opdracht uit om te controleren of de variabele correct is toegevoegd aan het einde van het .bashrc-bestand. Alle daaropvolgende SSH-verbindingen worden vanaf nu automatisch verbroken na 5 minuten inactiviteit.

tail .bashrc

In de onderstaande schermafbeelding is een time-out opgetreden voor de externe SSH-sessie van de drupal-machine naar de Ubuntu-server via het ubuntu_user-account en wordt na 5 minuten automatisch uitgelogd.

Configureer Ubuntu Firewall UFW

Elke server heeft een goed geconfigureerde firewall nodig om het systeem op netwerkniveau te beveiligen. De Ubuntu-server gebruikt de UFW-applicatie om de iptables-regels op de server te beheren.

Controleer de status van de UFW-firewalltoepassing in Ubuntu door de onderstaande opdrachten uit te voeren.

sudo systemctl status ufw
sudo ufw status

Normaal gesproken is de UFW-firewalldaemon actief op de Ubuntu-server, maar de regels worden niet standaard toegepast. Voordat u het UFW-firewallbeleid in uw systeem inschakelt, moet u eerst een nieuwe regel toevoegen om SSH-verkeer via de gewijzigde SSH-poort door de firewall te laten passeren. De regel kan worden toegevoegd door het onderstaande commando uit te voeren.

sudo ufw allow 2345/tcp

Nadat u SSH-verkeer heeft toegestaan, kunt u de UFW-firewalltoepassing inschakelen en controleren met de volgende opdrachten.

sudo ufw enable
sudo ufw status

Als u nieuwe firewallregels wilt toevoegen voor andere netwerkservices die later op uw server worden geïnstalleerd, zoals een HTTP-server, een mailserver of andere netwerkservices, gebruikt u de onderstaande voorbeelden van firewallopdrachten als richtlijn.

sudo ufw allow http  #allow http traffic
sudo ufw allow proto tcp from any to any port 25,443  # allow https and smtp traffic

Voer de onderstaande opdracht uit om alle firewallregels weer te geven.

sudo ufw status verbose

Stel de Ubuntu-servertijd in

Om de Ubuntu-serverklok en andere gerelateerde tijdinstellingen te controleren of op te vragen, voert u de opdracht timedatectl uit zonder argument.

Om de tijdzone-instellingen van uw server te wijzigen, voert u eerst de timedatectl-opdracht uit met het list-timezones-argument om alle beschikbare tijdzones weer te geven en stelt u vervolgens de tijdzone van uw systeem in zoals weergegeven in het onderstaande fragment.

sudo timedatectl 
sudo timedatectl list-timezones 
sudo timedatectl set-timezone Europe/Vienna

De nieuwe systemd-timesyncd systemd daemon-client kan in Ubuntu worden gebruikt om een nauwkeurige tijd voor uw server via het netwerk te verstrekken en de tijd te synchroniseren met een hogere tijd-peerserver.

Om deze nieuwe functie van Systemd toe te passen, wijzigt u het systemd-timesyncd daemon-configuratiebestand en voegt u de dichtstbijzijnde geografisch NTP-servers toe aan de NTP-instructieregel, zoals weergegeven in het onderstaande bestandsfragment:

sudo nano /etc/systemd/timesyncd.conf

Voeg de volgende configuratie toe aan het bestand timesyncd.conf:

[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=ntp.ubuntu.com

Om uw dichtstbijzijnde geografisch NTP-servers toe te voegen, raadpleegt u de NTP pool-projectserverlijst op het volgende adres: http://www.pool.ntp.org/en/

Start daarna de Systemd timesync-daemon opnieuw op om de wijzigingen weer te geven en controleer de daemon-status door de onderstaande opdrachten uit te voeren. Na het opnieuw opstarten begint de daemon de tijd te synchroniseren met de nieuwe ntp-serverpeer.

sudo systemctl restart systemd-timesyncd.service 
sudo systemctl status systemd-timesyncd.service

Schakel onnodige services in Ubuntu uit en verwijder deze

Om een lijst te krijgen van alle TCP- en UDP-netwerkservices die standaard actief zijn op uw Ubuntu-server, voert u de opdracht ss of netstat uit.

sudo netstat -tulpn
OR
sudo ss -tulpn

Vanaf de release van Ubuntu 16.10 wordt de standaard DNS-resolver nu beheerd door de systemd-resolved service, zoals blijkt uit de uitvoer van netstat of ss-opdrachten.

U moet ook de systemd-resolved servicestatus controleren door de volgende opdracht uit te voeren.

sudo systemctl status systemd-resolved.service

De systemd-resolved service bindt op alle ingeschakelde netwerkinterfaces en luistert op poorten 53 en 5355 TCP en UDP.

Het uitvoeren van door het systeem opgeloste caching DNS-daemon op een productieserver kan gevaarlijk zijn vanwege het grote aantal DDOS-aanvallen die door kwaadwillende hackers worden uitgevoerd op onbeveiligde DNS-servers.

Om deze service te stoppen en uit te schakelen, voert u de volgende opdrachten uit.

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Controleer of de service is gestopt en uitgeschakeld door de opdracht ss of netstat uit te voeren. De door het systeem opgeloste luisterpoorten, 53 en 5355 TCP en UDP, mogen niet worden vermeld in de netstat- of ss-opdrachtuitvoer, zoals hieronder wordt geïllustreerd.

U moet ook de machine opnieuw opstarten om alle door het systeem opgeloste daemon-services volledig uit te schakelen en het standaardbestand /etc/resolv.conf te herstellen.

sudo ss -tulpn
sudo netstat -tulpn
sudo systemctl reboot

Hoewel u enkele ongewenste netwerkservices voor uw server heeft uitgeschakeld, zijn er ook andere services geïnstalleerd en actief op uw systeem, zoals lxc process en snapd service. Deze services kunnen eenvoudig worden gedetecteerd via ps-, top- of pstree-opdrachten.

sudo ps aux
sudo top
sudo pstree

Als u geen LXC-containervirtualisatie op uw server gaat gebruiken of geen software gaat installeren die is verpakt via Snap-pakketbeheerder, moet u deze services volledig uitschakelen en verwijderen door de onderstaande opdrachten uit te voeren.

sudo apt autoremove --purge lxc-common lxcfs
sudo apt autoremove --purge snapd

Dat is alles! Nu is de Ubuntu-server nu voorbereid op het installeren van extra software die nodig is voor aangepaste netwerkdiensten of applicaties, zoals het installeren en configureren van een webserver, een databaseserver, een fileshare-service of andere specifieke applicaties.