FreeBSD Installation

Un article de Casys (Canadian Sysadmins).


Auteur: Thomas Boutry

Sommaire

Description

FreeBSD est un autre système d'exploitation du type Unix, très performant ce qui est vraiment intéraissant avec FreeBSD est le système de Jail ainsi que l'organisation du système qui est très carré. L'objectif ici est d'avoir un système minimal, puis de faire la configuration du système le plus sécuritaire possible.


Installation

Paritionnement recommandé FreeBSD
Mount Point Size (mb)
/ (root) 512MB
swap 1024MB (ou le double de la RAM)
/var 3096MB
/tmp 2048MB
/usr 4096MB (Ceci est le minimum , toutes les applications s'installerons dans cette partitions ainsi que les données.) /usr)
/jails (OPTIONAL le reste de l'espace)
  • Installation minimal de FreeBSD.
    • base
    • man


  • Une fois l'installation complété définir
    • le mot de passe root
    • Le Timezone
    • Configurer le service SSH
    • Définir une adresse ip au serveur
    • Définir les DNS
    • Créer un group sysadmin avec le GID 1001
    • Créer un usagé membre du group sysadmin


  • Redemarrez le serveur sans le CD d'installation.


Configuration du serveur

Configuration du compte root

  • Établir une connexion sur le serveur sous l'usagé Root
  • Modification des permissions du répertoire
chmod 750 /root

Installation du gestionnaire de package

  • Installation de porteasy

Ceci nous permettra de faire la gestion des ports

pkg_add -rv porteasy
  • Executez rehash, pour que les nouvelles commandes soit disponibles voir le man page de csh
rehash

Création des répertoire pour le système de révision

Nous créons les répertoire pour le système de révision RCS.

mkdir -p /etc/RCS /usr/local/etc/RCS /etc/ssh/RCS


Single user mode

Oblige l'entré de mot de passe quand le serveur est démarré en mode single user

vi /etc/ttys 
  • Changez la ligne suivante
console none    unknown off secure

Pour:

console none    unknown off insecure
ci -u /etc/ttys

Configure SSHD

Nous allons modifier la configurations pour respecté les critères suivants:

  • Restriction de la configuration
    • Limitation du nombre d'usagés pouvant établir une connection à la liste AllowUsers
    • Uniquement le protocol V.2 est authorisé
    • Ne pas permettre les connections ssh pour l'usagé root
    • Message de bienvenue
vi /etc/ssh/sshd_config
# sshd_config
#
# $Id$
#
# Configuration file for sshd(8).

VersionAddendum Restricted Access
AllowUsers xerus
Protocol 2
PermitRootLogin no
ClientAliveInterval 120
ClientAliveCountMax 2
Banner /etc/issue

#EOF
  • Commitez le fichiers dans le système de révision
ci -u /etc/ssh/sshd_config


  • Création du message de restriction affiché quand le système demande le mot de passe a l'usagé.
echo "Restricted Access." > /etc/issue


  • Redémarrage du service SSHD
/etc/rc.d/sshd restart

Installation de portaudit

Portaudit va nous permettre d'être informé si une application installée sur le système avec les ports à une vulnérabilité. Pour plus d'information sur portaudit voir le man page.

porteasy -uva  ports-mgmt/portaudit
cd /usr/ports/ports-mgmt/portaudit
make install clean
  • Execute le portaudit pour la permier fois :
rehash
/usr/local/sbin/portaudit -Fda

Installation de sudo et configuration

Installation via le système de ports

porteasy -uva security/sudo
cd /usr/ports/security/sudo
make install clean
  • Configuration du fichier de log pour sudo
touch /var/log/sudo.log
chown root:wheel /var/log/sudo.log
chmod 640  /var/log/sudo.log

vi /etc/newsyslog.conf
  • AJOUTEZ
/var/log/sudo.log       root:wheel      640  7     100  *     J
ci -u /etc/newsyslog.conf


  • Définition du fichier de configuration pour sudo.
rehash
visudo
# sudoers
#
# Configuration file for sudo(8).
#
# Boutry Thomas 29th July, 2008

# Send logs to /var/log/sudo.log only.
#
Defaults        logfile = /var/log/sudo.log

# Do not log via syslogd(8).
#
Defaults        !syslog

# Do not reset LOGNAME and USER environment when running commands as root.
#
Defaults>root   !set_logname


# SYSADMIN guys can do everything, but actually need to type their passwords.
%sysadmin        ALL = ALL

# EOF

Gràce a cette configuration tout les membres du groupe sysadmin auront la possibilité de faire sudo pour tout les commandes !!! Par le fait même faire attention au personne membres de ce groupes.

Installation et configuration de BASH

  • Installation
porteasy -uva shells/bash
cd /usr/ports/shells/bash
make install clean

rehash
  • Configuration des fichiers de bash
  • ALIASES
vi ~xerus/.aliases
# .aliases
#
# Boutry Thomas, 3 Juillet 2008

alias   c='clear'
alias   h='history 25'
alias   lsd='ls -alF | grep -i '
alias   ls='ls -G'
alias   mq='sudo mailq; echo; sudo mailq -Ac'
alias   up='sudo cvsup -g -L 2 /root/cvs-supfile'

# EOF
  • PROFILE
vi ~xerus/.bash_profile
# .bash_profile
#
# Bourne Shell startup script for login shells
#
# Boutry Thomas, 3 Juillet, 2008

# remove /usr/games and /usr/X11R6/bin if you want
PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/libexec"
export PATH

# Setting TERM is normally done through /etc/ttys.  Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# Use cons25l1 for iso-* fonts
# TERM=cons25;  export TERM

BLOCKSIZE=K;    export BLOCKSIZE
EDITOR=vi;      export EDITOR
PAGER=less;     export PAGER

# Setup for porteasy(8). Either one or the other is fine,
# just as long as one of them answers.
#
# CVSROOT="anoncvs@anoncvs1.FreeBSD.org:/home/ncvs"
CVSROOT="freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs"
export CVSROOT

# Source aliases file.
if [ -f ~/.aliases ]; then
        . ~/.aliases
fi

# Set usefull prompt.
PS1="[\u@\h] \W {\!}$ "
export PS1

# EOF
  • BASHRC
vi ~xerus/.bashrc
# .bashrc
#
# User specific aliases and functions.
# Source aliases for use while running in screen(1).

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Source user aliases.
if [ -f ~/.aliases ]; then
        . ~/.aliases
fi

# EOF
  • Changez les permissions des fichiers pour être sur qu'ils sont bien à l'usager
chown -R xerus:sysadmin  ~xerus
  • Pour conclure nous modifions le shell par default de l'usagé
vipw

Modifiez /bin/sh pour /usr/local/bin/bash

  • ATTENTION: ne pas changé le shell par default de l'usagé root, car si un jour vous avez un problème de disque dur et que le système n'arrive pas a mounté /usr vous aurez un GROS problème.
  • À présent connectez-vous avec votre usagé toutes les autres opérations seront executées avec la command sudo afin d'avoir des logues des différentes commandes.

Configuration du point de montage tmp

  • Nous désactivons la possibilité d'exécuter des fichiers dans le répertoire tmp
sudo vi /etc/fstab

Modifier la ligne /tmp attention le nom du device est surement différent

/dev/ad0s1e             /tmp            ufs     rw,noexec,nosuid         2       2
sudo ci -u /tmp
  • Modification des autres répertoire tmp sur le serveur
sudo rm -rf /usr/tmp 2>&1 >/dev/null
sudo ln -s /tmp /usr/tmp

sudo rm -rf /var/tmp 2>&1 >/dev/null
sudo ln -s /tmp /var/tmp

Modification du message du jour

  • Suppression du messages du jours
sudo cp /dev/null /etc/motd

Restriction d'accès à la console

  • Nous allons limité la connextion à la console au goupe sysadmin
sudo vi /etc/login.access

Ajoutez ceci à la fin

-:ALL EXCEPT wheel shutdown sync sysadmin:console
sudo ci -u /etc/login.access

Configuration des paramètres kernel

  • Restriction pour ne pas permettre de rebooté le server avec CTRL+ALT+DEL
  • Restriction pour que les usagés régulier ne voit pas les process de l'usagé root
  • Prévention contre les DOS
sudo rcsdiff /etc/sysctl.conf
sudo co -l /etc/sysctl.conf
sudo vi /etc/sysctl.conf


# sysctl.conf
#
# $Id$
#
# Prevent users from rebooting servers via Ctrl-Alt-Del keys.
#
hw.syscons.kbd_reboot=0


# Uncomment this to prevent users from seeing information about processes that
# are being run under another UID.
security.bsd.see_other_uids=0

# Reduce chances of DDOS attacks.
# Check: http://silverwraith.com/papers/freebsd-ddos.php
#
net.inet.tcp.msl=7500
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.icmp.icmplim=50
kern.ipc.somaxconn=32768
 
# EOF
sudo ci -u /etc/sysctl.conf


Mise à jour des paramètres réseaux

Si vous avez installé le serveur dans réseaux avec un serveur DHCP peut-être n'avez vous pas définie d'ip , il est temps de corriger ce problème

  • Définition de l'ip Fixe du serveur
sudo rcsdiff /etc/rc.conf
sudo co -l /etc/rc.conf
sudo vi /etc/rc.conf

Nous allons éditer les lignes ifconfig (ex: ifconfig_le0="DHCP")

ifconfig_le0="inet 10.10.10.50 netmask 255.255.255.0"
defaultrouter="10.10.10.1"


  • Mise à jour du fichier hosts
sudo vi /etc/hosts
# hosts
#
# $Id$
#
# Host Database
#
# This file should contain the addresses and aliases for local hosts that
# share this file.  Replace 'my.domain' below with the domainname of your
# machine.
#
# In the presence of the domain name service or NIS, this file may
# not be consulted at all; see /etc/nsswitch.conf for the resolution order.
#
# According to RFC 1918, you can use the following IP networks for
# private nets which will never be connected to the Internet:
#
#       10.0.0.0        -   10.255.255.255
#       172.16.0.0      -   172.31.255.255
#       192.168.0.0     -   192.168.255.255
#
# In case you want to be able to connect to the Internet, you need
# real official assigned numbers.  Do not try to invent your own network
# numbers but instead get one from your network provider (if any) or
# from your regional registry (ARIN, APNIC, LACNIC, RIPE NCC, or AfriNIC.)

# Loopback.
#
127.0.0.1               localhost localhost.xerus.net
10.10.10.50             satan.xerus.net

# EOF

sudo ci -u /etc/hosts

Définition de variables pour les scripts periodic

  • Mise en place d'une variable pour que lors de l'utilisation de df les inodes soit pris en considération
sudo vi /etc/periodic.conf
# periodic.conf
#
# $Id$
#
# Make changes to this file. Do not use /etc/defaults/periodic.conf
#
# Boutry Thomas , 3 Juillet 2008

daily_status_disks_df_flags="-hi -t nonfs"      # df(1) flags for check.

# EOF
sudo ci -u /etc/periodic.conf

Suppression de l'usager toor

information sur cette usagé : http://www.freebsd.org/doc/en/books/faq/security.html#TOOR-ACCOUNT

sudo pw user del toor


Configuration du fichier make.conf

sudo vi /etc/make.conf
# make.conf
#
# $Id$
#
# Configuration for particular ports and all make(1) commands.
# See examples in /usr/share/examples/etc/make.conf
#
# David Robillard, March 9th, 2005.

# Use CPU-specific compile flags and microcode.
#
CPUTYPE=i686

# Compiler optimization:
# -O2:
#       All optimizations which do not cause the size of the resulting
#       executable to increase are turned on. This is useful for a speed/space tradeoff
#
# -pipe:
#       Decreases the amount of time taken to compile software by using pipes to
#       communicate between two compiler threads.
#
# -funroll-loops:
#       When a binary compiled with this option is run, the CPU does not have to run
#       through every possible itteration of the loop to get its result. Instead,
#       loops are replaces with with their equivilent non-looping code. This saves one
#       CPU register which would otherwise be tied up in tracking the itteration of the loop.
#
# CFLAGS=-O2 -pipe -funroll-loops
#
# Humm, let's be more conservative.
#
CFLAGS= -O -pipe

# COPTFLAGS
#
COPTFLAGS= -O -pipe

##
# Do not build the entire base software.
##
##
# Do not build the entire base software.
##

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
NO_FORTRAN=      true    # do not build g77 and related libraries
NO_GAMES=        true    # do not build games (games/ subdir)
NO_GDB=          true    # do not build GDB
NO_I4B=          true    # do not build isdn4bsd package
NO_INET6=        true    # do not build IPv6 related programs and libraries
NO_INFO=         true    # do not make or install info files
NO_IPFILTER=     true    # do not build IP Filter package
NO_LPR=          true    # do not build lpr and related programs
NO_NIS=          true    # do not build NIS support and related programs.
#                        # If NO_NIS is set, you might need to adopt your
#                        # nsswitch.conf(5) and remove `nis' entries.
NO_PF=           true    # do not build PF firewall package
NO_SHAREDOCS=    true    # do not build the 4.4BSD legacy docs
NO_USB=          true    # do not build usbd(8) and related programs
NO_VINUM=        true    # do not build Vinum utilities


##
# dns/bind9 port configuration.
##

# Do not build bind from the source.
# We use the ports system instead.
#
NO_BIND=true


# Do not build and install the base distribution of sendmail.
#
NO_SENDMAIL= TRUE

# Specify where the configuration directory is located.
#
SENDMAIL_CF_DIR=/usr/local/share/sendmail/cf


# added by use.perl 2008-06-29 11:03:27
PERL_VER=5.8.8
PERL_VERSION=5.8.8

# EOF
sudo ci -u /etc/make.conf


Configuration de sendmail comme NullClient

La configuration de sendmail en nullClient définie que le courriel sera directement envoyé au serveur destination sans aucun traitement de la part du serveur sendmail. Contrairement au système de relayhost ou smarthost, dans ce dernier cas le fichier /etc/aliases est traité avant l'envoie au serveur de relay.

sudo porteasy -uva security/openssl
sudo porteasy -uva mail/sendmail
cd /usr/ports/mail/sendmail
sudo make -DSENDMAIL_WITHOUT_IPV6 -DSENDMAIL_WITHOUT_NIS -DSENDMAIL_WITH_TLS -DSENDMAIL_WITH_SMTPS \
 -DSENDMAIL_WITH_BERKELEYDB_VER=42 -DSENDMAIL_WITH_SOCKETMAP -DSENDMAIL_WITH_PICKY_HELO_CHECK -DSENDMAIL_WITH_SHARED_MILTER

sudo make tls-install
sudo make install
sudo make mailer.conf
sudo make clean
  • Préparation du répertoire /etc/mail
cd /etc/mail
sudo mkdir RCS SAMPLES
sudo mv *.sample SAMPLES
  • Réalisation du fichier de configuration pour le serveur
sudo vi `hostname`.mc
divert(-1)
# sendmail.mc
#
# This is the sendmail macro config file. If you make changes to this file,
# then generate a new /etc/mail/sendmail.cf by running the following command:
#
#       m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
#
#       Or run "make install restart" in /etc/mail.
#
# Boutry Thomas, 3 Juillet 2008
divert(0)
VERSIONID(`$Id$')dnl
OSTYPE(`freebsd6')dnl
FEATURE(`nullclient', `barabbas.xerus.net')dnl
dnl # EOF
sudo ci -u `hostname`.mc
  • Processe le fichier mc de sendmail et convertir ce fichier avec la syntax sendmail et redémarrage du service.
sudo make install restart
  • test de configuration
mail -s " un test de `hostname`" votre@courriel.net


Configure Network Time Protocol

  • Configuration du client ntp
sudo vi /etc/ntp.conf
# ntp.conf
#
# $Id$
#
# Configuration file for ntpd(8).
#
# Boutry Thomas 5 juillet 2008

# server
# List a hostname, not an IP, of a machine synchronise against.
#
server clock.via.net

# driftfile
# Full path to the drift file.
#
driftfile /etc/ntp/ntpd.drift

# Prohibit general access to this service.
restrict default ignore

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
# restrict 192.168.1.123 mask 255.255.255.0 noquery nomodify notrap

# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1

# EOF
sudo ci -u /etc/ntp.conf


  • Mise en place de la rotation des logs de ntp
sudo touch /var/log/ntp.log
sudo co -l /etc/newsyslog.conf
sudo vi /etc/newsyslog.conf
  • Ajoutez
/var/log/ntpd.log                       600  7     100  *     J
sudo ci -u /etc/newsyslog.conf
  • Activation du service ntpd
sudo co -l /etc/rc.conf
sudo vi /etc/rc.conf
  • Ajoutez
ntpd_enable="YES"
ntpd_flags="-p /var/run/ntpd.pid -l /var/log/ntpd.log"  # Flags to ntpd (if enabled).
sudo ci -u /etc/rc.conf

Configuration du fichier rc.conf

Nous allons maintenant ajouter quelques configuration au fichiers rc.conf

sudo co -l /etc/rc.conf
sudo vi /etc/rc.conf
  • Ajoutez
accounting_enable="YES"         # Enable accounting.
check_quotas="YES"              # Check quotas.
clear_tmp_enable="YES"          # Clear /tmp at startup.
icmp_bmcastecho="NO"            # Do not respond to broadcast ping packets.
icmp_drop_redirect="YES"        # Drop ICMP redirect.
icmp_log_redirect="YES"         # Log dropped ICMP redirect.
inetd_enable="NO"               # Don't run inetd(8).
keyrate="normal"                # Set normal keyboard repeat rate.
saver="green"                   # Blank screen when idle.
scrnmap="NO"                    # Screen map in /usr/share/syscons/scrnmaps/* (or NO).
sendmail_enable="NO"            # Bind sendmail(8) to locahost only.
sshd_enable="YES"               # Start sshd(8).
syslogd_enable="YES"            # Start syslogd(8).
syslogd_flags="-ss"             # Receive syslogd(8) from local machine only.
tcp_drop_synfin="YES"           # Prevent OS finger printing.
tcp_keepalive="YES"             # Enable stale TCP connection timeout (or NO).
update_motd="NO"                # Don't update motd(5) at startup.
usbd_enable="YES"               # Start usbd(8).
sudo ci -u /etc/rc.conf

Configuration du système de mise à jour - CVSUP

  • Création du fichier de configuration
sudo vi /root/cvs-supfile
# cvs-supfile
#
# $Id$
#
# Supfile for upgrading world and kernel.
#
# Check /usr/share/examples/cvsup/cvs-supfile for more information.
#
# Boutry Thomas 5 juillet 2008
 
# Host from which files are fetched.
#
*default host=cvsup4.freebsd.org
 
# Directory where CVSup stores info about it's work.
# Will never grow beyond ~1MB and creates ${base}/sup.
# NOTE: The `refuse' file is thus: /var/db/cvsup/sup/refuse
#
*default base=/var/db/cvsup
 
# Directory where to place the downloaded files.
#
*default prefix=/usr
 
# Which version of FreeBSD do we want?
# Check http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvs-tags.html
#
*default tag=RELENG_7_0
 
# Defauts. Don't need to change this.
#
*default release=cvs delete use-rel-suffix compress
 
# What do we want to download?
#
src-all
 
# EOF
sudo mkdir /root/RCS
sudo ci -u /root/cvs-supfile
  • Création du répertoire pour l'application cvsup
sudo mkdir -p /var/db/cvsup/sup
  • Copy du fichier refuse afin de ne pas télécharger certain répertoires
sudo cp /usr/share/examples/cvsup/refuse /var/db/cvsup/sup
  • Récupération des fichiers du cvs
sudo cvsup -g -L 2 /root/cvs-supfile

Création du fichier de configue pour le Kernel

Nous allons recompiler le kernel avec de nouvelles configuration, ceci nous permettra d'avoir un kernel compilé sur le serveur et optimisé pour ce dernier et aussi nous permettre d'enlever certain module que nous n'utilisons pas telle que par exemple le support pour les cartes ISA.

  • Définition des variables d'environnement

Nous allons définir la variable MYKERNEL avec le modele du serveur que nous utilisons ceci nous permettra de savoir le type de serveur que nous utilisons même si nous sommes connecté par SSH.
example pour un DELL 1950 le nom du kernel sera DELL1950.

export MYKERNEL=VMWARE_VM
  • Création du fichier de config.
sudo mkdir -p /root/kernel
sudo cp /usr/src/sys/i386/conf/GENERIC /root/kernel/$MYKERNEL
sudo ln -s /root/kernel/$MYKERNEL /usr/src/sys/i386/conf
sudo vi /root/kernel/$MYKERNEL

Vous pouvez mettre en commantaire les modules que vous ne voulez pas .

sudo ci -u /root/kernel/$MYKERNEL

Une fois l'opération terminé allez sur la page FreeBSD Mise à jour, pour les instructions de compilation du kernel et de la base du système.

Trucs & Astuces

ports

  • Recherche d'une application dans les ports
    • Mise a jour de l'index :
 cd /usr/ports/
 make fetchindex
    • Recherche du package:
 make search name=Nom_package


Références

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/

http://wiki.zerocatastrophe.com/wiki/UNIX/FreeBSD/Installation