Gentoo Logo

1.  Apache

Apache (1.3.26) komt met een leuk en goed configuratiebestand, maar toch zijn er enkele aanpassingen nodig, zoals het binden aan 1 enkel adres en informatielekken tegenhouden. Dit zijn de opties die je in het configuratiebestand zou moeten toepassen:

Indien je ssl aan je /etc/make.conf hebt toegevoegd alvorens je apache geinstalleerd hebt is er toegang tot een ssl webserver. Voeg gewoon de volgende regel toe om deze te activeren:

Codevoorbeeld 1.1: /etc/conf.d/apache

HTTPD_OPTS="-D SSL"

Codevoorbeeld 1.1: /etc/apache/conf/apache.conf

#Laat het naar jouw localhost luisteren
Listen 127.0.0.1
BindAddress 127.0.0.1
#Het is geen goed idee om nobody of nogroup te gebruiken voor elke service die
#niet als root draait. Maak gewoon een user/group apache aan voor apache.
User apache
Group apache
#Zeg niet welke versie je hebt
ServerSignature Off
ServerTokens min

Apache is gecompileerd met --enable-shared=max en --enable-module=all. Dit zal per default alle modules activeren dus moet je de modules in de LoadModule sectie (LoadModule en AddModule) wegcommentarieren indien je ze niet wil gebruiken. Herstart de service door /etc/init.d/apache restart uit te voeren.

Meer documentatie kan je vinden op http://www.apache.org

1.  Netqmail

Netqmail wordt verondersteld de meest veilige mailserver te zijn die er bestaat. Ze is geschreven met veiligheid (en paranoia) in gedachten. Ze laat geen relaying toe per default en heeft geen enkele veiligheidslek gehad sinds 1996. Voer gewoonweg emerge netqmail uit en begin met configureren.

1.  Bind

Bind is gekend voor zijn (on)veiligheidsgeschiedenis en dat moet je niet lichtjes opvatten. Zoals met elke andere service mag het nooit als root draaien, dus verander aub niet de default configuratie van deze service op dat vlak. Per default stelt Gentoo geen configuratie in voor deze service dus zal je je eigen dns zones in /etc/bind/named.conf moeten installeren. Maar de veiligheid hangt niet enkel af van de dns-server, maar tevens van het protocol dat gebruikt wordt moet goed geconfigureerd zijn.

Mensen vragen vaak "Waarom niet djbdns" gebruiken (zeer veilige dns van D.J. Bernstein) en het antwoord is: Bind heeft features die djbdns niet heeft, zoals ondersteuning voor IPv6 (of toch niet zonder patches).

Codevoorbeeld 1.1: /etc/bind/named.conf

#Stel ACLs in
acl "mynet" { 10.0.0.0/24; };

options {
  directory "/var/bind";
  pid-file "/var/run/named/named.pid";
#Laat toe dat "mynet" queries uitvoert.
  allow-query { "mynet"; };
#Laat geen zonetransfers toe.
  allow-transfer { none; };
  forward only;
  forwarders { 10.0.0.2; };
#Laat enkel recursie toe aan "mynet"
  recursion no;
  allow-recursion { mynet; };
#Bind aan een interface
  listen-on { 10.0.0.1; };
#Toon de versie niet
  version "Heeeeeeeres Jhonny!";
};

key "rndc-key" {
  algorithm hmac-md5;
  secret "o1BYkYC+bXeZgHDsrVBwRQ==";
};

#Laat enkel beheer toe van localhost en met een sleutel
controls {
  inet 127.0.0.1 port 953
  allow { 127.0.0.1; } keys { "rndc-key"; };
};

Dit is een default goede configuratie. Echter heeft Bind versie 9 speciale chrootfunctionaliteit dat je best gebruikt. Hier leg ik uit hoe je je gechroote bind aanmaakt:

Codevoorbeeld 1.1: Aanmaken van chrootomgeving

# mkdir -p /chroot
# mkdir /chroot/dns
# mkdir /chroot/dns/dev
# mkdir /chroot/dns/etc
# mkdir /chroot/dns/var
# mkdir /chroot/dns/var/run
# mkdir /chroot/dns/var/run/named
# chown -R named:named /chroot/dns/var/run/named
# cp -R /etc/bind /chroot/dns/etc/.
# cp /etc/localtime /chroot/dns/etc/localtime
# cp -R /var/bind /chroot/dns/var/.
# mknod /chroot/dns/dev/zero c 1 5
# chmod 666 /chroot/dns/dev/zero
# mknod /chroot/dns/dev/random c 1 8
# chmod 666 /chroot/dns/dev/random
# cp -a /dev/log /chroot/dns/dev/log
# cd /chroot/dns
# chattr +i etc etc/localtime var

