Installation de FreeBSD en serveur

Un article de Projet de documentation fug-fr .

Jump to: navigation, search

Sommaire

[modifier] Installation générique d'un serveur

Nous avons repris ce qui a été fait pour la partie desktop et qui sera modifié pour un serveur.
Vous trouverez de la documentation pour installer et configurer correctement FreeBSD en suivant les liens ci-dessous :

Le chapitre [installation] du HandBook de FreeBSD.
Le chapitre [configuration de X11] de ce même HandBook.
Un [article] de PC-entraide sur ces mêmes sujets.
La partie [française] du site FreeBSD .
Un fichier texte pour faire les premiers [pas].
Les archives des mailing [lists] FreeBSD.

[modifier] Partitionnement

Nous parlerons dans cette partie du partitionnement en nous plaçant dans le cas où le disque est consacré uniquement à FreeBSD.

Les noms donnés aux disques sous FreeBSD sont différents de ceux donnés sous Windows ou GNU/Linux :

ad0 : premier disque dur IDE
ad1 : second disque dur IDE
da0 : premier disque dur SCSI
da1 : second disque dur SCSI

Dans notre cas, le disque où vous souhaitez installer FreeBSD devrait être ad0 ou ad1. C'est celui-ci que vous sélectionnez en arrivant à l'écran "Select Drive(s)". Maintenant, vous devez avoir en tête que le terme "partition" sous Windows ou GNU/Linux est remplacé par le terme "slice" (ou tranche) sous FreeBSD. Pour être plus précis, une slice est une "partition primaire". Pour rappel, un disque peut contenir 1 à 4 partitions primaires. L'outil permettant de créer votre partition FreeBSD lors de l'installation est "fdisk".

Dans notre exemple, une fois le disque sélectionné et l'écran de fdisk affiché, vous n'avez qu'à appuyer sur trois touches :

A : pour utiliser la totalité du disque.
S : pour que la slice créée soit démarrable.
Q : pour terminer.

Pour finir, l'installateur vous demande où il doit installer le gestionnaire de démarrage de FreeBSD (Install Boot Manager). Si vous avez déjà un gestionnaire de démarrage (comme lilo ou grub) et que vous souhaitez le conserver, choisissez "None" et il ne fera rien. Sinon, choisissez "BootMrg" pour procéder à son installation. Si vous avez plusieurs disques (ad0 et ad1 par exemple), vous devez installer le gestionnaire de démarrage sur chaque disque, même si vous n'installez FreeBSD que sur un seul.

Vous en avez maintenant terminé le partitionnement, mais pour FreeBSD, vous n'avez créé qu'une slice et installé un gestionnaire de démarrage. Il vous faut maintenant partitionner cette slice au sens FreeBSD, en y créant des partitions FreeBSD. Si vous préférez des sous-partitions sans équivalent sous Windows ou GNU/Linux. L'outil permettant de créer vos partitions FreeBSD lors de l'installation est "disklabel". Arrivé à son écran, vous n'avez à appuyer que sur deux touches:

A : pour un partitionnement automatique.
Q : pour terminer.

Cette fois vous en avez bel et bien terminé avec cette étape. Le résultat obtenu ne sera peut-être pas optimum, mais pour une première fois c'est déjà pas si mal.

[modifier] Choix de la distribution

Le choix de la distribution n'est pas fondamental mais choisir avec attention sa distribution permet d'éviter d'avoir des choses inutiles d'installés.

Dans le menu "Choose Distributions", allez tout en bas et choisissez "Custom" puis :

  • Base (obligatoire)
  • Kernel (obligatoire)
  • man (c'est marqué recommandé mais pour moi c'est obligatoire )
  • ports (cela fera gagner du temps plus tard)
  • src puis all, si vous compter mettre à jour votre système (comme pour les ports, cela fera gagner du temps plus tard)

Il n'y a plus qu’à attendre la fin de la copie des différents éléments.

[modifier] Configuration finale

