23

Debian #1 : Installation et Sécurisation

avr
1 Comment » |  Posted by Etienne SOBOLE |  Category:Debian, Divers Infos, Linux

Même si j’utilise Linux tous les jours, il est clair que je n’y connais rien en terme d’administration serveur. Je ne suis même pas root de mes propres serveurs (c’est pas ouf ça) ?!?. Il est temps que je sache un peu administrer un serveur Linux. Je me suis donc configuré un petit serveur flambant neuf (en fait il traînait dans un placard depuis 2 ans) et j’ai d’installé la Debian 7.8. Et comme il faut quand même que je sache ce que je fais, J’ai décidé de tous faire a la ligne de commande. Aucune interface graphique donc !

Installation

Création de la Clé USB

L’installation de la distribution Linux n’est pas bien compliquée.
Il faut juste disposer d’une machine connectée à Internet…
J’ai utilisé un petit soft assez bien fait Linux Live USB Creator pour créer une clé USB bootable.
Puis j’ai downloadé la dernière version stable de Debian ici. Une fois installé sur la clé, il n’y a plus qu’à booter.

Installation par défaut

Lors de l’installation, un menu vous propose plusieurs mode d’installation.
Il faut choisir le mode par défaut, vu qu’on n’y connait rien (enfin moi en tout cas).

Dans l’ordre l’installation ma vous demander:

  • La langue a utiliser pour l’installation et le système
  • Le nom du serveur
  • Le domaine auquel vous voulez relier votre serveur (laisser vide)
  • Le mot de passe de root
  • Le nom de premier utilisateur
  • Le login du premier utilisateur
  • Le mot de passe du premier utilisateur
  • Le file système utilisé : J’ai choisi de ne faire qu’une seule partition et de laisser le système partitionner comme il le souhaite mon disque dur. J’ai juste choisi le type de filesystem ext4 + LVM
C’est quoi LVM?
LVM (Logical Volume Manager, ou gestionnaire de volumes logiques en français) permet la création et la gestion de volume logique sous Linux. L'utilisation de volumes logiques remplace en quelque sorte le partitionnement des disques. C'est un système beaucoup plus souple, qui permet par exemple de diminuer la taille d'un système de fichier pour pouvoir en agrandir un autre, sans se préoccuper de leur emplacement sur le disque.

On n’est bien aidé avec ça !
Bon en gros l’intérêt de LVM (pour moi) ce sont snapshoot. Il va être possible de sauvegarder rapidement mon serveur en ne recopiant que les données qui ont été réellement modifiées.
Un jour je vais me pencher sérieusement sur le fonctionnement de LVM, mais c’est pas pour aujourd’hui.

Ensuite vous choisissez depuis quel serveur vous allez télécharger les packages.

Les service à installer

A un moment, l’installation va vous demander quels sont les services que vous voulez installer.
Personnellement j’ai tout décocher sauf

  • Le serveur SSH
  • Les commandes usuelles

J’ai fait ce choix, car je veux tout installer à la main, histoire de savoir ce qui se passe.

Enfin l’installation nous propose d’installer le mutiboot GRUB.
Bon moi je l’ai mis. Mais ça ne va pas me servir, vu que j’ai pas trop l’intention de me servir du serveur pour y installer un autre système.

Bon ben voilà.
Après, il n’y a plus qu’à attendre tranquillement que tout s’installe.

Minimum Syndical

Information serveur

Notre serveur est à présent installé.
On vérifie que le système est bien là

root@StarTrek:~# uname -a
Linux StarTrek 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686 GNU/Linux

La version de debian

root@StarTrek:~# cat /etc/debian_version
7.8

Et le hardware ?
Pour en savoir un peu plus sur la configuration matérielle de ma machine, il faut installe un premier package

root@StarTrek:~# apt-get install hwinfo

Puis on tape la commande

root@StarTrek:~# hwinfo --short

cpu:
                       Intel(R) Core(TM) i5-2500T CPU @ 2.30GHz, 1600 MHz
                       Intel(R) Core(TM) i5-2500T CPU @ 2.30GHz, 1600 MHz
                       Intel(R) Core(TM) i5-2500T CPU @ 2.30GHz, 1600 MHz
                       Intel(R) Core(TM) i5-2500T CPU @ 2.30GHz, 1600 MHz
keyboard:
  /dev/input/event3    Colorado USB Keyboard
