<?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>.: chiroux.com :. &#187; configuration</title>
	<atom:link href="http://www.chiroux.com/tag/configuration/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chiroux.com</link>
	<description></description>
	<lastBuildDate>Fri, 09 Oct 2009 21:47:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Installation d&#8217;un couple de serveurs dhcp et dns redondants</title>
		<link>http://www.chiroux.com/installation-dun-couple-de-serveurs-dhcp-et-dns-redondants/</link>
		<comments>http://www.chiroux.com/installation-dun-couple-de-serveurs-dhcp-et-dns-redondants/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 22:15:04 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Administration Système]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[dhcp]]></category>
		<category><![CDATA[jaunty]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[redondant]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.chiroux.com/?p=499</guid>
		<description><![CDATA[<p class="wp-caption-text">Networked - CC - auteur: http://www.flickr.com/photos/superkimbo/1727117782/</p>
Cette fois ci, on s&#8217;oriente plus du côté des petites entreprises qui ont rapidement besoin d&#8217;une gestion interne du réseau, simple, efficace et sécurisée.
Le but de cet article est donc de montrer pas à pas comment monter deux serveurs dhcp+dns qui se backupent l&#8217;un l&#8217;autre de manière transparente. Ces [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_528" class="wp-caption alignleft" style="width: 510px"><img src="http://www.chiroux.com/wp-content/uploads/2009/09/network_servers.jpg" alt="Networked - CC - auteur: http://www.flickr.com/photos/superkimbo/1727117782/" title="network_servers" width="400" height="266" class="size-full wp-image-528" /><p class="wp-caption-text">Networked - CC - auteur: http://www.flickr.com/photos/superkimbo/1727117782/</p></div><br />
Cette fois ci, on s&#8217;oriente plus du côté des petites entreprises qui ont rapidement besoin d&#8217;une gestion interne du réseau, simple, efficace et sécurisée.<br />
Le but de cet article est donc de montrer pas à pas comment monter deux serveurs dhcp+dns qui se backupent l&#8217;un l&#8217;autre de manière transparente. Ces deux serveurs seront les piliers du réseau naissant de la petite entreprise.</p>
<p>Pour l&#8217;installation de base, il suffit de suivre le <a href="http://www.chiroux.com/installation-dun-serveur-web-securise-sous-ubuntu-9-04server/">tuto d&#8217;installation d&#8217;un serveur ubuntu</a>, en s&#8217;arrêtant juste avant l&#8217;install de lighttpd qui n&#8217;est pas nécessaire ici (mais cela marche aussi avec bien sûr).<br />
<span id="more-499"></span><br />
Le tuto a l&#8217;air assez long mais il est relativement simple et rapide à mettre en oeuvre : en partant de deux serveurs vides, non installés, suivre les deux tutos d&#8217;install générique et celui ci de dhcp+dns, il suffit d&#8217;a peine 2H pour tout terminer et avoir ses serveurs fonctionnels.</p>
<p></p>
<span id="Table_des_matires"><h2>Table des matières</h2></span>
<p><div class='toc wptoc'>
<h2>Contents</h2>
<ol class='toc-odd level-1'>
	<li>
		<a href="#Table_des_matires">Table des matières</a>
	</li>
	<li>
		<a href="#Introduction">Introduction</a>
	</li>
	<li>
		<a href="#Installation_de_base_et_commune_aux_deux_serveurs">Installation de base et commune aux deux serveurs</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#Installation_des_paquets">Installation des paquets</a>
				<ol class='toc-odd level-3'>
					<li>
						<a href="#dhcp">dhcp</a>
					</li>
					<li>
						<a href="#dns">dns</a>
					</li>
				</ol>
			<li>
				<a href="#Prparation_du_firewall">Préparation du firewall</a>
			</li>
			<li>
				<a href="#prparation_du_dns_:_configuration_du_logging_en_mode_debug">préparation du dns : configuration du logging en mode debug</a>
			</li>
		</ol>
	<li>
		<a href="#sur_le_matre_ns1">sur le maître (ns1)</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#travaux_prparatoire_:_gnration_des_clefs_partages">travaux préparatoire : génération des clefs partagées</a>
				<ol class='toc-odd level-3'>
					<li>
						<a href="#rndc">rndc</a>
					</li>
					<li>
						<a href="#clef_pour_mise__jour_venant_du_dhcp">clef pour mise à jour venant du dhcp</a>
					</li>
				</ol>
			<li>
				<a href="#dhcp_1">dhcp</a>
			</li>
			<li>
				<a href="#dns_1">dns</a>
				<ol class='toc-odd level-3'>
					<li>
						<a href="#named.conf">named.conf</a>
					</li>
					<li>
						<a href="#named.conf.options">named.conf.options</a>
					</li>
					<li>
						<a href="#named.conf.local">named.conf.local</a>
					</li>
					<li>
						<a href="#les_fichiers_de_zones">les fichiers de zones</a>
					</li>
				</ol>
			<li>
				<a href="#redmarrage">redémarrage</a>
			</li>
		</ol>
	<li>
		<a href="#sur_lesclave_ns2">sur l'esclave (ns2)</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#dhcp_2">dhcp</a>
			</li>
			<li>
				<a href="#dns_2">dns</a>
				<ol class='toc-odd level-3'>
					<li>
						<a href="#named.conf_1">named.conf</a>
					</li>
					<li>
						<a href="#named.conf.options_1">named.conf.options</a>
					</li>
					<li>
						<a href="#named.conf.local_1">named.conf.local</a>
					</li>
				</ol>
			<li>
				<a href="#redmarrage_1">redémarrage</a>
			</li>
		</ol>
	<li>
		<a href="#Debugging">Debugging</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#analyser_les_logs">analyser les logs</a>
			</li>
			<li>
				<a href="#jai_beau_changer_mes_conf_dns_mon_problme_persiste">j'ai beau changer mes conf dns, mon problème persiste</a>
			</li>
</ol>
</ol>
</ol>
</div>
<div class='wptoc-end'>&nbsp;</div>
<span id="Introduction"><h2>Introduction</h2></span>
<ul>
<li>Nous allons utiliser, classiquement, les serveurs bind et dhcpd 3</li>
<li>L&#8217;installation s&#8217;effectue sur deux machines, que l&#8217;on nommera respectivement ns1 et ns2</li>
<li>Le domaine installé est volontairement local et sera appelé : monentreprise.local</li>
<li>Le réseau local sera la classe C :  192.168.1.0/24</li>
<li>et les machines ns1 et ns2 auront respectivement les ips : 192.168.1.10 et 192.168.1.11</li>
<li>la passerelle internet sera 192.168.1.1</li>
</ul>
<p>toutes ces valeurs sont des hypothèses et doivent être adaptées en fonction de votre config.</p>
<p>A la fin de l&#8217;installation, nous devrions avoir deux serveurs, un &#8216;maitre&#8217; dhcp et dns (ns1) et son &#8216;esclave&#8217; (ns2).<br />
Les baux dhcp délivrés par le maitre étant mis à jour automatiquement dans le dns, le tout répliqué automatiquement sur l&#8217;esclave.<br />
L&#8217;esclave prenant le relais automatiquement si le maître ne marche plus.</p>
<span id="Installation_de_base_et_commune_aux_deux_serveurs"><h2>Installation de base et commune aux deux serveurs</h2></span>
<p>Comme son nom l&#8217;indique, il faut donc executer ces lignes de façon identique sur chacun des deux serveurs.</p>
<span id="Installation_des_paquets"><h3>Installation des paquets</h3></span>
<span id="dhcp"><h4>dhcp</h4></span>
<pre class="brush: bash;">
sudo apt-get install dhcp3-server
</pre>
<p>on stoppe le serveur tant qu&#8217;il n&#8217;est pas configuré pour éviter de mettre la grouille sur le réseau :</p>
<pre class="brush: bash;">
sudo /etc/init.d/dhcp3-server stop
</pre>
<span id="dns"><h4>dns</h4></span>
<pre class="brush: bash;">
sudo apt-get install bind9
</pre>
<span id="Prparation_du_firewall"><h3>Préparation du firewall</h3></span>
<p>Dans le firewall, il est nécessaire d&#8217;ouvrir explicitement quelques ports pour :</p>
<ul>
<li>le dns</li>
<li>la mise a jour dynamique des dns suite aux baux délivrés par le dhcp</li>
<li>la synchronisation des dhcps entre eux
<li>
</ul>
<p>Editer le fichier du firewall :</p>
<pre class="brush: bash;">
sudo vim /etc/init.d/server_iptables
</pre>
<p>et ajouter les lignes suivantes :</p>
<pre class="brush: bash;">
# Autorise les requetes DNS
iptables -A INPUT -s 192.168.1.0/24 -p tcp -i eth0 --dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp -i eth0 --dport 53 -j ACCEPT
# Autorise les MAJ DDNS
iptables -A INPUT -s 192.168.1.0/24 -p tcp -i eth0 --dport 953 -j ACCEPT
# Autorise le failover dhcp
iptables -A INPUT -s 192.168.1.0/24 -p tcp -i eth0 --dport 647 -j ACCEPT
</pre>
<p>On remarque ici qu&#8217;on autorise ces ports uniquement depuis les adresses de notre réseau local. On pourrait encore durir les règles en autorisant les maj ddns et les synchros dhcp uniquement depuis nos deux serveurs.</p>
<p>Relancer les règles du Firewall:</p>
<pre class="brush: bash;">
sudo /etc/init.d/server_iptables
</pre>
<span id="prparation_du_dns_:_configuration_du_logging_en_mode_debug"><h3>préparation du dns : configuration du logging en mode debug</h3></span>
<pre class="brush: bash;">
sudo vim /etc/bind/named.conf.debug.log
</pre>
<pre class="brush: bash;">
logging {
  category &quot;default&quot; { &quot;debug&quot;; };
  category &quot;general&quot; { &quot;debug&quot;; };
  category &quot;database&quot; { &quot;debug&quot;; };
  category &quot;security&quot; { &quot;debug&quot;; };
  category &quot;config&quot; { &quot;debug&quot;; };
  category &quot;resolver&quot; { &quot;warning&quot;; };
  category &quot;xfer-in&quot; { &quot;debug&quot;; };
  category &quot;xfer-out&quot; { &quot;debug&quot;; };
  category &quot;notify&quot; { &quot;debug&quot;; };
  category &quot;client&quot; { &quot;debug&quot;; };
  category &quot;unmatched&quot; { &quot;debug&quot;; };
  category &quot;network&quot; { &quot;debug&quot;; };
  category &quot;update&quot; { &quot;debug&quot;; };
  category &quot;queries&quot; { &quot;warning&quot;; };
  category &quot;dispatch&quot; { &quot;debug&quot;; };
  category &quot;dnssec&quot; { &quot;debug&quot;; };
  category &quot;lame-servers&quot; { &quot;debug&quot;; };

  channel &quot;debug&quot; {
    file &quot;/var/log/bind9/nameddbg&quot; versions 2 size 50m;
    print-time yes;
    print-category yes;
    print-severity yes;
  };

  channel &quot;warning&quot; {
    file &quot;/var/log/bind9/nameddbg&quot; versions 2 size 50m;
    severity warning;
    print-time yes;
    print-category yes;
    print-severity yes;
  };
};
</pre>
<p>Cette conf est très verbose, il sera peut-être nécessaire de la réduire une fois l&#8217;installation achevée et fonctionnelle.</p>
<p>Par défault, le répertoire /var/log/bind9 n&#8217;existe pas et est bloqué par apparmor, il faut donc le créer et l&#8217;autoriser :</p>
<pre class="brush: bash;">
sudo mkdir /var/log/bind9
sudo chown bind:bind /var/log/bind9
</pre>
<p>Configurer apparmor pour autoriser l&#8217;écriture dans le repertoire du log: </p>
<pre class="brush: bash;">
sudo vim /etc/apparmor.d/usr.sbin.named
</pre>
<p>et ajouter à la fin (dans la zone sur les logs): </p>
<pre class="brush: bash;">
/var/log/bind9/** rw,
   /var/log/bind9/ rw,
</pre>
<p>redémarrer apparmor (on relancera bind à la fin de la config)</p>
<pre class="brush: bash;">
sudo /etc/init.d/apparmor restart
</pre>
<span id="sur_le_matre_ns1"><h2>sur le maître (ns1)</h2></span>
<span id="travaux_prparatoire_:_gnration_des_clefs_partages"><h3>travaux préparatoire : génération des clefs partagées</h3></span>
<p>des clefs seront nécessaires pour la mise à jour du dns par le dhcp, ainsi que pour la configuration rndc (rndc est un outil de configuration pour bind, optionnel, mais bind aime bien qu&#8217;il soit là). On va donc aussi configurer rndc sur le maitre.</p>
<span id="rndc"><h4>rndc</h4></span>
<pre class="brush: bash;">
cd /etc/bind
sudo dnssec-keygen -a hmac-md5 -b 256 -n HOST ns1
</pre>
<p>ce programme va générer deux fichier nommés Kns1.xxxxxxxx.key et Kns1.xxxxxxxx.private<br />
le fichier .key va devenir notre clef rndc :</p>
<pre class="brush: bash;">
sudo mv Kns1.xxxxxxxxx.key rndc.key
</pre>
<p>(remplacer les xxxxxxxx par le bon nom)</p>
<p>ensuite afficher le contenu du fichier private :</p>
<pre class="brush: bash;">
sudo cat Kns1.xxxxxxxxx.private
</pre>
<p>et copier le texte après &#8216;Key:&#8217;<br />
ensuite créer le fichier de conf rndc :</p>
<pre class="brush: bash;">
sudo vim /etc/bind/rndc.conf
</pre>
<p>et coller les éléments suivants:</p>
<pre class="brush: bash;">
key rdnc-key {
  algorithm hmac-md5;
  secret &quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;;
};

options {
  // what host should rndc attempt to control by default
  default-server 127.0.0.1;
  // and what key should it use to communicate with named
  default-key &quot;rdnc-key&quot;;
};

server 127.0.0.1 {
  // always use this key with this host
  key &quot;rdnc-key&quot;;
};
</pre>
<p>et remplacer les XXXXX du secret par ce qu&#8217;on a copié après &#8216;Key:&#8217; du fichier Kns1.xxxxxxxxx.private</p>
<p>on peut maintenant effacer le fichier .private :</p>
<pre class="brush: bash;">
sudo rm Kns1.xxxxxxxxx.private
</pre>
<span id="clef_pour_mise__jour_venant_du_dhcp"><h4>clef pour mise à jour venant du dhcp</h4></span>
<pre class="brush: bash;">
cd /etc/bind
sudo dnssec-keygen -a hmac-md5 -b 128 -n USER dhcpupdate
</pre>
<p>Dans le fichier .key genéré, copier la clef : La clef est la dernière chaine de caractère du fichier .key, par exemple ici : dhcpupdate. IN KEY 0 3 157 Zihefb3NqqepA/5RgzbicM==<br />
la clef est : Zihefb3NqqepA/5RgzbicM==</p>
<p>avec cette clef, on a généré des directives de configuration pour le dhcp et pour le dns, elles auront l&#8217;aspect suivant :<br />
pour le dns :</p>
<pre class="brush: bash;">
key dhcpupdate {
  algorithm hmac-md5;
  secret &quot;ICICOLLERLACLEFSECRETEGENEREE&quot;;
};
</pre>
<p>pour le dhcp (pareil que pour le dns, mais sans les guillemets) :</p>
<pre class="brush: bash;">
key dhcpupdate {
  algorithm hmac-md5;
  secret ICICOLLERLACLEFSECRETEGENEREE;
};
</pre>
<span id="dhcp_1"><h3>dhcp</h3></span>
<pre class="brush: bash;">
sudo vim /etc/dhcp3/dhcpd.conf
</pre>
<p>et mettre le fichier de conf suivant :</p>
<pre class="brush: bash;">
#
# Sample dhcpd.conf file
#

# ======== Mise a jour DDNS ========
ddns-domainname &quot;monentreprise.local&quot;;
ddns-rev-domainname &quot;1.168.192.in-addr.arpa&quot;;
#Mehode de mise a  jour du DNS
ddns-update-style interim;
#Mise a  jour autorisee
ddns-updates on;
#ici on force la maj par le dhcp et non par le client
ignore client-updates;
#on force la maj des ipfixes
update-static-leases on;
# Clef partagee dhcpd et bind9
key dhcpupdate {
    algorithm hmac-md5;
    secret ICICOLLERLACLEFSECRETEGENEREE;
};

# ======== Option Generales du dhcp ========

# Server name
server-name &quot;dhcp.monentreprise.local&quot;;

# option definitions common to all supported networks...
option domain-name &quot;monentreprise.local&quot;;
option domain-name-servers 192.168.1.10, 192.168.1.11;

default-lease-time 3600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 192.168.1.0 netmask 255.255.255.0 {
}

#Zones
zone 1.168.192.in-addr.arpa. {
  primary 127.0.0.1;
  key dhcpupdate;
}

zone linkcareservices.local. {
  primary 127.0.0.1;
  key dhcpupdate;
}

# ======== Failover configuration ========
failover peer &quot;dhcp-failover&quot; {
  primary; # declare this to be the primary server
  address 192.168.1.10;
  port 647;
  peer address 192.168.1.11;
  peer port 647;
  max-response-delay 30;
  max-unacked-updates 10;
  load balance max seconds 3;
  mclt 1800;
  split 128;
}

# ======== Reseaux ========
## déclaration sous réseau 192.168.1.*
subnet 192.168.1.0 netmask 255.255.255.0 {
  # Si vous voulez spécifier un domaine différent de celui par défaut :
  #option domain-name &quot;mon_domaine.qqc&quot;;
  ## Adresse de diffusion
  option broadcast-address 192.168.1.255;
  ## routeur par défaut
  option routers 192.168.1.1;
        ## Plage d'attribution d'adresse
        ## Ici on ouvre pour l'instant une 'petite' plage entre .50 et .99, c'est un exemple, on peut mettre plus.
  pool {
    failover peer &quot;dhcp-failover&quot;;
    range 192.168.1.50 192.168.1.99;
  }
  # évalue si l'adresse est déjà attribuée
  ping-check = 1;
}

host ns1 {
  hardware ethernet 00:00:00:00:00:00;
  fixed-address 192.168.1.10;
}

host ns2 {
  hardware ethernet 00:00:00:00:00:00;
  fixed-address 192.168.1.11;
}
</pre>
<p>Pour que le fichier de configuration soit complet, il faudra remplacer les ICICOLLERLACLEFSECRETEGENEREE de la clef par la clef générée précedemment.<br />
Il y a également deux baux statiques dans le fichier de configuration pour nos serveurs ns1 et ns2, il faut remplacer les 00:00&#8230; des adresses MAC par les vraies adresses mac de vos machines.</p>
<span id="dns_1"><h3>dns</h3></span>
<span id="named.conf"><h4>named.conf</h4></span>
<p>ce fichier représente la configuration principale du dns, on va juste ajouter quelques directives en début de fichier :</p>
<pre class="brush: bash;">
sudo vim /etc/bind/named.conf
</pre>
<p>et ajouter en début de fichier les éléments suivants:</p>
<pre class="brush: bash;">
acl internals { 127.0.0.0/8; 192.168.1.0/24; };

controls {
  inet 127.0.0.1 allow { 127.0.0.1; localhost; } keys { &quot;rdnc-key&quot;; };
};

key rdnc-key {
  algorithm hmac-md5;
  secret &quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;;
};

key dhcpupdate {
  algorithm hmac-md5;
  secret &quot;ICICOLLERLACLEFSECRETEGENEREE&quot;;
};
</pre>
<p>en remplaçant XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX par la clef rndc générée précedemment, et en remplaçant ICICOLLERLACLEFSECRETEGENEREE par la clef dhcpupdate générée plus haut.</p>
<span id="named.conf.options"><h4>named.conf.options</h4></span>
<pre class="brush: bash;">
sudo vim /etc/bind/named.conf.options
</pre>
<p>Comme on est en train de construire des serveurs pour un petit réseau interne, nous n&#8217;avons pas besoin que les dns résolvent tout internet, on va donc les configurer pour faire relais vers d&#8217;autre dns. L&#8217;avantage, c&#8217;est qu&#8217;on peut choisir ceux qu&#8217;on veut, et pas obligatoirement ceux de son ISP, même si au final il est quand même préférable d&#8217;en choisir des pas trop loin et si possible performants. Les DNS des ISP répondent souvent à ces problématiques.<br />
Vous pouvez aussi mettre simplement le dns de votre routeur/box en relais, nos dns internes servant au final à gérer les zones internes.</p>
<p>Le fichier complet ressemble donc à ceci :</p>
<pre class="brush: bash;">
options {
        directory &quot;/var/lib/bind&quot;;

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };
  forwarders {
    aa.bb.cc.dd;
    ee.ff.gg.hh;
    192.168.1.1;
  };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { none; };
  listen-on { 127.0.0.1; 192.168.1.10; 192.168.1.11; };

  // transférer les informations de zones aux DNS secondaires
  allow-transfer { 192.168.1.11; };

  // Accepter les requêtes pour le réseau interne uniquement
  allow-query { internals; };

  // Autoriser les requêtes récursives pour les hôtes locaux
  allow-recursion { internals; };

  // Ne pas rendre publique la version de BIND
  version none; 

};
</pre>
<p>dans la zone &#8216;forwarders&#8217;, vous pouvez donc remplacer les ips aa.bb.cc.dd et ee.ff.gg.hh par deux dns publics ou ceux de votre isp, ou vous pouvez enlever les lignes pour ne garder que le dns du routeur.<br />
Dans cette config, on autorise le transfert des infos de DNS vers notre futur secondaire.</p>
<p>Il y a un autre élément important dans ce fichier de config : le répertoire par défaut de travail de bind qui doit être /var/lib/bind : sous ubuntu 9.04, par défaut, seul ce répertoire autorise bind à écrire dans le fichier et c&#8217;est nécessaire pour la maj ddns venant du dhcp.</p>
<span id="named.conf.local"><h4>named.conf.local</h4></span>
<pre class="brush: bash;">
sudo vim /etc/bind/named.conf.local
</pre>
<p>insérer les zones et les reverses :</p>
<pre class="brush: bash;">
///
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include &quot;/etc/bind/zones.rfc1918&quot;;

include &quot;/etc/bind/named.conf.debug.log&quot;; 

zone &quot;monentreprise.local&quot; {
    type master;
    notify yes;
    allow-transfer { 192.168.1.11; } ;
    file &quot;monentreprise.local.hosts&quot;;
};

zone &quot;1.168.192.in-addr.arpa&quot; {
    type master;
    notify yes;
    allow-transfer { 192.168.1.11; } ;
    file &quot;1.168.192.in-addr.arpa.zone&quot;;
};
</pre>
<p>Cette config indique que ce dns est &#8216;master&#8217; pour les deux zones et qu&#8217;il notifie et transfère les infos de zones vers le secondaire.<br />
De plus, il pointe sur une configuration de debug particulière qui est utile pour l&#8217;analyse des problème de la configuration et que l&#8217;on a paramétré précédemment.</p>
<span id="les_fichiers_de_zones"><h4>les fichiers de zones</h4></span>
<p>Il faut maintenant créer les fichier de la zone et du reverse. On va les créer dans /etc/bind, puis les lier dans /var/lib/bind/ où va vraiment aller les chercher bind, suite à notre config dans options. </p>
<pre class="brush: bash;">
sudo vim /etc/bind/monentreprise.local.hosts
</pre>
<p>et mettre les infos suivantes (c&#8217;est un exemple, mais qui est paramétré avec deux serveurs DNS pour préparer la conf/maitre-esclave) </p>
<pre class="brush: bash;">
@      IN     SOA     ns1.monentreprise.local. email.monentreprise.com. (
            20092909003 ; serial
            600 ; refresh after 10 minutes (for testing purpose)
            3600 ; retry after 1 hour
            604800 ; expires after 1 week
            86400 ) ; minimum TTL of 1 day
@     IN     NS     ns1.monentreprise.local.
@     IN     NS     ns2.monentreprise.local.
gw          IN  A       192.168.1.1
ns1         IN  A       192.168.1.10
ns2         IN  A       192.168.1.11
dhcp        IN  CNAME   ns1
dhcp2         IN  CNAME   ns2
</pre>
<p>Dans la premiere ligne, il faut indiquer un email après le serveur (ne pas oublier les &#8216;.&#8217; à la fin). bizarrement, l&#8217;email est de la forme email.domaine.suffixe. alors que cela veut dire email@domaine.suffixe</p>
<p>faire de même avec le reverse: </p>
<pre class="brush: bash;">
sudo vim /etc/bind/1.168.192.in-addr.arpa.zone
</pre>
<pre class="brush: bash;">
@       IN    SOA     ns1.monentreprise.local. email.monentreprise.com. (
            20090929002 ; serial
            600 ; refresh after 10 minutes (for testing purpose)
            3600 ; retry after 1 hour
            604800 ; expires after 1 week
            86400 ) ; minimum TTL of 1 day
@       IN     NS     ns1.monentreprise.local.
@       IN     NS     ns2.monentreprise.local.
1       IN     PTR    gw.monentreprise.local.
10     IN     PTR    ns1.monentreprise.local.
11     IN     PTR    ns2.monentreprise.local.
</pre>
<p>Pour ces deux fichiers, si vous les modifiez à la main, il est important de faire évoluer le sérial à chaque modification. Sinon le DNS principal n&#8217;ira pas notifier le secondaire.</p>
<p>maintenant on va faire en sorte que ces fichiers soient dispos dans /var/lib/bind et modifiables par bind: </p>
<pre class="brush: bash;">
sudo chown bind:bind /etc/bind/monentreprise.local.hosts
sudo chown bind:bind /etc/bind/1.168.192.in-addr.arpa.zone
sudo ln -s /etc/bind/monentreprise.local.hosts  /var/lib/bind/monentreprise.local.hosts
sudo ln -s /etc/bind/1.168.192.in-addr.arpa.zone  /var/lib/bind/1.168.192.in-addr.arpa.zone
</pre>
<span id="redmarrage"><h3>redémarrage</h3></span>
<p>on peut enfin redémarrer bind et démarrer le dhcp</p>
<pre class="brush: bash;">
sudo /etc/init.d/bind9 restart
sudo /etc/init.d/dhcp3-server start
</pre>
<p><b>Attention :</b> il ne faut pas oublier de désactiver le ou les précédents serveurs dhcp sur le réseau (celui du routeur/de la box par exemple).</p>
<span id="sur_l8217esclave_ns2"><h2>sur l&#8217;esclave (ns2)</h2></span>
<p>La conf sur l&#8217;esclave est plus simple car il n&#8217;y a pas de système de maj ddns et les fichiers de zones dns sur récupérées automatiquement du maitre.</p>
<span id="dhcp_2"><h3>dhcp</h3></span>
<pre class="brush: bash;">
sudo vim /etc/dhcp3/dhcpd.conf
</pre>
<p>et mettre la conf suivante :</p>
<pre class="brush: bash;">
#
# Sample dhcpd.conf file
#

# ======== Mise a jour DDNS ========
ddns-update-style none;

# ======== Option Generales du dhcp ========
# Server name
server-name &quot;dhcp2.monentreprise.local&quot;;

# option definitions common to all supported networks...
option domain-name &quot;monentreprise.local&quot;;
option domain-name-servers 192.168.1.10, 192.168.1.11;

default-lease-time 3600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 192.168.1.0 netmask 255.255.255.0 {
}

# ======== Failover configuration ========
failover peer &quot;dhcp-failover&quot; {
  secondary; # declare this to be the secondary server
  address 192.168.1.11;
  port 647;
  peer address 192.168.1.10;
  peer port 647;
  max-response-delay 30;
  max-unacked-updates 10;
  load balance max seconds 3;
}

# ======== Reseaux ========
## déclaration sous réseau 192.168.1.*
subnet 192.168.1.0 netmask 255.255.255.0 {
  # Si vous voulez spécifier un domaine différent de celui par défaut :
  #option domain-name &quot;mon_domaine.qqc&quot;;
  ## Adresse de diffusion
  option broadcast-address 192.168.1.255;
  ## routeur par défaut
  option routers 192.168.1.1;
        ## Plage d'attribution d'adresse
        # Ici on ouvre pour l'instant une 'petite' plage entre .50 et .99, c'est un exemple, on peut mettre plus.
  pool {
    failover peer &quot;dhcp-failover&quot;;
    range 192.168.1.50 192.168.1.99;
  }
  # évalue si l'adresse est déjà attribuée
  ping-check = 1;
}

host ns1 {
  hardware ethernet 00:00:00:00:00:00;
  fixed-address 192.168.1.10;
}

host ns2 {
  hardware ethernet 00:00:00:00:00:00;
  fixed-address 192.168.1.11;
}
</pre>
<p>Comme pour le dhcp maître, il y a deux baux statiques dans le fichier de configuration pour nos serveurs ns1 et ns2, il faut remplacer les 00:00… des adresses MAC par les vraies adresses mac de vos machines.</p>
<span id="dns_2"><h3>dns</h3></span>
<span id="named.conf_1"><h4>named.conf</h4></span>
<pre class="brush: bash;">
sudo vim /etc/bind/named.conf
</pre>
<p>ajouter juste, en début de fichier, l&#8217;acl internals :</p>
<pre class="brush: bash;">
acl internals { 127.0.0.0/8; 192.168.1.0/24; };
</pre>
<span id="named.conf.options_1"><h4>named.conf.options</h4></span>
<pre class="brush: bash;">
sudo vim /etc/bind/named.conf.options
</pre>
<p>Ce fichier est très proche de celui du maitre, sauf qu&#8217;il n&#8217;a plus la directive &#8216;allow-transfer&#8217;:</p>
<pre class="brush: bash;">
options {
        directory &quot;/var/lib/bind&quot;;

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };
  forwarders {
    aa.bb.cc.dd;
    ee.ff.gg.hh;
    192.168.1.1;
  };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { none; };
  listen-on { 127.0.0.1; 192.168.1.10; 192.168.1.11; };

  // transférer les informations de zones aux DNS secondaires
  allow-transfer { 192.168.1.11; };

  // Accepter les requêtes pour le réseau interne uniquement
  allow-query { internals; };

  // Autoriser les requêtes récursives pour les hôtes locaux
  allow-recursion { internals; };

  // Ne pas rendre publique la version de BIND
  version none; 

};
</pre>
<span id="named.conf.local_1"><h4>named.conf.local</h4></span>
<pre class="brush: bash;">
sudo vim /etc/bind/named.conf.local
</pre>
<p>Ici la conf est sensiblement différente, car on précise que les zones sont &#8216;esclaves&#8217; :</p>
<pre class="brush: bash;">
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include &quot;/etc/bind/zones.rfc1918&quot;;

include &quot;/etc/bind/named.conf.debug.log&quot;; 

zone &quot;linkcareservices.local&quot; {
    type slave;
    masters {192.168.1.10;} ;
    file &quot;linkcareservices.local.hosts&quot;;
};

zone &quot;1.168.192.in-addr.arpa&quot; {
    type slave;
    masters {192.168.1.10;} ;
    file &quot;1.168.192.in-addr.arpa.zone&quot;;
};
</pre>
<p>Il n&#8217;y a pas besoin de créer à la main les fichiers de zones : ils seront transférés automatiquement depuis le maitre.</p>
<span id="redmarrage_1"><h3>redémarrage</h3></span>
<p>on peut enfin redémarrer bind et démarrer le dhcp</p>
<pre class="brush: bash;">
sudo /etc/init.d/bind9 restart
sudo /etc/init.d/dhcp3-server start
</pre>
<span id="Debugging"><h2>Debugging</h2></span>
<p>Ce tuto est censé marcher directement, mais vous rencontrez des problèmes, voici quelques infos / trucs pour débugger les problèmes. J&#8217;essaierais de faire évoluer cette zone au fur et à mesure.</p>
<span id="analyser_les_logs"><h3>analyser les logs</h3></span>
<p>les logs du dhcp sont dans /var/log/syslog<br />
les logs du dns sont dans  /var/log/bind9/nameddbg </p>
<p>Avant tout, il faut bien regarder ces logs à la recherce de problèmes</p>
<span id="j8217ai_beau_changer_mes_conf_dns_mon_problme_persiste"><h3>j&#8217;ai beau changer mes conf dns, mon problème persiste</h3></span>
<p>Je me suis cassé la tête des heures durant sur des problèmes de MAJ ddns du dhcp vers le dns qui ne marchaient pas.<br />
Au final, le pb était qu&#8217;il y avait deux dns qui tournaient sur la machine.<br />
Ce pb a l&#8217;air plus courant qu&#8217;il n&#8217;y parait : ça m&#8217;est déjà arrivé deux fois (et deux fois je suis tombé dans le panneau). C&#8217;est peut-être un pb dans le restart du serveur dans init.d qui ne marche pas bien.<br />
Donc si vous avez un doute :</p>
<pre class="brush: bash;">
sudo /etc/init.d/bind9 stop
</pre>
<p>puis :</p>
<pre class="brush: bash;">
ps -ef | grep named
</pre>
<p>et si le ps montre un process named qui tourne encore, alors ne pas hésiter à le killer sauvagement :</p>
<pre class="brush: bash;">
sudo kill -9 XXXXXX
</pre>
<p>XXXXXX étant le numéro du process.<br />
puis :</p>
<pre class="brush: bash;">
sudo /etc/init.d/bind9 start
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.chiroux.com/installation-dun-couple-de-serveurs-dhcp-et-dns-redondants/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Installation d&#8217;un serveur web sécurisé sous Ubuntu 9.04server</title>
		<link>http://www.chiroux.com/installation-dun-serveur-web-securise-sous-ubuntu-9-04server/</link>
		<comments>http://www.chiroux.com/installation-dun-serveur-web-securise-sous-ubuntu-9-04server/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 22:58:11 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Administration Système]]></category>
		<category><![CDATA[9.04]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[jaunty]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.chiroux.com/?p=419</guid>
		<description><![CDATA[<p>Cet article est le premier d&#8217;une série sur l&#8217;admin système linux. On va donc commencer par les bases : installer un ubuntu server avec une sécurité correcte et on en profite pour installer un LLMP dessus (c&#8217;est LAMP mais avec Lighttpd à la place de apache  )</p>
<p>Pour ce tuto, j&#8217;ai choisi d&#8217;utiliser un serveur [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.chiroux.com/wp-content/uploads/2009/08/ubuntu-logo.png" alt="ubuntu-logo" title="ubuntu-logo" width="300" height="277" class="alignright size-full wp-image-444" />Cet article est le premier d&#8217;une série sur l&#8217;admin système linux. On va donc commencer par les bases : installer un ubuntu server avec une sécurité correcte et on en profite pour installer un LLMP dessus (c&#8217;est LAMP mais avec Lighttpd à la place de apache <img src='http://www.chiroux.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</p>
<p>Pour ce tuto, j&#8217;ai choisi d&#8217;utiliser <a href="https://www.gandi.net/hebergement/" class="broken_link"  target="_blank">un serveur virtuel de chez gandi</a> : je profite d&#8217;une offre d&#8217;été qui propose un serveur gratuit pendant un mois.<br />
J&#8217;avais beta testé cette offre il y a un an et demi, mais les trop gros problèmes d&#8217;accès disque (lenteurs notamment) m&#8217;avaient incité à partir prendre un RPS chez OVH.<br />
Maintenant la situation change : l&#8217;offre de gandi est plus mûre (et l&#8217;archi disque a notamment changée : c&#8217;est maintenant du SAS directement sur les serveurs) et les <a href="http://forum.ovh.com/showthread.php?t=49747" target="_blank">RPS d&#8217;ovh vont disparaitre</a>.<br />
Je vais donc profiter de cette installation pour faire quelques benchs sur l&#8217;offre gandi et voir si je (re)bascule dessus ou pas ensuite.<br />
En attendant, voici de quoi installer le serveur<br />
<span id="more-419"></span></p>
<span id="Table_des_matires"><h2>Table des matières</h2></span>
<div class='toc wptoc'>
<h2>Contents</h2>
<ol class='toc-odd level-1'>
	<li>
		<a href="#Table_des_matires">Table des matières</a>
	</li>
	<li>
		<a href="#Du_ct_de__gandi">Du côté de  gandi</a>
	</li>
	<li>
		<a href="#Organiser_les_users">Organiser les users</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#On_va_donc_dabord_autoriser_le_sudo_pour_testuser_:">On va donc d'abord autoriser le sudo pour testuser :</a>
			</li>
			<li>
				<a href="#Ensuite_on_va_ajouter_testuser_dans_le_groupe_admin_:">Ensuite on va ajouter testuser dans le groupe admin :</a>
			</li>
			<li>
				<a href="#Enfin_on_change_le_mot_de_passe_root">Enfin on change le mot de passe root</a>
			</li>
		</ol>
	<li>
		<a href="#Mise__jour_du_systme">Mise à jour du système</a>
	</li>
	<li>
		<a href="#Installer_et_configurer_de_quoi_bien_travailler">Installer et configurer de quoi bien travailler</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#Lheure_et_ntp">L'heure et ntp</a>
			</li>
		</ol>
	<li>
		<a href="#Scurit">Sécurité</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#ssh_:_autoriser_uniquement_certains_users_en_ssh">ssh : autoriser uniquement certains users en ssh</a>
			</li>
			<li>
				<a href="#Fail2ban">Fail2ban</a>
			</li>
			<li>
				<a href="#IPtables">IPtables</a>
			</li>
			<li>
				<a href="#Scuriser_le_kernel">Sécuriser le kernel</a>
			</li>
		</ol>
	<li>
		<a href="#Installation_Lighttpd_et_php">Installation Lighttpd et php</a>
	</li>
	<li>
		<a href="#Installation_Mysql">Installation Mysql</a>
	</li>
	<li>
		<a href="#Configuration_de_lighttpd_pour_un_site_de_test">Configuration de lighttpd pour un site de test</a>
		<ol class='toc-even level-2'>
			<li>
				<a href="#mettre_un_fichier_de_test">mettre un fichier de test</a>
			</li>
		</ol>
	<li>
		<a href="#Conclusion">Conclusion</a>
	</li>
</ol>
</ol>
</div>
<div class='wptoc-end'>&nbsp;</div>
<span id="Du_ct_de__gandi"><h2>Du côté de  gandi</h2></span>
<ul>
<li>Administration / Hebergement : cliquer sur créer un serveur</li>
<li>Valider le nombre de parts</li>
<li>Choisir Installation expert et Ubuntu 9.04</li>
<li>Choisir un hostname, un nom d&#8217;utilisateur et un mot de passe [si possible, choisir un nom de user non standard, pour améliorer la sécurité]</li>
<li>Valider, et attendre le mail de confirmation avec l&#8217;@IP du serveur</li>
<li>Ensuite, on peut se connecter en SSH sur le serveur avec le login et pass entré juste avant.</li>
</ul>
<p>Ajouter un disque de données :</p>
<ul>
<li>sur l&#8217;interfance gandi, onglet Gestion des disque, cliquer sur Créer un disque</li>
<li>choisir un nom pour le disque, la taille souhaitée et le filesystem</li>
<li>enfin, une fois le disque créé, cliquer sur le petit logo &#8216;link&#8217; attacher le disque à un serveur</li>
<li>choisir le serveur et valider</li>
<li>le volume est dynamiquement ajouté au serveur dans /srv/nomduvolumechoisi</li>
</ul>
<span id="Organiser_les_users"><h2>Organiser les users</h2></span>
<p>Le login créé (ici: testuser) n&#8217;est pas par défaut dans la liste des sudoers, donc pas de sudo possible.</p>
<p>Le mot de passe root par défaut est le même que celui du user testuser</p>
<span id="On_va_donc_d8217abord_autoriser_le_sudo_pour_testuser_:"><h3>On va donc d&#8217;abord autoriser le sudo pour testuser :</h3></span>
<p>en tant que root :</p>
<pre class="brush: bash;">
visudo</pre>
<p>et ajouter à la fin du fichier :</p>
<pre class="brush: bash;">
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
</pre>
<span id="Ensuite_on_va_ajouter_testuser_dans_le_groupe_admin_:"><h3>Ensuite on va ajouter testuser dans le groupe admin :</h3></span>
<p>toujours en tant que root :</p>
<pre class="brush: bash;">
usermod -G admin testuser
</pre>
<span id="Enfin_on_change_le_mot_de_passe_root"><h3>Enfin on change le mot de passe root</h3></span>
<p>en tant que root :</p>
<pre class="brush: bash;">
passwd
</pre>
<p>et entrer un bon mot de passe bien sécurisé</p>
<p>A partir de maintenant, sauf mention spécifique, le reste des commandes sera réalisée avec le user testuser</p>
<span id="Mise__jour_du_systme"><h2>Mise à jour du système</h2></span>
<p>Afin de démarrer sur un système tout propre</p>
<pre class="brush: bash;">
sudo apt-get update
sudo apt-get upgrade
</pre>
<span id="Installer_et_configurer_de_quoi_bien_travailler"><h2>Installer et configurer de quoi bien travailler</h2></span>
<pre class="brush: bash;">
sudo apt-get install vim-python
</pre>
<p>puis</p>
<pre class="brush: bash;">
vim ~/.vimrc
</pre>
<p>et coller le texte suivant:</p>
<pre class="brush: bash;">
syntax on
set number
set background=dark
set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
set autoindent
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
autocmd BufWritePre *.py normal m`:%s/\s\+$//e ``
map &lt;F12&gt; :set number!&lt;CR&gt;
map &lt;F10&gt; :set paste!&lt;CR&gt;
</pre>
<p>enfin :</p>
<pre class="brush: bash;">
vim ~/.bashrc
</pre>
<p>et vers la fin du fichier, décommenter les 3 lignes suivantes :</p>
<pre class="brush: bash;">
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
</pre>
<span id="L8217heure_et_ntp"><h3>L&#8217;heure et ntp</h3></span>
<p>Dans mon système livré par gandi, l&#8217;heure est par défaut en heure UTC, si on veut la mettre à l&#8217;heure locale (Paris, France pour moi):</p>
<pre class="brush: bash;">
sudo dpkg-reconfigure tzdata
</pre>
<p>et choisir : Europe, puis Paris</p>
<p>Pour NTP :<br />
[édit: Comme le remarque justement Daniel dans les commentaires, paramétrer ntp pour un serveur virtuel n'est vraisemblablement pas nécessaire car il va hériter de la date de son hôte. Je laisse ici l'info au cas où votre serveur n'est pas un hébergement gandi]</p>
<pre class="brush: bash;">
sudo vim /etc/cron.daily/ntpdate
</pre>
<p>et coller les commandes suivantes :</p>
<pre class="brush: bash;">
#!/bin/sh
#On lance une synchro ntp
ntpdate fr.pool.ntp.org
</pre>
<p>enfin</p>
<pre class="brush: bash;">
sudo chmod a+x /etc/cron.daily/ntpdate
</pre>
<p>Ainsi notre serveur resynchronisera son horloge tous les jours automatiquement.</p>
<span id="Scurit"><h2>Sécurité</h2></span>
<span id="ssh_:_autoriser_uniquement_certains_users_en_ssh"><h3>ssh : autoriser uniquement certains users en ssh</h3></span>
<p>ici, on va limiter le ssh uniquement pour notre user : testuser</p>
<pre class="brush: bash;">
sudo vim /etc/ssh/sshd_config
</pre>
<p>Bin vérifier que dans la zone &#8216;Authentication&#8217; on a bien :</p>
<pre class="brush: bash;">
PermitRootLogin  without-password
</pre>
<p>sinon modifier le paramètre.</p>
<p>ensuite, en bas du fichier, ajouter :</p>
<pre class="brush: bash;">
# Allow only a certain list of users
AllowUsers testuser
</pre>
<p><span style="color: #ff0000;"><strong>Attention, il faut être vigilant en insérant cette ligne : une erreur dans le nom du user interdirait toute connexion ultérieure en ssh et bloquerait l&#8217;accès au serveur. Il est conseillé de garder sa session actuelle ouverte et de tester une nouvelle connexion supplémentaire pour bien vérifier qu&#8217;on puisse encore se connecter.</strong></span></p>
<p>On recharge la config ssh</p>
<pre class="brush: bash;">
sudo /etc/init.d/ssh reload
</pre>
<span id="Fail2ban"><h3>Fail2ban</h3></span>
<p>Fail2ban analyse les logs (ssh notament) et banni les IP qui attaque en force brute sur ssh via des configurations automatiques dans iptables.</p>
<pre class="brush: bash;">
sudo apt-get install fail2ban
</pre>
<p>modification des paramètres de fail2ban:</p>
<pre class="brush: bash;">
sudo vim /etc/fail2ban/jail.conf
</pre>
<p>pour ma part, j&#8217;ai juste changé deux paramètres : le bantime et le nombre d&#8217;essais :</p>
<pre class="brush: bash;">
bantime  = 1800
maxretry = 3
</pre>
<pre class="brush: bash;">
sudo /etc/init.d/fail2ban restart
</pre>
<span id="IPtables"><h3>IPtables</h3></span>
<p>Iptable a été installé avec fail2ban, on va maintenant le configurer pour nos applications</p>
<p>Pour cela, on va créer un fichier de commande qui se lancera au boot du serveur et que l&#8217;on peut relancer à volonté pour reconfigurer le firewall.</p>
<pre class="brush: bash;">
sudo vim /etc/init.d/server_iptables
</pre>
<p>et coller les commandes suivantes :</p>
<pre class="brush: bash;">
#!/bin/bash
# reset iptables
iptables -F

# Autorise les connections sortantes et sur l'interface &quot;loopback&quot;
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -d 127.0.0.0/8 -i ! lo -j DROP

# Autorise les connections deja etablies
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autorise HTTP, SSH, ICMP-ping
iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p icmp -i eth0 -j ACCEPT

#  Refuse a priori ce qui vient de l'exterieur
iptables -P INPUT DROP
iptables -P FORWARD DROP
</pre>
<p>Ensuite on le rend executable et on l&#8217;installe au boot :</p>
<pre class="brush: bash;">
sudo chmod +x /etc/init.d/server_iptables
sudo update-rc.d server_iptables defaults
</pre>
<span id="Scuriser_le_kernel"><h3>Sécuriser le kernel</h3></span>
<p>ça doit être lié à Xen, mais le kernel de gandi est assez ancien (à la date de cet article c&#8217;est un 2.6.18, alors que le kernel en cours est un 2.6.28</p>
<p>On va modifier quelques paramètres du kernel pour le rendre plus solide aux attaques<br />
Ici, il faut se mettre directement en root pour que ces commandes passent :</p>
<pre class="brush: bash;">
sudo su
</pre>
<span id="Se_protger_contre_les_Smurf_Attack:"><h4>Se protéger contre les Smurf Attack:</h4></span>
<p>celui ci est déjà bon dans l&#8217;install que j&#8217;ai testé:</p>
<pre class="brush: bash;">
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
</pre>
<span id="Eviter_le_source_routing:_"><h4>Eviter le source routing: </h4></span>
<p>celui ci est déjà bon dans l&#8217;install que j&#8217;ai testé:</p>
<pre class="brush: bash;">
echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/all/accept_source_route
</pre>
<span id="Se_protger_des_attaques_de_type_Syn_Flood:_"><h4>Se protéger des attaques de type Syn Flood: </h4></span>
<p>celui ci est déjà bon dans l&#8217;install que j&#8217;ai testé:</p>
<pre class="brush: bash;">
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/tcp_syncookies
echo &quot;1024&quot; &gt; /proc/sys/net/ipv4/tcp_max_syn_backlog
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/conf/all/rp_filter
</pre>
<span id="Dsactiver_lautorisation_des_redirections_ICMP:"><h4>Désactiver l’autorisation des redirections ICMP:</h4></span>
<pre class="brush: bash;">
echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/all/accept_redirects
echo &quot;0&quot; &gt; /proc/sys/net/ipv4/conf/all/secure_redirects
</pre>
<span id="Eviter_le_log_des_paquets_icmp_erron:_"><h4>Eviter le log des paquets icmp erroné: </h4></span>
<p>celui ci est déjà bon dans l&#8217;install que j&#8217;ai testé:</p>
<pre class="brush: bash;">
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
</pre>
<span id="Active_le_logging_des_packets_aux_adresses_sources_falficies_ou_non_routables:"><h4>Active le logging des packets aux adresses sources falficiées ou non routables:</h4></span>
<pre class="brush: bash;">
echo &quot;1&quot; &gt; /proc/sys/net/ipv4/conf/all/log_martians
</pre>
<p>on quitte le user root</p>
<pre class="brush: bash;">
exit
</pre>
<span id="Installation_Lighttpd_et_php"><h2>Installation Lighttpd et php</h2></span>
<pre class="brush: bash;">
sudo apt-get install lighttpd
sudo apt-get install php5-cgi
sudo apt-get install php5-mysql
sudo lighty-enable-mod cgi
sudo /etc/init.d/lighttpd force-reload
</pre>
<p>edit le fichier de conf de lighttpd et ajouter le mod fastcgi :</p>
<pre class="brush: bash;">
sudo vim /etc/lighttpd/lighttpd.conf
</pre>
<p>les modules activés sont les suivants (j&#8217;ai mis mod_rewrite et mod_redirect en plus, car cela sert toujours finalement)</p>
<pre class="brush: bash;">
 server.modules              = (
             &quot;mod_access&quot;,
             &quot;mod_alias&quot;,
             &quot;mod_accesslog&quot;,
             &quot;mod_compress&quot;,
             &quot;mod_fastcgi&quot;,
             &quot;mod_rewrite&quot;,
             &quot;mod_redirect&quot;,
 #           &quot;mod_evhost&quot;,
 #           &quot;mod_usertrack&quot;,
 #           &quot;mod_rrdtool&quot;,
 #           &quot;mod_webdav&quot;,
 #           &quot;mod_expire&quot;,
 #           &quot;mod_flv_streaming&quot;,
 #           &quot;mod_evasive&quot;
 )
</pre>
<p>puis aller chercher dans le fichier la variable : server.dir-listing<br />
et la passer à disable : </p>
<pre class="brush: bash;">
server.dir-listing          = &quot;disable&quot;
</pre>
<span id="Installation_Mysql"><h2>Installation Mysql</h2></span>
<pre class="brush: bash;">
apt-get install mysql-server-5.0
</pre>
<p>Quand il le demande, entrer un mot de passe root pour mysql (choisir un vrai mot de passe bien sécurisé)</p>
<p>On va &#8216;forcer&#8217; l&#8217;utf8 partout :</p>
<pre class="brush: bash;">
sudo vim /etc/mysql/conf.d/caractersencoding.cnf
</pre>
<p>et coller la configuration suivante :</p>
<pre class="brush: bash;">
[mysqld]
  #Set the default character set.
  default-character-set=utf8
  #Set the default collation.
  default-collation=utf8_general_ci
  #
  character-set-server=utf8
  skip-character-set-client-handshake
  init-connect='SET NAMES utf8'
</pre>
<p>on redémarre pour vérifier que tout est bon</p>
<pre class="brush: bash;">
sudo /etc/init.d/mysql restart
</pre>
<p>Mysql est maintenant installé dans ses répertoires par défaut, et notamment les bases seront crées dans /var/lib/mysql<br />
[ceci est une spécificité liée à l'installation gandi, vous pouvez passer ce point si votre serveur est 'normal'] /var/lib est dans le disque &#8217;système&#8217; de gandi qui fait uniquement 3Go. En fonction de ce qu&#8217;on prévoi de faire avec son serveur mysql, il est peut-etre judicieux de le déplacer sur le disque de données :</p>
<pre class="brush: bash;">
sudo /etc/init.d/mysql stop
sudo mv /var/lib/mysql /srv/nomdurepertoiregandi/mysql
sudo ln -s /srv/nomdurepertoiregandi/mysql /var/lib/mysql
sudo /etc/init.d/mysql start
</pre>
<span id="Configuration_de_lighttpd_pour_un_site_de_test"><h2>Configuration de lighttpd pour un site de test</h2></span>
<p>Afin de voir si tout va bien, on va créer un site de test </p>
<pre class="brush: bash;">
sudo mkdir /srv/nomdurepertoiregandi/www
sudo chown www-data:www-data /srv/nomdurepertoiregandi/www
sudo -u www-data mkdir /srv/nomdurepertoiregandi/www/sitetest1
</pre>
<p>ensuite on va configurer lighty :</p>
<pre class="brush: bash;">
sudo vim /etc/lighttpd/lighttpd.conf
</pre>
<p>ajouter sous la conf des modules :</p>
<pre class="brush: bash;">
 # Config pour sitetest
$HTTP[&quot;host&quot;] == &quot;111.111.111.111&quot; {
     server.document-root       = &quot;/srv/nomdurepertoiregandi/www/sitetest1/&quot;

     # FAST CGI POUR PHP
     fastcgi.server = ( &quot;.php&quot; =&gt; ((
                         &quot;bin-path&quot; =&gt; &quot;/usr/bin/php-cgi&quot;,
                         &quot;socket&quot; =&gt; &quot;/tmp/php.socket&quot;,
                         &quot;max-procs&quot; =&gt; 1,
                         &quot;bin-environment&quot; =&gt; (
                             &quot;PHP_FCGI_CHILDREN&quot; =&gt; &quot;4&quot;,
                             &quot;PHP_FCGI_MAX_REQUESTS&quot; =&gt; &quot;10000&quot;
                         ),
                         &quot;bin-copy-environment&quot; =&gt; (
                             &quot;PATH&quot;, &quot;SHELL&quot;, &quot;USER&quot;
                         ),
                         &quot;broken-scriptfilename&quot; =&gt; &quot;enable&quot;
     )))
}
</pre>
<p>en remplaçant l&#8217;ip 111.111.111.111 par l&#8217;ip ou le nom de domaine du site que vous voulez ajouter<br />
ensuite on redémarre lighty</p>
<pre class="brush: bash;">
sudo /etc/init.d/lighttpd restart
</pre>
<span id="mettre_un_fichier_de_test"><h3>mettre un fichier de test</h3></span>
<pre class="brush: bash;">
sudo -u www-data vim /srv/nomdurepertoiregandi/www/sitetest1/testinfo.php
</pre>
<p>et coller le code suivant :</p>
<pre class="brush: php;">
&lt;?php phpinfo(); ?&gt;
</pre>
<p>et voilà, le site est normalement accessible sur l&#8217;IP (ou le nom de domaine) que vous avez précisé dans la conf et l&#8217;url (en prenant mon exemple ci-dessus) : http://111.111.111.111/testinfo.php<br />
affiche toutes les infos de php.</p>
<span id="Conclusion"><h2>Conclusion</h2></span>
<p>On a maintenant un serveur ubuntu jaunty prêt à fonctionner, léger et sécurisé. Il prends peu de ressources, très peu de ram et pourra servir de base aux reste des tutos à venir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chiroux.com/installation-dun-serveur-web-securise-sous-ubuntu-9-04server/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
	</channel>
</rss>