Une fois la copie des différents fichiers terminés, l'assistant vous demande s'il y a un réseaux à configurer sur des périphériques de type Ethernet ou SLIP/PPP, répondez "yes"

[modifier] configuration du réseaux

Sélectionnez la carte réseaux, en règle générale c'est la première de la liste. Les éléments plip ou sl ne nous intéresse pas pour le moment.

  • configuration IPv6 : Répondez "no", à moins d'être certain de l'utiliser et d'avoir une adresse.
  • configuration par DHCP : Pour un serveur, il assez exceptionnel de répondre oui, donc répondez "no"
  • Renseignez dans le masque de saisie au minimum :
    • Le nom d'hôte (hote)
    • L'adresse IPv4
    • le masque de sous-réseaux (netmask)

La zone pour le nom d'hôte est assez petite et un PR a été soumis à ce sujet, mais cela n'est pas très gênant puisqu'on peut le changer dans le fichier /etc/rc.conf
Je vous recommande de saisir dans la mesure du possible :

  • l'adresse de passerelle (gateway)
  • l'adresse d'un serveur DNS (DNS)
  • Et dans une moindre mesure le domaine (NB: Le domaine s'entend au sens Interne du terme et pas windowsiens: i.e. "bebik.net")
  • L'assistant vous demande si vous souhaitez monter l'interface: Oui

[modifier] Questions suivantes

  • "Act as a gateway" Sauf si vous destiné votre machine à être une passerelle, répondez "no"
  • "Configure Inetd and network services" : Configuration des services réseaux et Inetd, répondez "no". On configurera les services réseaux un peu plus loin
  • "Enable SSH": Activer SSH, oui c'est quand même bien pratique.
  • "Anonymous FTP" : Répondez "No", idem que pour inetd s'il y a besoins on va configurer cela plus tard.
  • "NFS Server" : "No"
  • "NFS Client" : "No"
  • "Review console setting ?" : "No"
  • "Choose time Zone " : "Yes" puis répondez "No" su le fait que horloge CMOS est en UTC.
  • "enable Linux binary compatibility" : Répondez "No" à moins que vous soyez sur d'en avoir absolument besoins. Vous avez la possibilité d'activité plus tard de toute façon.
  • "Activate PS/2,Serial,usb,mouse" : "No", y a pas besoins de mulot sur un serveur.
  • concernant le package collection répondez "No"

[modifier] Ajout de compte supplémentaire

Par défaut, il n'y a que root, nous allons ajouter un utilisateur low-privilège ne serait que pour pouvoir se connecter en SSH sur notre serveur flambant neuf donc répondez "Yes"

  • Sélectionner "user"
  • Dans le masque de saisie saisissez :
    • login ID : comme vous voulez marcel, toto mais en général admin c'est bien
    • un mot de passe : On choisira un mot de passe fort tant qu'à faire
    • dans la zone membre saisissez "wheel", ce groupe, dont fait partis root, permet notamment une fois loguer en SSH de passer root via su
    • valider puis faites "exit"

[modifier] Définition du mot de passe root

On vous demande de définir un mot de passe pour root, s'il y a bien un compte qui doit avoir un mot de passe fort, très fort, c'est bien celui-là.

On vous demande ensuite si vous voulez revoir les options générale, répondez "No"
Vous revenez au menu général donc on fait "Exit".
On vous dit qu'il faut enlever tous les média CD/DVD car la machine va rebooter.

Retenez votre souffle jusqu'à l'obtention du prompt, la machine reboote...

[modifier] Personnalisation de l'environnement

Bien si vous n'êtes pas mort c'est que la machine à rebooter correctement, sinon le FUG et google sont tes amis.
A partir de là, personnellement je ne travaille plus qu'en SSH, premièrement ce n’est pas particulièrement sympa de travailler en chambre froide, euh salle machine, deuxième je préfère mon client SSH qui me propose un certain nombre de fonctionnalité que ma console n'a pas.

Bref, nous allons donc tout d'abord mettre à jour ce formidable, extraordinaire et mirifique outil que sont les ports.

[modifier] MISE A JOUR DES PORTS

Depuis FreeBSD 6.2, il y a outil est intégré, il s'agit de CSup, successeur de CVSup, il permet de mettre à jour l'arborescence des ports et même des sources. Si vous voulez en savoir plus sur les ports cf. : Utiliser les ports, man ports
Nous allons donc créer un petit fichier de config pour CSup/CVSup :

# cp /usr/share/examples/cvsup/ports-supfile /etc/cvsupfile

Editez le fichier /etc/cvsupfile et changez le "*default host=CHANGE_THIS.FreeBSD.org", vous avez la liste des miroirs ici: http://www.freebsd.org/doc/handbook/mirrors.html mais vous pouvez utilisez celui-ci cvsup5.fr.freebsd.org en première approche.

Hip Hop, on met à jour :

# csup /etc/cvsupfile

Après une installation fraîche, il faut bien compter 20 à 30 min de mise à jour. Bon café...

[modifier] Changement de shell (Optionnel)

**** ATTENTION ****
LE CHANGEMENT DE SHELL POUR ROOT N'EST PAS RECOMMANDE !
SI BASH OU UNE DE SES DEPANDANCES EST SUPPRIME VOUS NE POURREZ PLUS VOUS LOGGUER
**** ATTENTION ****

"... c'est alors que Régis me dit : c'est pas possible de faire ca, IP c'est une techno Microsoft! Arf! qu'il est con ce Régis.."
Ah pardon c'est finis la mise à jour ? Bien
Moi je préfère bash à sh comme shell donc, hip hop, on installe bash grâce à ses ports tout neuf et à jour :

# cd /usr/ports/shells/bash && make install clean

Comme c'est la première installation sur le système tout nu, l'installation va commencer par installer un certain nombre d'outils qui, de toute façon, seront utilisé après.

C'est un peu long aussi donc : 2ième café...

Voilà c'est fini donc, on le met en service pour root et pour notre utilisateur "low-privilège" chéri:

# chpass -s /usr/local/bin/bash (ca c'est pour root)
# chpass -s /usr/local/bin/bash marcel (ca c'est pour marcel...)

On se délogue et on se relogue, voilà on travaille avec bash. Vous pouvez notez que le prompt a changer :

Pour root : [root@monserveurtoutneuf ~]#
pour marcel : [marcel@monserveurtoutneuf ~]$

[modifier] Utilisation de gnuls (Optionnel mais recommandé)

GNUls est un ls amélioré, il permet entre autre d'afficher des couleurs
On l'installe donc :

# cd /usr/ports/misc/gnuls && make install clean

Compile...compile...Compile...Install...Install...Nettoie...Nettoie...
Voilà on l'active pour tout le monde dans le fichier /etc/profile :

unalias ls 2>/dev/null
LS_OPTIONS='-a -N --color=auto -T 0';
alias ls='gnuls $LS_OPTIONS'

pour prendre en compte les modifications du fichier profile immédiatement sans être obliger de se deloguer et de se reloguer :

# source /etc/profile

Un petit test :

# ls /etc

Mon Dieux, c'est plein d'étoiles de couleurs.
Vous noterez aussi que les répertoires spéciaux tel que '.' et '..' apparaissent aussi.

[modifier] Personnalisation du shell (Optionnel mais bien pratique)

Donc nous allons éditer le fichier /etc/profile

[modifier] Le prompt

Moi j'aime bien avoir l'heure sur mon prompt :

set -p
if test "$UID" = 0 ; then
   PS1="[\t][\u@\h:\w] # "
else
   PS1="[\t][\u@\h:\w] > "
fi
PS2='> '
ignoreeof=0
export PS1 PS2 ignoreeof

[modifier] Les alias

Quelques petit alias :

alias dir='ls -l' #pour les windosiens
alias ll='ls -l' # listing
alias lrt='ls -lrt' #les derniers fichiers modifier apparaissent en dernier
alias ls-l='ls -l' #pour les barres d'espace faignantes
alias ..='cd ..'
alias ...='cd ../..'

On se delogue/relogue ou prendre en compte directement les modifications :

#source /etc/profile

[modifier] Refaire le monde

Voilà nous avons un serveur tout neuf mais sûrement pas à jour en terme de sécurité, nous allons donc, pour une fois, refaire le monde.

[modifier] Mettre à jour les sources

Comme pour les ports, nous allons utiliser csup pour mettre à jour les sources et du coup il nous faut un fichier de config.
Voici celui que l'on peut utiliser pour la version courante de FreeBSD,/etc/cvsupfileS :

*default tag=.
*default host=cvsup99.FreeBSD.org
*default prefix=/usr
*default base=/var/db
*default release=cvs delete use-rel-suffix compress
src-all

Maintenant il va me rapatrier des sources dont je n'ai pas besoins : les jeux.
On créé donc un fichier /usr/sup/refuse contenant :

src/games*

Mettons à jours maintenant :

#csup /etc/cvsupfileS

[modifier] Modifier le make.conf

Voici les options de compilation que j'utilise quasiment tout le temps, à placer dans le fichier /etc/make.conf :

NO_ATM=true             # do not build ATM related programs and libraries
NO_AUTHPF=true          # do not build and install authpf (setuid/gid)
NO_BLUETOOTH=true       # do not build Bluetooth related stuff (Necessite USB sinon)
NO_CVS=true             # do not build CVS
NO_FORTRAN=true         # do not build g77 and related libraries
NO_GAMES=true           # do not build games (games/ subdir)
NO_I4B=true             # do not build isdn4bsd package
NO_INET6=true           # do not build IPv6 related programs and libraries
NO_IPFILTER=true        # do not build IP Filter package
NO_LPR=true             # do not build lpr and related programs
NO_PROFILE=true         # Avoid compiling profiled libraries
NO_RCMDS=true           # do not build or install BSD r* commands (rsh, etc).
NO_SENDMAIL=true        # do not build sendmail and related programs
NO_TCSH=true            # do not build and install /bin/csh (which is tcsh)
NO_USB=true             # do not build usbd(8) and related programs
PPP_NO_NAT=true         # do not build with NAT support (see make.conf(5))
PPP_NO_NETGRAPH=true    # do not build with Netgraph support
PPP_NO_RADIUS=true      # do not build with RADIUS support
NO_BIND=true            # Do not build any part of BIND
MAKE_IDEA=true          # IDEA (128 bit symmetric encryption)
BOOTWAIT=0
DOC_LANG=       en_US.ISO8859-1
NO_WPA_SUPPLICANT_EAPOL=true

D'autres options sont disponible, pour plus d'info consulter le fichier /usr/share/examples/etc/make.conf


Dans les options intéressantes pour la compilation, on peut aussi noter celles-ci :

CPUTYPE=pentium4
CFLAGS= -O -pipe
COPTFLAGS= -O -pipe

Il est bon de se baser sur le fichier /usr/share/examples/etc/make.conf

[modifier] Compilation, nous voilà...

Les sources sont à jour, le make.conf est configuré et bien c'est partis :

#cd /usr/src && make buildworld

Compile...Compile...Compile... Attention c'est tres long ! Compile...
Finis ? Maintenant on passe au noyau :

#make kernel

Compile...Compile...Compile... Attention c'est long ! Compile...Install...Install... Tiens ca change !

On peut aussi scinder la compilation du kernel en deux parties et reconstruire un kernel générique

#make buildkernel KERNCONF=GENERIC
#make installkernel KERNCONF=GENERIC

Le paramètre KERNCONF prend le nom du fichier de configuration se trouvant dans l'arborescence /sys/i386/conf
/sys étant un lien vers /usr/src/sys
le sous-répertoire i386 marquant le type d'architecture de votre pc

Finis again, petit reboot alors ! Ici le handbook preconise de continuer en Single User, n'ayant pas forcement accès à la console, j'ai toujours fait la suite en multi-user sans problème à partir du moment où je suis le seul à me connecter.

#reboot

Si vous pouvez utiliser le mode 'single user', un simple "shudown now" vous y amènera.

On se loggue si tout va bien (mais y a pas de raison)

#mergemaster -p
#make installworld
#mergemaster
#reboot

Nous voilà donc l'heureux possesseur d'un système tout neuf et à jour.

[modifier] Installation d'un firewall

Comme le nainTernet est plein de gens pas gentil, il faut protéger notre gentille machine. Et ce n'est pas parce que la machine n'est pas sur Internet qu'il ne faut pas la proteger ! Vos utilisateurs aussi peuvent être méchant (Du genre :"Tiens y a de la place, je va donc stocké mes DivX la-dessus comme ca Marcel y pourra les récupérer facile")

Avant, j'utilisais IP Filter, mais maintenant je passe mes configurations sous Packet Filter (PF) que je vous recommande au vue de ses nombreuses possibilités. (macro, liste, table, reconnaissance d'empreinte, mise en place de queue de paquets etc...).