graphics card:
                       Intel VGA compatible controller
sound:
                       Intel Audio device
storage:
                       Intel "ID " E interface
                       Intel "ID " E interface
network:
  wlan0                Atheros WLAN controller
  eth0                 Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller
network interface:
  lo                   Loopback network interface
  eth0                 Ethernet network interface
  wlan0                WLAN network interface
disk:
  /dev/sda             INTEL SSDSC2CW18
partition:
  /dev/sda1            Partition
  /dev/sda2            Partition
  /dev/sda5            Partition
usb controller:
                       Intel USB Controller
                       Intel USB Controller
                       NEC USB Controller
                       NEC USB Controller
...
Performance

Comme je suis un vrai gamin, faut absolument que je sache si mon serveur va vite ;)
Du coup j’installe un benchmark Linux.

root@StarTrek:~# apt-get install sysbench
Le CPU

Combien faut-il de temps pour calculer les 20000 premiers nombre premiers ?

root@StarTrek:~# sysbench --test=cpu --cpu-max-prime=20000 run

Beaucoup de temps visiblement :(

Maximum prime number checked in CPU test: 20000

Test execution summary:
    total time:                          23.9668s
    total number of events:              10000
    total time taken by event execution: 23.9639
    per-request statistics:
         min:                                  2.39ms
         avg:                                  2.40ms
         max:                                  4.96ms
         approx.  95 percentile:               2.41ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   23.9639/0.00
Les disques durs

D’abors on créé le fichiers qui vont servir aux tests

root@StarTrek:~# sysbench --test=fileio --file-total-size=30G prepare

On bench les disques…

root@StarTrek:~# sysbench --test=fileio --file-total-size=30G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run

… qui moule aussi. Et ça c’est pas normal car il s’agit d’un SSD !!!

Operations performed:  233940 Read, 155960 Write, 498961 Other = 888861 Total
Read 3.5696Gb  Written 2.3798Gb  Total transferred 5.9494Gb  (20.307Mb/sec)
 1299.66 Requests/sec executed

Test execution summary:
    total time:                          300.0004s
    total number of events:              389900
    total time taken by event execution: 70.2262
    per-request statistics:
         min:                                  0.00ms
         avg:                                  0.18ms
         max:                                  9.61ms
         approx.  95 percentile:               0.45ms

Threads fairness:
    events (avg/stddev):           389900.0000/0.00
    execution time (avg/stddev):   70.2262/0.00

On nettoie les fichiers de créés pour le test.

root@StarTrek:~# sysbench --test=fileio --file-total-size=30G cleanup

iptables

C’est bien beau tout ça, mais notre serveur flambant neuf est une vrai passoire. Rien n’est filtré. S’il est branché sur Internet, il est open pour le hack!
Donc il nous faut installer le firewall iptables qui en l’occurrence est déjà installé.

Création du service iptable.sh

Bon là j’invente rien, j’ai piqué tout ce qui suit ici.
Tous d’abords, on va créer un script (service) pour démarrer et/ou arrêter iptables (initialiser serait plus juste).

On va créer dans le dossier /etc/init.d le fichier iptable.sh.
et on va copier de dans le code suivant

#!/bin/sh

### BEGIN INIT INFO
# Provides:      iptables
# Required-Start:
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:   2 3 4 5
# Default-Stop:       0 1 6
# Short-description:   iptables
# Description:       Firewall
### END INIT INFO

# chargement/déchargement d'iptables

case "$1" in
'start')
/sbin/iptables-restore < /etc/iptables.conf
RETVAL=$?
;;
'stop')
RETVAL=$?
;;
'save')
/sbin/iptables-save > /etc/iptables.conf
RETVAL=$?
;;
'clean')
# clean le parefeu pendant que la machine tourne
# ça peut être une faille de sécurite si on l'exécute lors de l'extinction avant l'arrêt des interfaces
# pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l'extinction
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -t raw -F
/sbin/iptables -t filter -P INPUT ACCEPT
/sbin/iptables -t filter -P OUTPUT ACCEPT
/sbin/iptables -t filter -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t raw -P OUTPUT ACCEPT
/sbin/iptables -t raw -P PREROUTING ACCEPT
RETVAL=$?
;;
'restart')
$0 stop && $0 start
RETVAL=$?
;;
*)
echo "Usage: $0 { start | stop | restart | clean}"
RETVAL=1
;;
esac
exit $RETVAL