Dit zal een chrootomgeving aanmaken in /chroot. Al wat we nu nog moeten doen is de initscript aanpassen om de nieuwe chrootomgeving te gebruiken. Editeer /etc/init.d/named en voeg -t /chroot/dns toe aan de startfunctie. Je zou tevens beter de stop-functie ook aanpassen om naar het correcte PID-bestand te wijzen (/chroot/var/run/named/named.pid). Herstart je DNS-server.

Nota: Een hacker kan uit een chrootjail ontsnappen indien hij goed genoeg is (zie hoe je dat voorkomt in de kernelpatch sectie van dit document).

Documentatie kan gevonden worden op het Internet Software Consortium (Engels).

1.  Djbdns

Er is niet echt veel te vertellen over djbdns behalve dat de auteur geld wil verwedden op het feit dat zijn software veilig is. Dus ga en probeer het eens: http://www.djbdns.org. Het is verschillend van Bind v9 wat betreft configuratie e.d. maar echt moeilijk is het nie.

1.  Samba

Samba is een netwerk file/printer-sharing protocol tussen Microsoft/Novell netwerken en zou niet mogen gebruikt worden over het internet. Maar ongeacht dat heeft het nog steeds veiligheid nodig.

Codevoorbeeld 1.1: /etc/samba/smb.conf

[global]
  #Aan een interface binden
  interfaces = eth0 10.0.0.1/32

  #Geencrypteerde paswoorden gebruiken
  encrypt passwords = yes
  directory security mask = 0700

  #Enkel toegang verlenen aan het 1.0.0.* netwerk
  hosts allow = 10.0.0.

  #Gebruikersidentificatie gebruiken
  #(dus geen share-mode)
  security = user
  
  #Alle gepriviligeerde accounts weigeren
  invalid users = root @wheel

  #Maximaal gebruik (in kilobytes)
  max disk size = 102400

  #Paswoordbeleid forceren
  min password length = 8
  null passwords = no

  #PAM gebruiken (indien ondersteund)
  obey pam restrictions = yes
  pam password change = yes

Zorg ervoor dat de permissies correct zijn op elke share en herinner je eraan om de documentatie (Engels) te lezen.

Herstart nu je server en voeg de gebruikers toe die toegang moeten hebben tot deze service. Dit kan je doen door /usr/bin/smbpasswd te gebruiken met de -a optie.

1.  ssh

De enige beveiliging dat OpenSSH nodig heeft is een sterkere authenticatie gebruiken die gebaseerd is op publieke-sleutel encryptie. Veel sites zoals http://www.sourceforge.net, http://www.php.net and http://www.apache.org) hebben geleden onder ongewenste invallen door een paswoord-lek of slecht wachtwoord.

Codevoorbeeld 1.1: /etc/ssh/sshd_config

#Laat alleen versie 2 toe
Protocol 2

#Schakel root login uit. Gebruikers moeten inloggen moeten met su naar 
#root-gebruiker overschakelen
PermitRootLogin no

#Schakel Public key authenticatie aan
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

#Laat .rhost and normaal paswoord authenticatie niet toe
RhostsAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no

#Laat alleen users in the groep wheel of admin toe om in te loggen
AllowGroups wheel admin

#Laat in die groepen alleen de volgene gebruikeres toe
#De @<domeinnaam> is optioneel maar vervangt
#de oudere AllowHosts optie
AllowUsers kn@gentoo.org bs@gentoo.org

#Loggen 
SyslogFacility AUTH
LogLevel INFO

ListenAddress 127.0.0.1

Controleer ook dat je UsePAM yes aan hebt staan in je configuratie-bestand omdat deze het publieke-sleutel authenticatie uitschakelt.

Alles wat je nu nog hoeft te doen is voor elke gebruiker een sleutel aanmaken op de machine waar ze willen inloggen; met de volgende commando:

Codevoorbeeld 1.1: Creer een DSA keypair

# /usr/bin/ssh-keygen -t dsa

En voer een wachtwoord in.

Codevoorbeeld 1.1: Uitvoer van ssh-keygen

Generating public/private dsa key pair.
Enter file in which to save the key (/home/kn/.ssh/id_dsa):[Press enter]
Created directory '/home/kn/.ssh'.
Enter passphrase (empty for no passphrase): [Enter passphrase]
Enter same passphrase again: [Enter passphrase again]
Your identification has been saved in /home/kn/.ssh/id_dsa.
Your public key has been saved in /home/kn/.ssh/id_dsa.pub.
The key fingerprint is:
07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen

Dit zal twee bestanden in jouw ~/.ssh/ map toevoegen id_dsa and id_dsa.pub genaamd. Het bestand id_dsa is jouw private sleutel en moet weggehouden worden van andere mensen dan jezelf. Het andere bestand id_dsa.pub kan uitgedeeld worden aan elke server dat je toegang tot hebt. Voeg de sleutel toe aan de gebruikers in de home map in ~/.ssh/authorized_keys en dan zou de gebruiker moeten kunnen inloggen:

Codevoorbeeld 1.1: Toevogen van het id_dsa.pub bestand aan het authorized_keys bestand