Un exemple de fichier de base qu'il faut bien sur adapter à vos besoins, plus d'info sur http://www.openbsd.org/faq/pf/filter.html

interface = "dc0" #macro de définition de l'interface réseau
trusted_ssh="{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }" # les adresses IP qui vont être autorisée à faire du ssh 
set skip on lo0 # déactivation du filtre sur le loopback
scrub in all # recomposition des packets fragmentés

#REGLES DE FILTRAGE
block all # On bloque tout par défaut.
# On autorise la connection ssh depuis les hotes "trusted_ssh"
pass in on $interface inet proto tcp from $trusted_ssh to ($interface) port ssh flags S/SA keep state  

Les instructions ci-dessus sont donnée à titre indicatif et ne sont qu'un exemple de ce que l'on peut faire avec PF.

Il vous appartient de construire votre fichier de configuration en accord avec votre typologie et de vos rêgles de sécurités.

Enfin pour finir on ajoute les options idoines au fichier rc.conf :

pf_enable="YES"                 # Enable PF (load module if required)
pf_rules="/etc/pf.conf"         # rules definition file for pf
pf_flags=""                     # additional flags for pfctl startup
pflog_enable="YES"              # start pflogd(8)
pflog_logfile="/var/log/pflog"  # where pflogd should store the logfile
pflog_flags=""                  # additional flags for pflogd startup

