<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mydoom666 &#187; firewall</title>
	<atom:link href="http://www.mydoom666.com/tag/firewall/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mydoom666.com</link>
	<description>The best place is 127.0.0.1</description>
	<lastBuildDate>Fri, 23 Apr 2010 20:18:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Sécurisation du serveur</title>
		<link>http://www.mydoom666.com/2009/12/securisation-du-serveur/</link>
		<comments>http://www.mydoom666.com/2009/12/securisation-du-serveur/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 12:12:34 +0000</pubDate>
		<dc:creator>Mydoom666</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[fail2ban]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[netfilter]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.mydoom666.com/?p=23</guid>
		<description><![CDATA[Maintenant que nous avons un accès SSH au serveur, la première chose à faire est de sécuriser celui-ci. Il est fortement recommandé de s&#8217;en occuper le plus vite possible. Entendons-nous bien, un serveur non sécurisé équivaut à partir en vacances sans verrouiller votre porte d&#8217;entrée&#8230; Dans ce billet nous allons : changer le mot de [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-33" title="Tux-Gendarme" src="http://www.mydoom666.com/blog/wp-content/uploads/2009/12/tux-gendarme-150x150.png" alt="" width="150" height="150" />Maintenant que nous avons un <a href="http://www.mydoom666.com/2009/12/se-connecter-a-un-serveur-via-ssh/">accès SSH au serveur</a>, la première chose à faire est de sécuriser celui-ci. Il est fortement recommandé de s&#8217;en occuper le plus vite possible. Entendons-nous bien, un serveur non sécurisé équivaut à partir en vacances sans verrouiller votre porte d&#8217;entrée&#8230;</p>
<p>Dans ce billet nous allons : changer le mot de passe du compte root, créer un compte utilisateur, changer le port SSH par défaut, interdire la connexion du compte root via SSH, configurer le firewall Netfilter via Iptables, mettre en place Fail2ban.</p>
<p><span id="more-23"></span></p>
<p><br clear="none" /></p>
<h2>Mot de passe Root</h2>
<p>La première chose à faire est de modifier le mot passe du compte <a href="http://fr.wikipedia.org/wiki/Utilisateur_root">utilisateur Root</a> qui a été attribué par défaut. Veiller à ce que le mot de passe employé pour ce compte soit complexe (au moins 8 caractères mêlant lettres et chiffres) et surtout différent des autres mots de passe. Pour cela :</p>

<div class="wp-terminal">root@serveur:$ passwd root<br/></div>

<p><br clear="none" /></p>
<h2>Création d&#8217;un compte utilisateur</h2>
<p>Sur un serveur, on ne travail jamais sous le compte root, sauf lorsque c&#8217;est nécessaire (problème de permissions) ! Celui-ci servant uniquement à la maintenance. Pour l&#8217;exemple j&#8217;utiliserais le nom d&#8217;utilisateur &laquo;&nbsp;miku&nbsp;&raquo;</p>

<div class="wp-terminal">root@serveur:$ adduser miku<br/>Ajout de l'utilisateur « miku »...<br/>Ajout du nouveau groupe « miku » (1001)...<br/>Ajout du nouvel utilisateur « miku » (1001) avec le groupe « miku »...<br/>Création du répertoire personnel « /home/miku »...<br/>Copie des fichiers depuis « /etc/skel »...<br/>Entrez le nouveau mot de passe UNIX :<br/>Retapez le nouveau mot de passe UNIX :<br/>passwd : le mot de passe a été mis à jour avec succès<br/>Modification des informations relatives à l'utilisateur miku<br/>Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée<br/>Nom complet []: Miku<br/>N° de bureau []:<br/>Téléphone professionnel []:<br/>Téléphone personnel []:<br/>Autre []:<br/>Ces informations sont-elles correctes ? [O/n] o<br/></div>

<p>Dorénavant on se connecte uniquement sur ce compte.<br />
Si besoin de passer en root :</p>

<div class="wp-terminal">miku@serveur:$ su - root<br/>Password:<br/>root@serveur:~# echo "Je suis en root ! Et maintenant je me déconnecte..."<br/>Je suis en root ! Et maintenant je me déconnecte...<br/>root@serveur:~# exit<br/>exit<br/>miku@serveur:~$ echo "Je suis revenu sous le compte miku"<br/>Je suis revenu sous le compte miku<br/>miku@serveur:~$<br/></div>

<p><br clear="none" /></p>
<h2>Configuration SSH</h2>
<p>Afin d&#8217;éviter les <a href="http://fr.wikipedia.org/wiki/Attaque_par_force_brute">brutes forces</a> et autres tentatives de connexions sur le serveur, il est recommandé de changer le port par défaut (22) et d&#8217;interdire la connexion du compte root. Pour cela, éditer le fichier de configuration avec <strong>Vim</strong> (<a href="http://www.linux-france.org/article/appli/vi/vim/">comment utiliser Vim ?</a>) ou tout autre éditeur de texte :</p>

<div class="wp-terminal">root@serveur:$ vi /etc/ssh/sshd_config<br/></div>


<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;"># Package generated configuration file
# See the sshd(8) manpage for details
&nbsp;
# What ports, IPs and protocols we listen for
Port 8008
&nbsp;
# Authentication:
LoginGraceTime 120
PermitRootLogin no</pre></div></div>

<p><strong>Attention !</strong> Il faut également veiller à ce que le port modifié (ici 8008) soit ouvert dans le pare-feu ou bien vous n&#8217;aurez plus accès au serveur.</p>
<p>On redémarre le service :</p>

<div class="wp-terminal">root@serveur:$ /etc/init.d/ssh restart<br/></div>

<p><br clear="none" /></p>
<h2>Firewall &#8211; Iptables / Netfilter</h2>
<p>Pense-bête des commandes (devant être tapées en root)</p>
<p>Réinitialiser la configuration :</p>

<div class="wp-terminal">root@serveur:$ iptables -t filter -F<br/>root@serveur:$ iptables -t filter -X<br/></div>

<p>Lister les règles actives :</p>

<div class="wp-terminal">root@serveur:$ iptables -v –L<br/></div>

<p>Permettre à une connexion déjà ouverte de recevoir du trafic :</p>

<div class="wp-terminal">root@serveur:$ iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br/>root@serveur:$ iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT<br/></div>

<p>Bannir l&#8217;adresse IP 10.14.20.26 :</p>

<div class="wp-terminal">root@serveur:$ iptables -t filter -A INPUT -s 10.14.20.26 -j DROP<br/></div>

<p>Ajouter une règle :</p>
<p>iptables -t filter -A <strong>INPUT</strong>/<strong>OUPUT</strong> -p <strong>PROTOCOLE</strong><strong> </strong> -i <strong>INTERFACE</strong> &#8211;dport <strong>XX</strong> -j <strong>ACCEPT</strong>/<strong>DROP</strong></p>
<p><strong>INPUT</strong> désignant une connexion entrante.<br />
<strong>OUTPUT</strong> désignant une connexion sortante.<br />
<strong>PROTOCOLE</strong> TCP, UDP, ICMP&#8230;<br />
<strong>INTERFACE</strong> représente l&#8217;interface réseau concernée : lo, eth0, eth1<br />
<strong>XX</strong> représente le numéro de port.<br />
<strong>ACCEPT</strong> autorise la connexion.<br />
<strong>DROP</strong> refuse la connexion.</p>
<p>Donc pour autoriser le trafic entrant sur le port 8008 de eth0 :</p>

<div class="wp-terminal">root@serveur:$ iptables -t filter -A INPUT -p tcp -i eth0 --dport 8008 -j ACCEPT<br/></div>

<p>Bloquer tout le trafic entrant/sortant :</p>

<div class="wp-terminal">root@serveur:$ iptables -t filter -P INPUT DROP<br/>root@serveur:$ iptables -t filter -P FORWARD DROP<br/>root@serveur:$ iptables -t filter -P OUTPUT DROP<br/></div>

<p>Autoriser loopback</p>

<div class="wp-terminal">root@serveur:$ iptables -t filter -A INPUT -i lo -j ACCEPT<br/>root@serveur:$ iptables -t filter -A OUTPUT -o lo -j ACCEPT<br/></div>

<p>Autoriser le protocole ICMP</p>

<div class="wp-terminal">root@serveur:$ iptables -t filter -A INPUT -p icmp -j ACCEPT<br/>root@serveur:$ iptables -t filter -A OUTPUT -p icmp -j ACCEPT<br/></div>

<p>Maintenant il va falloir procéder a la création d&#8217;un script servant à appliquer les règles au démarrage du serveur.</p>

<div class="wp-terminal">root@serveur:$ vi /etc/init.d/firewall<br/></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/sh 
iptables -t filter -F 
iptables -t filter -X 
&nbsp;
iptables -t filter -P INPUT DROP 
iptables -t filter -P FORWARD DROP 
iptables -t filter -P OUTPUT DROP 
&nbsp;
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -t filter -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
&nbsp;
#Loopback 
iptables -t filter -A INPUT -i lo -j ACCEPT 
iptables -t filter -A OUTPUT -o lo -j ACCEPT 
&nbsp;
#ICMP
iptables -t filter -A INPUT -p icmp -j ACCEPT 
iptables -t filter -A OUTPUT -p icmp -j ACCEPT 
&nbsp;
#SSH
iptables -t filter -A INPUT -p tcp --dport 8008 -j ACCEPT</pre></td></tr></table></div>

<p>Attention à ne pas bloquer le protocole ICMP, celui-ci servant aux systèmes de monitoring d&#8217;<a href="http://www.ovh.com/">OVH</a> (et probablement des autres hébergeurs)</p>
<p>Rendre le script exécutable :</p>

<div class="wp-terminal">root@serveur:$ chmod +x /etc/init.d/firewall<br/></div>

<p>Avant d&#8217;en faire un script de démarrage, il est impératif de vérifier le bon fonctionnement des règles ! Pour cela, exécuter le script en ligne de commande :</p>

<div class="wp-terminal">root@serveur:$ ./etc/init.d/firewall<br/></div>

<p>Et pour que le système l&#8217;exécute au démarrage :</p>

<div class="wp-terminal">root@serveur:$ vi /etc/rc.local<br/></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="shell" style="font-family:monospace;">#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will &quot;exit 0&quot; on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/etc/init.d/firewall
&nbsp;
exit 0</pre></td></tr></table></div>

<p>Terminé ! Le système chargera la configuration à chaque démarrage.</p>
<p>Je ne donnerais pas de script de configuration Iptables complet. Tout simplement parce qu&#8217;il en existe déjà un bon nombre mais aussi et surtout parce que j&#8217;estime que la configuration doit se faire au cas par cas, et qu&#8217;il ne sert à rien de prendre les règles du voisins.</p>
<p><br clear="none" /></p>
<h2>Fail2ban</h2>
<p>Fail2ban est un deamon qui s&#8217;occupe de lire les fichiers journaux (logs) tel que <em>/var/log/pwdfail</em> ou <em>/var/log/apache/error_log</em> et bannit les adresses IP qui ont obtenu un trop grand nombre d&#8217;échecs lors de l&#8217;authentification. Il met à jour les règles du pare-feu pour rejeter cette adresse IP pendant un certains laps de temps. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache.</p>
<p>Installation de Fail2ban (depôts universe)</p>

<div class="wp-terminal">root@serveur:$ aptitude install fail2ban<br/></div>

<p>Éditer le fichier de configuration :</p>

<div class="wp-terminal">root@serveur:$ vi /etc/fail2ban/jail.conf<br/></div>


<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">[DEFAULT]
&nbsp;
# &quot;ignoreip&quot; can be an IP address, a CIDR mask or a DNS host
ignoreip  = 127.0.0.1 #&lt;-- Adresse IP qui ne sera jamais bannie par Fail2ban.
bantime  = 3600 #&lt;-- temps du bannissement par défaut en secondes.
maxretry = 3 #&lt;-- nombre d'échecs par défaut avant le ban.
&nbsp;
[ssh]
&nbsp;
enabled = &lt;strong&gt;true&lt;/strong&gt;
port = ssh,sftp
filter = sshd
logpath = /var/log/auth.log
maxretry = 6 #&lt;-- nombre d'échecs d'authentification avant le ban.</pre></div></div>

<p>Redémarrer le service :</p>

<div class="wp-terminal">root@serveur:$ fail2ban-client reload<br/></div>

<p>Vous pouvez tester Fail2ban mais pensez à régler le bantime à 5-10min (300-600 secondes). Ca évitera de poiroter 1 heure&#8230;</p>
<p><br clear="none" /></p>
<div id="crp_related"><h4>Je vous recommande aussi la lecture des sujets suivants</h4><ul><li><a href="http://www.mydoom666.com/2009/12/se-connecter-a-un-serveur-via-ssh/" rel="bookmark" class="crp_title">Se connecter au serveur via SSH</a></li><li><a href="http://www.mydoom666.com/2010/04/fling-un-client-ftp-intelligent/" rel="bookmark" class="crp_title">Fling &#8211; Un client FTP intelligent</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.mydoom666.com/2009/12/securisation-du-serveur/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