$ scp id_dsa.pub other-host:/var/tmp/currenthostname.pub
$ ssh other-host
password: 
$ cat /var/tmp/currenthostname.pub >> ~/.ssh/authorized_keys

Nu dat je gebruikers deze privé sleutel goed moeten bewaren. Laat het op een verwijderbaar medium plaatsen dat ze altijd bijhebben of laat het ze opslaan op hun wekrstation (plaats dit in het (wachtwoord) policy).

Voor meer informatie ga naar de OpenSSH web site.

1.  Gebruiken van xinetd

Xinetd is een vervanging voor inetd (die Gentoo niet heeft), het internet service daemon. Het ondersteund toegang op basis van het adres of van de externe host en van de tijd van toegang. Het heeft ook een uitgebreide log capaciteit, waaronder server starttijd, externe host adressen, externe gebruiksnaam, server looptijd en aangevraagde acties.

Zoals andere services is het belangrijk om een goede configuratie te hebben. Maar sinds xinetd moet gestart worden door root en protocols ondersteund die je waarshijnlijk nieuw in het oor klinken, raden we je aan ze niet te gebruiken. Maar als je het wilt gebruiken, hier kun je zien hoe je veiligheid op toevoegt.

Codevoorbeeld 1.1: Installeer xinetd

# emerge xinetd tcp-wrappers

En pas het configuratie bestand aan.

Codevoorbeeld 1.1: /etc/xinetd.conf

defaults
{
 only_from = localhost
 instances = 10
 log_type = SYSLOG authpriv info
 log_on_success = HOST PID
 log_on_failure = HOST
 cps = 25 30
}

# This will setup pserver (cvs) via xinetd with the following settings:
# max 10 instances (10 connections at a time)
# limit the pserver to tcp only
# use the user cvs to run this service
# bind the interfaces to only 1 ip
# allow access from 10.0.0.*
# limit the time developers can use cvs from 8am to 5pm
# use tpcd wrappers (access control controlled in 
# /etc/hosts.allow and /etc/hosts.deny)
# max_load on the machine set to 1.0
# The disable flag is per default set to no but I like having 
# it in case of it should be disabled
service cvspserver
{
 socket_type = stream
 protocol = tcp
 instances = 10
 protocol = tcp
 wait = no
 user = cvs
 bind = 10.0.0.2
 only_from = 10.0.0.0
 access_times = 8:00-17:00
 server = /usr/sbin/tcpd
 server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver
 max_load = 1.0
 log_on_failure += RECORD
 disable = no
}

Voor meer informatie lees man 5 xinetd.conf.

1.  X

Standaard is Xorg geconfigureerd om als xserver te fungeren. Dit kan gevaarlijk zijn aangezien X ook luistert naar onge-encrypteerde TCP conneties voor xclients.

Belangrijk: Als je dit niet nodig hebt; dan schakel je die best uit!

Maar als je afhangt van een workstation te gebruikena ls een Xserver gebruik dan de /usr/X11R6/bin/xhost commando. Dit commando laat clienten toe om van andere pc's te connecteren en de display gebruiken. Dit kan handig zijn als je een X aplicatie van een andere machine nodig hebt and de enige manier is door het netwerk, maar het kan ook uitgebuid worden door een aanvaller. De syntax van dit comamndo is /usr/X11R6/bin/xhost +hostname

Waarschuwing: Gebruik nooit het xhost + optie! Dit zal alle clienten tolaten om te connecteren en controle van je x overnemen. Als een aanvaller toegang kan krijgen tot je X kan hij alle ingetypte toetsen loggen en controle van je desktop over nemen. ALs je het moet gebruiken, gebruik atijd een ingestelde hostnaam.

Een veiligere oplossing is om deze optie uit te schakelen en volledig dit uit te schakelen bij het starten van X, dit kan met startx -- -nolisten tcp of schakel dit permanent uit in de config.

Codevoorbeeld 1.1: /usr/X11R6/bin/startx

defaultserverargs="-nolisten tcp"

Controleer dat startx niet overschreven wordt als je een nieuwe versie van xorg installeerd. Daarom moet je het beschermen. Voeg de volgende lijn in /etc/make.conf:

Codevoorbeeld 1.1: /etc/make.conf

CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx"

Als je een grafische login manager gebruikt; heb je een andere aanpak nodig.

Voor gdm (Gnome Display Manager)

Codevoorbeeld 1.1: /etc/X11/gdm/gdm.conf

[server-Standard]
command=/usr/X11R6/bin/X -nolisten tcp

Voor xdm (X Display Manager) en kdm (Kde Display Manager)

Codevoorbeeld 1.1: /etc/X11/xdm/Xservers

:0 local /usr/bin/X11/X -nolisten tcp 

Upgedate op 11 maart 2006

De originele versie van dit document was laatst geupdate om 13 juni 2008

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.