[modifier] Le grand tuning

Maintenant de multiple possibilités s'offrent à vous, tout dépend à quoi vous destinez votre serveur, son environnement etc..

Quelques règles de base en tout cas :

  • N'installez QUE ce qui est nécessaire.
  • Pour les règles de firewall, interdisez tout dans tous les sens par défaut, autorisez le strict minimum et pas l'inverse.
  • Ayez des mots de passe forts et changez les régulièrement.
  • Surveillez vos logs.

[modifier] Exemple de configuration

  • Passerelle Internet simple : Configuration de base + ajout d'une carte réseau + règles de filtrage et NAT adaptées
  • Passerelle Internet avec relais de messagerie filtrant : Configuration ci-dessus + postfix ( serveur smtp) + amavisd-new (interface entre postfix et d'autre outil d'analyse de contenu ) + clamav + spamassassin
  • Passerelle Internet quasi-ultime : Multiple interface réseaux (Local, Internet, Wifi et autres FAI), relais de messagerie filtrant, proxy web, webmail, firewall, répartition de charge sortante sur les différents FAI.
  • Serveur Web : Configuration de base + apache / php / mysql + proftp
  • Serveur DNS : Configuration de base + bind9
  • Serveur type ISP : Configuration de base + apache / php / mysql + proftpd + webmail + postfix (avec ses petits copain amavis-new / clamav / spamassassin etc...) + courier-imap
  • Serveur LDAP, Samba etc...

Les possibilités sont infinies