====== 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