Académique Documents
Professionnel Documents
Culture Documents
Par Binabik
www.siteduzero.com
2/15
Sommaire
Sommaire ........................................................................................................................................... 2 Scuriser son serveur Linux ............................................................................................................... 3
Filtrer le trafic via le firewall ............................................................................................................................................... 3
Prsentation ................................................................................................................................................................................................................ Dclaration des rgles ................................................................................................................................................................................................ Dmarrage du firewall ................................................................................................................................................................................................. Exemple de script ........................................................................................................................................................................................................ Allez un peu plus loin .................................................................................................................................................................................................. 3 4 6 6 7
Q.C.M. ............................................................................................................................................................................. 13
Partager ..................................................................................................................................................................................................................... 14
www.siteduzero.com
Sommaire
3/15
Par
Binabik
Mise jour : 31/08/2009 Difficult : Intermdiaire 663 visites depuis 7 jours, class 186/797 Ce guide va vous apprendre scuriser un serveur et donc vous initier aux thmatiques de la scurit informatique. En quoi estce important ? Par dfinition, un serveur est ouvert sur le monde, un minimum de scurit est donc intressant afin de se prmunir des attaques les plus simplistes. La marche suivre sera donc la suivante : prsentation des failles ; prsentation des outils pour y pallier. Bien entendu, je ne fais pas un cours complet de scurit informatique, ce tutoriel est une initiation. Pour faire simple, c'est un peu comme fermer les volets la nuit. Point de vue matriel, voil ce qu'il vous faudra : un serveur embarquant une distribution xBuntu ou Debian (pour les autres distribs, le principe sera le mme, mais les commandes risquent d'tre diffrentes) ; un accs root (en ssh par exemple) et une console. Tout le tutoriel se passe en ligne de commande afin de pouvoir tre accessible tous. Comme il faudra diter des fichiers, veuillez vous assurer d'avoir un diteur de fichier en ligne de commande (j'utiliserai personnellement nano qui est trs simple). Cest parti ! Sommaire du tutoriel :
Filtrer le trafic via le firewall Se prmunir contre les intrusions Surveiller les logs Du bon usage de son serveur Tester la suret de son serveur Q.C.M.
www.siteduzero.com
4/15
Nous allons maintenant dtailler le fonctionnement dun firewall - relativement simple. Un firewall analyse tout le trafic et vrifie si chaque paquet chang respecte bien ses rgles (critres de filtrage). Donc, il suffit de spcifier de bonnes rgles pour interdire tout trafic superflu. Les critres peuvent tre divers (filtrer les ports, les protocoles, les adresses IP, etc). De base, nous allons spcifier nos rgles sur les ports. Bien entendu, il faut tre le plus strict possible quant au choix des rgles ; cest pourquoi, par dfaut, tout firewall se rgle en premier lieu en bloquant tout, absolument tout. Ensuite, nous allons ouvrir (autoriser le trafic) certains ports que nous voulons utiliser (par exemple pour un serveur web, nous allons ouvrir le port 80 afin que le site web soit accessible). Pour plus de souplesse, nous allons crire nos rgles sous forme de script bash . Petite mesure de prudence si vous tes loggu sur votre machine distance (ssh), soyez bien sr de ne pas vous bloquer laccs ou - le cas chant - de pouvoir rebooter la machine. Sinon, jai bien peur que rcuprer votre serveur sera compliqu !
Suit la marche suivre pour crer les rgles : 1. Crons le script : Code : Console nano /etc/init.d/firewall
Et on y crit : #!/bin/sh 2. On efface les rgles prcdentes pour partir sur de bonnes bases : Code : Bash iptables -t filter -F iptables -t filter -X
3. On bloque par dfaut tout le trafic (si vous tes en ssh , bien entendu, nexcutez pas encore le script !) : Code : Bash iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP
4. On ne ferme pas les connexions dj tablies : Code : Bash iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Nous indiquons avec les paramtres -m et --state de ne pas fermer les connexions qui sont dj tablies.
www.siteduzero.com
5/15
Note : lo signifie localhost (le serveur lui-mme). Tout est bloqu, il ne nous reste plus qu ouvrir les ports utiliss.
Notez enfin que si vous voulez un change, il faut toujours ouvrir le port dans les deux sens (INPUT et OUTPUT)... logique. Exemple si lon a un serveur web (port 80) : Code : Bash iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
V ous pourriez me dire quil suffirait de ncrire quune seule fois la ligne sans prciser largument -A... mais suivant notre politique de prcision, ce serait une erreur car il existe dautres valeurs que INPUT et OUTPUT pour lesquelles nous ne voulons pas permettre le trafic (FORWARD par exemple).
Il ne vous reste qu spcifier toutes les rgles ncessaires. V oici un petit tableau pour vous aider (il sagit de donnes par dfaut) : service ssh port dcoute protocole 22 tcp tcp tcp tcp tcp
web/HTTP 80 FTP 20 et 21
www.siteduzero.com
6/15
Cas particulier du ping Le ping est bas sur un protocole particulier (ICMP) qui na pas de port prdfini. Mais il faut absolument autoriser le ping car cest la mthode la plus couramment utilise pour savoir si votre serveur est en vie. V oici donc les rgles : Code : Bash iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPT
Dmarrage du firewall
Enfin, nous allons lancer notre firewall : Code : Console chmod +x /etc/init.d/firewall /etc/init.d/firewall
Tester abondamment que tout se passe bien. V ous pouvez notamment utiliser lutilitaire nmap pour vrifier quil ny a pas plus de ports ouverts que voulu (cf partie 5). Il est important de charger ce script au dmarrage de la machine afin quun simple reboot ne vous laisse pas sans protection : Code : Console update-rc.d firewall defaults
Exemple de script
Ci-dessous, je vous montre un exemple de script basique autorisant le minimum vital pour un serveur web (HTTP, FTP, mail et rsolution de DNS). Je vous encourage lire des docs et des tutos plus complets si vous voulez aller plus loin dans le paramtrage de votre firewall . Secret (cliquez pour afficher) Code : Bash #!/bin/sh # Rinitialise les rgles sudo iptables -t filter -F sudo iptables -t filter -X # Bloque tout sudo iptables sudo iptables sudo iptables le -t -t -t trafic filter -P INPUT DROP filter -P FORWARD DROP filter -P OUTPUT DROP
# Autorise les connexions dj tablies et localhost sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
www.siteduzero.com
7/15
# HTTP sudo iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT sudo iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT # FTP sudo iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT sudo iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT # Mail SMTP iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT # Mail POP3 iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT # Mail IMAP iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT # NTP (horloge du serveur) sudo iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
Le flags TCP syn engendre des demandes de connexions, et le but de cette rgle est donc de les limiter une par seconde (champs limit ). Il est cependant dconseill de monter au-del de la seconde (sous peine de gner le contrle de flux et la rcupration derreur de TCP).
On peut faire de mme avec les protocoles UDP et ICMP : Code : Bash
www.siteduzero.com
8/15
Notez cependant que ce type dattaque permet de faire tomber le serveur, mais pas den prendre laccs. Cest pourquoi le risque den tre la cible est assez mince (sauf si lon sappelle Google). En gnral, un logiciel simple anti-intrusion comme fail2ban (cf partie 2) est suffisant, suivant le niveau de scurit recherch.
Scan de ports
On peut aussi limiter un tant soit peu le scan de ports (qui consiste tester tous vos ports afin de dtecter ceux qui sont ouverts). Pour cela, une rgle de ce genre irait : Code : Bash iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
Cest un peu le mme principe que ci-dessus. Sachant quune connexion TCP en bon et due forme requiert trois paquets avec trois flags diffrents, on voit tout de suite la finesse de cette rgle qui peut travailler paquet par paquet. Pour plus dinfos sur les flags TCP, cf Wikipdia. Notez que cette rgle basique nest pas trs efficace, cest une protection de base. La partie 2 ira plus loin dans le blocage des scans de ports.
Bannir une IP
Si vous reprez dans les logs ou autre une adresse IP suspecte, vous pouvez la bannir aisment au niveau du firewall via la commande : Code : Console iptables -A INPUT -s adresse_ip -j DROP
Notez cependant quil nest pas conseill de bannir les IP tour de bras.
www.siteduzero.com
9/15
Commentez les lignes KILL_HOSTS_DENY . Dcommentez la ligne KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP" . Ainsi, Portsentry ajoutera une rgle dans le firewall (iptables) pour rejeter les paquets en cas de scans. On dmarre le logiciel (il faut le lancer deux fois, pour TCP et UDP) : Code : Console portsentry audp portsentry atcp
V ous pouvez tester tout a avec nmap (si vous voulez tester en local, il vous faut modifier le fichier portsentry.ignore en enlevant le localhost ). Si vous souhaitez que vos rglages restent mme aprs un nouveau lancement de portsentry, vous devrez modifier le fichier portsentry.ignore.static
www.siteduzero.com
10/15
Je vous encourage remplir le champ ci-dessous : - destmail : indiquez une adresse mail si vous voulez recevoir des mails dalerte de la part de fail2ban . Le niveau de protection peut tre modul via les champs suivants (notez que la configuration par dfaut suffit normalement) : - bantime : temps de bannissement des IP suspectes ; - maxretry : nombre de tentatives de connexion permise avant bannissement. Notez que dans la partie JAILS (dans nano : ctrl w => rechercher JAILS) figure tous les services que fail2ban surveillera. Si vous avez modifi les ports par dfaut, il faut les indiquer l aussi. Par exemple avec ssh : Code : Console nano /etc/fail2ban/jail.conf ctrl+w => chercher [ssh] port : indiquer le port
Enregistrez et quittez. Je vous encourage parcourir rapidement le reste des options afin de personnaliser un peu votre soft. Enfin, pour recharger la nouvelle configuration : Code : Console /etc/init.d/fail2ban restart
www.siteduzero.com
11/15
- REPORT_EMAIL : indiquez un mail pour recevoir des alertes de Rkhunter ; - CRON_DAILY_RUN : mettez yes pour une vrification quotidienne de votre machine via un cron . Notez que Rkhunter se trompe parfois en dclarant comme infects des fichiers sains ( faux positifs ), donc il faut tre critique lgard des rapports. Par contre, sil savre que lalerte est justifie, cela signifie que vous avez un rootkit ainsi quune faille de scurit qui a t dcouverte et exploite. Mfiance donc !
Logwatch
Il est aussi possible dutiliser des utilitaires qui vous simplifient un peu ce travail de lecture des logs. Logwatch notamment permet de rsumer plusieurs logs afin de ne vous retourner que des anomalies si possible. Cela vite un long et fastidieux travail de recherche. Installation : Code : Console apt-get install logwatch nano /usr/share/logwatch/default.conf/logwatch.conf
Spcifiez loption MailTo car logwatch envoie ses rsums de logs par mail. Il va normalement sexcuter tous les jours (ls -l /etc/cron.daily/ | grep logwatch pour sen assurer). Il peut aussi tre intressant de suivre ltat du rseau et du systme (monitoring) afin de dtecter par exemple une brusque monte en charge, synonyme de problmes. Mais comme il est dlicat de ragir vite, je vous laisse vous renseigner de vous-mmes.
www.siteduzero.com
12/15
SSH
En premier lieu, il faut regarder du ct de ssh , puisque cest tout de mme un accs direct votre machine. Pour ce faire... Code : Console nano /etc/ssh/sshd_config
... et il est conseill de changer les champs suivants : - Port : le port par dfaut est 22... et nimporte quel attaquant le sait. Changer le port force effectuer un scan (ou quivalent) avant de rflchir attaquer (attention de bien changer le port dans le firewall ) ; - PermitRootLogin : mettre no afin dinterdire le login en root ; - AllowUsers : indique une liste dutilisateur autoris se connecter via ssh . Cela peut tre utile si vous avez des utilisateurs qui ne sont pas censs se connecter sur la machine. Et on redmarre : Code : Console /etc/init.d/ssh restart
Apache
Apache - le serveur web le plus courant - donne par dfaut de nombreuses informations quiconque sy connecte. Vu que cela ne sert rien que votre serveur web donne au monde votre distribution Linux, autant limiter cela : Code : Console nano /etc/apache2/apache2.conf
Passez ServerSignature off et ServerTokens Prod pour rendre votre serveur web plus discret. Code : Console /etc/init.d/apache2 restart
Autres
Pour la plupart des logiciels de base, il existe quelques recommandations de prudence. V oici une liste non exhaustive : service mysql FTP Mail conseil interdire les accs sans mot de passe (on peut excuter lutilitaire /usr/bin/mysql_secure_installation fourni avec mysql-server) ne surtout pas crer de FTP anonymes utiliser un anti-spam (spamassassin par exemple) et - si possible - utiliser les connexions scurises (SSL ou TLS) offertes par tout serveur de mail qui se respecte
www.siteduzero.com
13/15
Scanner de port
nmap est le meilleur outil de scan de ports : il va tenter douvrir des connexions sur un grand nombre de ports de votre machine afin de dterminer sils sont ouverts ou non. Code : Console apt-get install nmap
Comme cest notre serveur, le mieux est deffectuer le scan le plus incisif (et par consquent, le moins discret) possible : Code : Console nmap -v ip_ou_nom_de_la_machine
V ous aurez alors la liste des ports ouverts. V ous pouvez aussi tester un port en particulier avec largument -p port . Il nest pas recommand dutiliser nmap sur quiconque autre que vous-mmes Si vous avez pris des mesures pour bloquer (au mieux) le scan de port, il est conseill dans un premier temps de les dsactiver le temps du scan (car un port ouvert sans que vous le sachiez est une faille), et dans un second temps de jouer avec nmap pour voir si vos rgles sont efficaces ou pas (par exemple avec les options -sS , -sN ou -sI , cf le manuel).
Scanner de vulnrabilit
L, le but est de chercher en gnral les failles de votre machine. Et il convient de les rgler toutes si possible, car lattaquant peut les trouver aussi bien que vous. Pour cela, Nessus est un des utilitaires les plus performants. Comme le logiciel est propritaire et quil sutilise via une interface graphique, je vous laisse suivre un tuto dtaill dessus, par exemple : http://doc.ubuntu-fr.org/nessus http://www.linux-pour-lesnuls.com/nessus.php
Q.C.M.
Le premier QCM de ce cours vous est offert en libre accs. Pour accder aux suivants Connectez-vous Inscrivez-vous Quel est le rle du firewall ?
Fermer les ports inutiliss Rendre le scan de port inutile Filtrer les paquets autoriss ou non du rseau Empcher toutes les intrusions
Que fait cette rgle du firewall : Code : Bash iptables -t filter -p tcp --dport 2222 -j ACCEPT
www.siteduzero.com
14/15
En cas de prsence dun rootkit sur le serveur, quelle proposition ci-dessous est fausse ?
Il existe une faille de scurit dans la configuration du serveur Lattaquant a pu utiliser la machine mauvais escient Lattaquant bnficie dun accs direct la machine Un audit approfondi des logs et de lensemble du serveur est requis
Correction !
Statistiques de rponses au Q CM
La scurit informatique est un vaste domaine dont j'espre vous avoir donn un bon aperu travers ces exemples d'applications. Cependant, il existe de bien nombreux autres systme de dfense et si la scurisation outrance est inutile, la connaissance outrance ne l'est srement pas ! Quelques liens intressants donc : http://www.linux-france.org/prj/inetdo [...] ite/tutoriel/ http://securite.developpez.com/cours/ Et bien d'autres sur Google.
Partager
www.siteduzero.com