====== Gestion d'un serveur dédidé chez EUserv ======
J'ai choisi la gamme « [[http://www.euserv.com/en/dedicated-server/misurfi-rootserver/v7/misurfi-lc10.php|Misurfi LC10]] », avec comme système d'exploitation FreeBSD.
Cette page récapitule toutes les manipulations faites sur ce type de serveur.
===== Modification du partitionnement =====
Par défaut, c'est ce schéma :
gpart show ada0
=> 34 1953525101 ada0 GPT (932G)
34 2014 - free - (1.0M)
2048 128 1 freebsd-boot (64K)
2176 8388608 2 freebsd-swap (4.0G)
8390784 1945134344 3 freebsd-ufs (928G)
1953525128 7 - free - (3.5K)
J'aime bien avoir une partition ''/home'' séparée. Donc après connexion au panel de gestion, j'active le système de secours (//rescue-mode//).
On supprime toutes les partitions :
# gpart destroy -F ada0
On part sur une table de partitions avec le schéma **GPT**.
# gpart create -s gpt ada0
ada0 created
# gpart show
=> 34 1953525101 ada0 GPT (931G)
34 1953525101 - free - (931G)
On va créer la partition qui contiendra le //boot loader// (c'est particulier à GPT).
# gpart add -t freebsd-boot -l boot -s 64K ada0
ada0p1 added
Puis on active l'amorce (pour démarrer le serveur) sur la nouvelle partition.
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
bootcode written to ada0
Dans certains cas, il faut activer la partition de //boot//, grâce à ces deux commandes.
# gpart set -a active /dev/ada0
# gpart set -a bootme -i 1 /dev/ada0
On peut maintenant s'occuper des autres partitions :
* ''swap''
* ''/usr''
* ''/home''
# gpart add -t freebsd-swap -l swap -s 2G ada0
ada0p2 added
# gpart add -t freebsd-ufs -l usr -s 872G ada0
ada0p3 added
# gpart add -t freebsd-ufs -l home ada0
ada0p4 added
Ce qui nous donne au final :
# gpart show ada0
=> 34 1953525101 ada0 GPT (931G)
34 6 - free - (3.0k)
40 128 1 freebsd-boot (64k)
168 4194304 2 freebsd-swap (2.0G)
4194472 1828716544 3 freebsd-ufs (872G)
1832911016 120614112 4 freebsd-ufs (57G)
1953525128 7 - free - (3.5k)
==== On formate ====
On active la ''swap'' :
# swapon /dev/ada0p2
Pour les autres partitions on utilisera le système de fichiers [[https://en.wikipedia.org/wiki/Unix_File_System|UFS 2]].
# newfs -U -O 2 /dev/ada0p3
# newfs -U -O 2 /dev/ada0p4
À ce stade le disque peut recevoir le système.
===== Installation du système de base =====
Nous allons faire une installation manuelle.
Tout d'abord on monte la partition ''ada0p3''.
# mount /dev/ada0p3 /mnt
# cd /mnt
À la place du nom des partition (''ada0p3'', etc.), on peut utiliser les étiquettes (''label'') pour plus de clarter. Elles sont accessibles dans le répertoire ''/dev/gpt/''.
On télécharge les composants, nous avons uniquement besoin de :
* ''base.txz''
* ''kernel.txz''
J'ai utilisé ce miroir, ftp://ftp.fr.freebsd.org/pub/FreeBSD/releases/
**À partir de ce stade nous sommes dans le répertoire** ''/mnt'' **(celui qui correspond à la partition** ''ada0p3''**).**
fetch ftp://ftp.fr.freebsd.org/pub/FreeBSD/releases/amd64/amd64/10.2-RELEASE/base.txz
tar -xJpf base.txz
fetch ftp://ftp.fr.freebsd.org/pub/FreeBSD/releases/amd64/amd64/10.2-RELEASE/kernel.txz
tar -xJpf kernel.txz
mkdir home
==== Configuration ====
=== /etc/fstab ===
# Device Mountpoint FStype Options Dump Pass#
/dev/ada0p3 / ufs rw 1 1
/dev/ada0p2 none swap sw 0 0
/dev/ada0p4 /home ufs rw 2 2
=== /etc/rc.conf ===
La commande ''ifconfig -a'' nous donne les informations concernant la carte réseau. Nous allons en avoir besoin dans le fichier ''/etc/rc.conf''.
Dans mon cas, il s'agit de **re0**, c'est une RealTek.
font8x14="iso15-8x14"
font8x16="iso15-8x16"
font8x8="iso15-8x8"
keymap="fr.iso.acc.kbd"
ifconfig_re0="inet xxx.xxx.xxx.xxx netmask 255.255.255.0"
defaultrouter="xxx.xxx.xxx.xxx"
hostname=""
sshd_enable="YES"
cron_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
cleanvar_enable="YES"
clear_tmp_enable="YES"
fsck_y_enable="YES"
background_fsck="NO"
On prendra le soin de définir un nom pour le serveur, et de remplacer l'adresse IP ainsi que la passerelle.
=== SSH ===
Nous allons temporairement permettre à l'utilisateur **root** de se connecter au serveur SSH. Dans ''etc/ssh/sshd_config'', on change cette ligne :
[...]
PermitRootLogin no
[...]
en
[...]
PermitRootLogin yes
[...]
=== Chroot ===
# cd/mnt
chroot .
Dans le //chroot//, on peut apporter d'autres modifications au système, par exemple :
* Changement du mot de passe, ''passwd''
* Définition des locales via ''/etc/login.conf''
* Mettre son système à l'heure, ''tzsetup''
* Faire les mises à jour de sécurité, ''freebsd-update''
* Ajouter un nouvel utilisateur, ''adduser''
À la fin de toutes ces étapes, notre système est prêt on peut redémarrer le serveur.
===== Le pare-feu =====
FreeBSD en supporte plusieurs, j'ai décidé d'utilisé PacketFilter (pf). Voici le fichier de configuration ''pf.conf'' afin d'avoir accès uniquement au serveur en SSH.
Dans ''/etc/rc.conf'' on rajoute ces lignes :
[...]
pf_enable="YES"
pf_rules="/etc/pf.conf"
iface = "re0"
# Taken from /etc/services
tcp_services = "{ ssh, domain, http, https }"
udp_services = "{ domain }"
reserved_addr = "{ 10.0.0.0/8, 172.16.0.0/12, \
192.168.0.0/16, 255.255.255.255/32 }"
icmp_types = "{ echoreq, unreach }"
set skip on lo
scrub in all
antispoof quick for $iface
block all
# Block incoming packets from reserved addresses
block in quick on $iface from $reserved_addr to any
table persist
block quick from
pass in inet proto tcp from any to $iface port ssh keep state \
(max-src-conn 5, max-src-conn-rate 5/15, \
overload flush global)
# Allow ping
pass inet proto icmp all icmp-type $icmp_types keep state
# Allow traceroute
pass out on $iface inet proto udp from any to any port 33433 >< 33626 keep state
# Allow some outcoming packets
pass out inet proto tcp from $iface to any port $tcp_services keep state
pass out inet proto udp from $iface to any port $udp_services keep state
Je n'enregistre rien (//log//), par contre j'ai mis en place un mécanisme contre les attaques force brute avec SSH.
table persist
block quick from
pass in inet proto tcp from any to $iface port ssh keep state \
(max-src-conn 5, max-src-conn-rate 5/15, \
overload flush global)
* 5 tentatives de connexion maximum pour un même client (''max-src-con'')
* on autorise les connexions, si il y a moins de 5 connexions en 15 secondes (''max-src-conn-rate 5/15'')
Pour vider la table **ssh-bruteforce**, j'ai mis en place une tâche récurrente chaque semaine, chargée de vider totalement la liste enregistrée.
SHELL=/bin/sh
PATH=/bin:/sbin/usr/bin:/usr/sbin
# Clear the table 'ssh-bruteforce' each week
@weekly /sbin/pfctl -t ssh-bruteforce -T flush