On l’exécute en tapant le commande

root@StarTrek:/etc/init.d# /etc/init.d/iptable.sh clean

Ce qui a pour effet d’initialiser le fichier de configuration d’iptables se trouvant dans /etc/iptables.conf
Et par défaut, tout sera ouvert.

Configuration d’iptables

Il nous faut à présent définir les règles de filtrage.
Dans l’ordre nous allons

  • Tout interdire
  • Autoriser uniquement le minimum

Attention : Lorsque nous allons taper les commandes qui interdisent tous les accès, il ne sera plus possible d’accéder au serveur en SSH. Donc vous devrez être physiquement connecté à la machine pour taper les dernières commandes !!!

On coupe tous le trafic entrant depuis tous les ports, tous les protocoles, toutes les cartes réseau…

iptables -P INPUT DROP

On coupe aussi le trafic sortant. Histoire que notre serveur, s’il est hacké, ne serve pas pour se connecter à l’extérieur.

iptables -P OUTPUT DROP

On coupe aussi les packets en transit

iptables -P FORWARD DROP

On autorise à présent la boucle locale en entrée (mais qu’est ce que ça veut dire ? mystère…)

iptables -A INPUT -i lo -j ACCEPT

On autorise les connexions ouverte à rester ouvertes (même si pour l’instant on n’a pas autorisé la moindre ouverture de connexion)

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Voilà. Les bases sont posées!
A présent, je voudrai bien ouvrir l’accès au serveur à une seul adresse IP (172.168.144) et uniquement en SSH
Comme on a tout fermé en entrée et en sortie, il nous faut ouvrir dans les deux directions

iptables -A INPUT -s 172.16.8.144 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -d 172.16.8.144 -j ACCEPT

On a ouvert le serveur sur le port 22, pour le protocole TCP/IP et pour l’adresse IP 172.16.8.144.
En sortie on a tout ouvert vers cette même IP.

On peut à présent se connecter en SSH.

C’est bien tout ça, mais on a été peut être un peu trop violent
A ce stade, il n’est plus possible d’utiliser la commande apt-get car nous avons couper les accès sur le port 53 pour résoudre les noms de domaines. de plus nous avons aussi interdit le téléchargement d’un fichier via le protocole http.
on va donc corriger ce petit problème en autorisant le résolution de nom

root@StarTrek:~# iptables -A OUTPUT -o eth0 -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

Et nous allons également autoriser notre serveur a effectuer une requète http vers l’extérieur.

root@StarTrek:~# iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Il nous reste plus qu’a sauvegarder notre liste de règles.
Cela se fait en utilisant le commande suivante

root@StarTrek:~# /etc/init.d/iptables.sh save

En gros, cette commande va copier les règles actuelles dans le fichier /etc/iptables.conf.

Initialisation du service au démarrage

On ne va pas lancer la configuration d’iptables à la main à chaque fois qu’on allume le serveur.
Il faut donc configurer Linux pour qu’il exécute la commande

root@StarTrek:~# /etc/init.d/iptables.sh start

au démarrage.

Cela se fait simplement en tapant la commande

update-rc.d iptables.sh defaults

Et voilà! Votre serveur est secure !
Au démarrage iptables sera initialisé.
Lors de l’arrêt les règles (éventuellement ajoutées) seront enregistrée.

Conclusion

C’est pas si compliqué que ça linux finalement. La prochaine fois j’installe les outils de développement : gcc, gpp et toute la clique. A moins que je ne mette un serveur web…

One Response to “Debian #1 : Installation et Sécurisation”

  1. Anon' dit :

    Salut à toi, noble blogueur :D

    Je reste admiratif devant la profondeur technique de tes articles, et il semblerait que j’aie l’occasion d’éclairer ta lanterne:
    “On autorise à présent la boucle locale en entrée (mais qu’est ce que ça veut dire ? mystère…)”
    C’est tout simplement pour que les programmes exploitant la boucle locale ne se voient pas rejeter leur requête.
    La boucle locale, c’est quand tu utilise l’adresse réservée 127.0.0.1 pour désigner ta propre machine.

    Comme seuls les programmes exécutés sur ta machine ont accès à cette interface, c’est considéré comme sûr.

    Bon courage à toi sur le verdoyant chemin de l’admin linux !

Répondre

Human control : 6 + 6 =