index.html 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. <!DOCTYPE html>
  2. <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
  3. <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
  4. <head>
  5. <meta charset="utf-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <link rel="shortcut icon" href="../img/favicon.ico">
  9. <title>Exemple d'utilisation avec un serveur Web - Les Tutoriels du Yojik</title>
  10. <link rel="stylesheet" href="../css/theme.css" />
  11. <link rel="stylesheet" href="../css/theme_extra.css" />
  12. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/github.min.css" />
  13. <script>
  14. // Current page data
  15. var mkdocs_page_name = "Exemple d'utilisation avec un serveur Web";
  16. var mkdocs_page_input_path = "Exemple-d-utilisation-serveur-Web.md";
  17. var mkdocs_page_url = null;
  18. </script>
  19. <script src="../js/jquery-2.1.1.min.js" defer></script>
  20. <script src="../js/modernizr-2.8.3.min.js" defer></script>
  21. <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
  22. <script>hljs.initHighlightingOnLoad();</script>
  23. </head>
  24. <body class="wy-body-for-nav" role="document">
  25. <div class="wy-grid-for-nav">
  26. <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
  27. <div class="wy-side-scroll">
  28. <div class="wy-side-nav-search">
  29. <a href=".." class="icon icon-home"> Les Tutoriels du Yojik</a>
  30. <div role="search">
  31. <form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
  32. <input type="text" name="q" placeholder="Search docs" title="Type search term here" />
  33. </form>
  34. </div>
  35. </div>
  36. <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
  37. <p class="caption"><span class="caption-text">Installation d'un serveur sécurisé, version Debian/Buster sur RaspberryPI</span></p>
  38. <ul class="current">
  39. <li class="toctree-l1"><a class="reference internal" href="..">Résumé</a>
  40. </li>
  41. <li class="toctree-l1"><a class="reference internal" href="../tutoraspi/">Présentation</a>
  42. </li>
  43. <li class="toctree-l1"><a class="reference internal" href="../Installation-de-base/">Installation de base</a>
  44. </li>
  45. <li class="toctree-l1"><a class="reference internal" href="../Premier-d%C3%A9marrage/">Premier démarrage</a>
  46. </li>
  47. <li class="toctree-l1"><a class="reference internal" href="../Etat-des-lieux/">État des lieux</a>
  48. </li>
  49. <li class="toctree-l1"><a class="reference internal" href="../S%C3%A9curisation-SSH/">Sécurisation SSH</a>
  50. </li>
  51. <li class="toctree-l1"><a class="reference internal" href="../R%C3%A9seau/">Réseau (des IPs fixes)</a>
  52. </li>
  53. <li class="toctree-l1"><a class="reference internal" href="../Knot/">Installation de Knot-resolver</a>
  54. </li>
  55. <li class="toctree-l1"><a class="reference internal" href="../Firewall/">Installation d'un pare-feux</a>
  56. </li>
  57. <li class="toctree-l1"><a class="reference internal" href="../Fail2ban/">Contrer les attaques de force brute</a>
  58. </li>
  59. <li class="toctree-l1"><a class="reference internal" href="../Logwatch/">Surveillance du serveur</a>
  60. </li>
  61. <li class="toctree-l1"><a class="reference internal" href="../Installation-courrier-basique/">Installation d'un serveur de courriers basique</a>
  62. </li>
  63. <li class="toctree-l1 current"><a class="reference internal current" href="./">Exemple d'utilisation avec un serveur Web</a>
  64. <ul class="current">
  65. <li class="toctree-l2"><a class="reference internal" href="#installation-du-programme">Installation du programme</a>
  66. <ul>
  67. <li class="toctree-l3"><a class="reference internal" href="#installation">Installation</a>
  68. </li>
  69. <li class="toctree-l3"><a class="reference internal" href="#ouverture-des-ports">Ouverture des ports</a>
  70. </li>
  71. <li class="toctree-l3"><a class="reference internal" href="#test">Test</a>
  72. </li>
  73. </ul>
  74. </li>
  75. <li class="toctree-l2"><a class="reference internal" href="#creation-de-la-page-daccueil">Création de la page d'accueil</a>
  76. <ul>
  77. <li class="toctree-l3"><a class="reference internal" href="#la-page-daccueil">La page d'accueil</a>
  78. </li>
  79. <li class="toctree-l3"><a class="reference internal" href="#creation-du-virtualhost-correspondant">Création du virtualhost correspondant</a>
  80. </li>
  81. <li class="toctree-l3"><a class="reference internal" href="#test-de-notre-page-daccueil">Test de notre page d'accueil</a>
  82. </li>
  83. </ul>
  84. </li>
  85. <li class="toctree-l2"><a class="reference internal" href="#securisation-de-notre-serveur">Sécurisation de notre serveur</a>
  86. <ul>
  87. <li class="toctree-l3"><a class="reference internal" href="#etat-des-lieux">État des lieux</a>
  88. </li>
  89. <li class="toctree-l3"><a class="reference internal" href="#test-de-notre-nouvelle-configuration">Test de notre nouvelle configuration</a>
  90. </li>
  91. <li class="toctree-l3"><a class="reference internal" href="#petites-ameliorations-supplementaires">Petites améliorations supplémentaires</a>
  92. </li>
  93. </ul>
  94. </li>
  95. </ul>
  96. </li>
  97. <li class="toctree-l1"><a class="reference internal" href="../Annexe/">Annexe</a>
  98. </li>
  99. </ul>
  100. </div>
  101. </div>
  102. </nav>
  103. <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
  104. <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
  105. <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
  106. <a href="..">Les Tutoriels du Yojik</a>
  107. </nav>
  108. <div class="wy-nav-content">
  109. <div class="rst-content">
  110. <div role="navigation" aria-label="breadcrumbs navigation">
  111. <ul class="wy-breadcrumbs">
  112. <li><a href="..">Docs</a> &raquo;</li>
  113. <li>Installation d'un serveur sécurisé, version Debian/Buster sur RaspberryPI &raquo;</li>
  114. <li>Exemple d'utilisation avec un serveur Web</li>
  115. <li class="wy-breadcrumbs-aside">
  116. </li>
  117. </ul>
  118. <hr/>
  119. </div>
  120. <div role="main">
  121. <div class="section">
  122. <h1 id="exemple-dutilisation-de-notre-tout-nouveau-raspi">Exemple d'utilisation de notre tout nouveau Raspi</h1>
  123. <p>Nous allons installer un serveur Web, <strong>apache</strong>.</p>
  124. <p>Ce n'est qu'un exemple : choisissez le logiciel que vous voulez, mais gardez à l'esprit la sécurisation.</p>
  125. <h2 id="installation-du-programme">Installation du programme</h2>
  126. <h3 id="installation">Installation</h3>
  127. <pre><code>pi@piras:~ $ sudo apt install apache2
  128. Lecture des listes de paquets... Fait
  129. Construction de l'arbre des dépendances
  130. Lecture des informations d'état... Fait
  131. Les paquets supplémentaires suivants seront installés :
  132. apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1 liblua5.2-0
  133. Paquets suggérés :
  134. apache2-doc apache2-suexec-pristine | apache2-suexec-custom
  135. Les NOUVEAUX paquets suivants seront installés :
  136. apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbrotli1
  137. liblua5.2-0
  138. 0 mis à jour, 10 nouvellement installés, 0 à enlever et 0 non mis à jour.
  139. Il est nécessaire de prendre 2 309 ko dans les archives.
  140. Après cette opération, 7 253 ko d'espace disque supplémentaires seront utilisés.
  141. Souhaitez-vous continuer ? [O/n] o
  142. ...
  143. Enabling site 000-default.
  144. Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /lib/systemd/system/apache2.service.
  145. Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /lib/systemd/system/apache-htcacheclean.
  146. service.
  147. Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u6+rpi1) ...
  148. Traitement des actions différées (« triggers ») pour man-db (2.8.5-2) ...
  149. Traitement des actions différées (« triggers ») pour libc-bin (2.28-10+rpi1) ...
  150. pi@piras:~ $
  151. </code></pre>
  152. <h3 id="ouverture-des-ports">Ouverture des ports</h3>
  153. <p>Il nous faut ajouter les services <strong>http</strong> et <strong>https</strong>.</p>
  154. <ol>
  155. <li>
  156. <p>Règles en cours</p>
  157. <pre><code>pi@piras:~ $ sudo firewall-cmd --state
  158. running
  159. pi@piras:~ $ sudo firewall-cmd --get-default-zone
  160. public
  161. pi@piras:~ $ sudo firewall-cmd --get-active-zones
  162. public
  163. interfaces: eth0
  164. pi@piras:~ $ sudo firewall-cmd --list-all
  165. public (active)
  166. target: default
  167. icmp-block-inversion: no
  168. interfaces: eth0
  169. sources:
  170. services: dhcpv6-client smtp ssh
  171. ports:
  172. protocols:
  173. masquerade: no
  174. forward-ports:
  175. source-ports:
  176. icmp-blocks:
  177. rich rules:
  178. </code></pre>
  179. </li>
  180. <li>
  181. <p>Ajout des services</p>
  182. <pre><code>pi@piras:~ $ sudo firewall-cmd --permanent --zone=public --add-service={http,https}
  183. success
  184. pi@piras:~ $
  185. </code></pre>
  186. </li>
  187. <li>
  188. <p>Test de nos services actifs</p>
  189. <p>J'ai relancé le raspi car j'avais des erreurs de <strong>zones</strong>.</p>
  190. <p>Après redémarrage, tout est bon :</p>
  191. <pre><code>pi@piras:~ $ sudo firewall-cmd --list-all
  192. public (active)
  193. target: default
  194. icmp-block-inversion: no
  195. interfaces: eth0
  196. sources:
  197. services: dhcpv6-client http https smtp ssh
  198. ports:
  199. protocols:
  200. masquerade: no
  201. forward-ports:
  202. source-ports:
  203. icmp-blocks:
  204. rich rules:
  205. pi@piras:~ $
  206. </code></pre>
  207. <p>Nos services <strong>http</strong> et <strong>https</strong> ont bien été pris en compte.</p>
  208. </li>
  209. </ol>
  210. <h3 id="test">Test</h3>
  211. <p>Nous allons faire un test de connexion :</p>
  212. <p><img alt="Page d'accueil de Debian" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2008-34-27.png" /></p>
  213. <p>Tout fonctionne comme il faut.</p>
  214. <h2 id="creation-de-la-page-daccueil">Création de la page d'accueil</h2>
  215. <h3 id="la-page-daccueil">La page d'accueil</h3>
  216. <p>Nous allons créer un petit fichier <strong>.html</strong> pour personnaliser notre page d'acceuil. Le fichier s'appellera <strong>index.html</strong> et est situé dans <strong>/var/www/html/</strong>.</p>
  217. <pre><code>pi@piras:~ $ cd /var/www/html/
  218. pi@piras:/var/www/html $ ls
  219. index.html
  220. pi@piras:/var/www/html $
  221. </code></pre>
  222. <p>Avec votre éditeur favori, supprimez le fichier :</p>
  223. <pre><code>pi@piras:/var/www/html $ sudo rm index.html
  224. pi@piras:/var/www/html $
  225. </code></pre>
  226. <p>et créez un nouveau fichier dont le contenu est le suivant :</p>
  227. <pre><code>&lt;!DOCTYPE html&gt;
  228. &lt;html&gt;
  229. &lt;head&gt;
  230. &lt;title&gt;Page d'accueil du Piras&lt;/title&gt;
  231. &lt;meta charset="UTF-8"&gt;
  232. &lt;/head&gt;
  233. &lt;body&gt;
  234. &lt;h1&gt;Page d'acceuil du Piras&lt;/h1&gt;
  235. &lt;p&gt;Vous voilà sur la page principale de notre tout nouveau serveur Web.&lt;/p&gt;
  236. &lt;p&gt;Merci de votre visite!&lt;/p&gt;
  237. &lt;/body&gt;
  238. &lt;/html&gt;
  239. pi@piras:/var/www/html $ sudo vim index.html
  240. pi@piras:/var/www/html $
  241. </code></pre>
  242. <p>Changez le propriétaire du fichier :</p>
  243. <pre><code>pi@piras:/var/www/html $ sudo chown www-data: index.html
  244. pi@piras:/var/www/html $
  245. </code></pre>
  246. <h3 id="creation-du-virtualhost-correspondant">Création du <strong>virtualhost</strong> correspondant</h3>
  247. <pre><code>pi@piras:/etc/apache2/sites-available $ cat piras.conf
  248. &lt;VirtualHost *:80&gt;
  249. ServerName piras.yojik.net
  250. ServerAdmin webmaster@localhost
  251. DocumentRoot /var/www/html
  252. ErrorLog ${APACHE_LOG_DIR}/error.log
  253. CustomLog ${APACHE_LOG_DIR}/access.log combined
  254. &lt;/VirtualHost&gt;
  255. pi@piras:/etc/apache2/sites-available $
  256. </code></pre>
  257. <p>On désactive les anciens sites par défaut, et on active le nouveau :</p>
  258. <pre><code>pi@piras:/etc/apache2/sites-available $ sudo a2dissite default-ssl
  259. Site default-ssl disabled.
  260. To activate the new configuration, you need to run:
  261. systemctl reload apache2
  262. pi@piras:/etc/apache2/sites-available $ sudo a2dissite 000-default
  263. Site 000-default disabled.
  264. To activate the new configuration, you need to run:
  265. systemctl reload apache2
  266. pi@piras:/etc/apache2/sites-available $
  267. pi@piras:/etc/apache2/sites-available $ sudo a2ensite piras
  268. Enabling site piras.
  269. To activate the new configuration, you need to run:
  270. systemctl reload apache2
  271. pi@piras:/etc/apache2/sites-available $
  272. </code></pre>
  273. <p>On recharge apache2 pour qu'il prenne en compte nos modifications :</p>
  274. <pre><code>pi@piras:/etc/apache2/sites-available $ sudo systemctl reload apache2
  275. pi@piras:/etc/apache2/sites-available $
  276. </code></pre>
  277. <h3 id="test-de-notre-page-daccueil">Test de notre page d'accueil</h3>
  278. <p><img alt="Page d'accueil du Piras" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2009-04-24.png" /></p>
  279. <p>Et voilà! :D</p>
  280. <h2 id="securisation-de-notre-serveur">Sécurisation de notre serveur</h2>
  281. <h3 id="etat-des-lieux">État des lieux</h3>
  282. <p>Rendez-vous sur la page suivante : <a href="https://observatory.mozilla.org/">Test Mozilla</a>. Nos résultats ne sont pas terribles ...</p>
  283. <p><img alt="Résultat 1" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2009-15-59.png" /></p>
  284. <p><img alt="Résultat 2" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2009-16-17.png" /></p>
  285. <p><img alt="Résultat 3" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2009-16-52.png" /></p>
  286. <p>Nous allons suivre les recommandations de la fondation <strong>Mozilla</strong> en ce qui concerne les algorithmes utilisés pour le chiffrement.</p>
  287. <p>Page de configuration d'un serveur Apache par la fondation <strong>Mozilla</strong> : <a href="https://ssl-config.mozilla.org/#server=apache&amp;version=2.4.41&amp;config=intermediate&amp;openssl=1.1.1d&amp;guideline=5.6">Configurateur</a></p>
  288. <p>Nous alons donc éditer notre fichier <strong>piras.conf</strong> situé dans <strong>/etc/apache2/sites-available/</strong> ainsi que le fichier général de configuration d'apache, situé dans pi@piras:/etc/apache2, <strong>apache2.conf</strong> :</p>
  289. <ol>
  290. <li>
  291. <p>Sauvegarde des fichiers existants</p>
  292. <p>pi@piras:/etc/apache2 $ sudo cp apache2.conf apache2.conf.orig
  293. pi@piras:/etc/apache2 $</p>
  294. </li>
  295. <li>
  296. <p>Création de certificats let'encrypt</p>
  297. <p>Il existe plusieurs clients <strong>letsencrypt</strong> pour la gestion des certificats. Nous utiliserons <strong>certbot</strong>, le client officiel de <strong>letsencrypt</strong>.</p>
  298. <pre><code>pi@piras:~ $ sudo apt install certbot python-certbot-apache
  299. ...
  300. pi@piras:~ $
  301. </code></pre>
  302. <p>Nous stoppons le service <strong>apache</strong></p>
  303. <pre><code>pi@piras:~ $ sudo systemctl stop apache2
  304. pi@piras:~ $
  305. </code></pre>
  306. <p>Lançons <strong>certbot</strong></p>
  307. <pre><code>pi@piras:~ $ sudo certbot
  308. Saving debug log to /var/log/letsencrypt/letsencrypt.log
  309. Plugins selected: Authenticator apache, Installer apache
  310. Enter email address (used for urgent renewal and security notices) (Enter 'c' to
  311. cancel): eric@yojik.eu
  312. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  313. Please read the Terms of Service at
  314. https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
  315. agree in order to register with the ACME server at
  316. https://acme-v02.api.letsencrypt.org/directory
  317. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  318. (A)gree/(C)ancel: A
  319. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  320. Would you be willing to share your email address with the Electronic Frontier
  321. Foundation, a founding partner of the Let's Encrypt project and the non-profit
  322. organization that develops Certbot? We'd like to send you email about our work
  323. encrypting the web, EFF news, campaigns, and ways to support digital freedom.
  324. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  325. (Y)es/(N)o: Y
  326. Which names would you like to activate HTTPS for?
  327. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  328. 1: piras.yojik.net
  329. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  330. Select the appropriate numbers separated by commas and/or spaces, or leave input
  331. blank to select all options shown (Enter 'c' to cancel): 1
  332. Obtaining a new certificate
  333. Performing the following challenges:
  334. http-01 challenge for piras.yojik.net
  335. Waiting for verification...
  336. Cleaning up challenges
  337. Created an SSL vhost at /etc/apache2/sites-available/piras-le-ssl.conf
  338. Deploying Certificate to VirtualHost /etc/apache2/sites-available/piras-le-ssl.conf
  339. Enabling available site: /etc/apache2/sites-available/piras-le-ssl.conf
  340. Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
  341. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  342. 1: No redirect - Make no further changes to the webserver configuration.
  343. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
  344. new sites, or if you're confident your site works on HTTPS. You can undo this
  345. change by editing your web server's configuration.
  346. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  347. Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
  348. Redirecting vhost in /etc/apache2/sites-enabled/piras.conf to ssl vhost in /etc/apache2/sites-available/piras-le-ssl.conf
  349. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  350. Congratulations! You have successfully enabled https://piras.yojik.net
  351. You should test your configuration at:
  352. https://www.ssllabs.com/ssltest/analyze.html?d=piras.yojik.net
  353. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  354. IMPORTANT NOTES:
  355. - Congratulations! Your certificate and chain have been saved at:
  356. /etc/letsencrypt/live/piras.yojik.net/fullchain.pem
  357. Your key file has been saved at:
  358. /etc/letsencrypt/live/piras.yojik.net/privkey.pem
  359. Your cert will expire on 2021-06-05. To obtain a new or tweaked
  360. version of this certificate in the future, simply run certbot again
  361. with the "certonly" option. To non-interactively renew *all* of
  362. your certificates, run "certbot renew"
  363. - Your account credentials have been saved in your Certbot
  364. configuration directory at /etc/letsencrypt. You should make a
  365. secure backup of this folder now. This configuration directory will
  366. also contain certificates and private keys obtained by Certbot so
  367. making regular backups of this folder is ideal.
  368. - If you like Certbot, please consider supporting our work by:
  369. Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
  370. Donating to EFF: https://eff.org/donate-le
  371. pi@piras:~ $
  372. </code></pre>
  373. <p>Relançons <strong>apache</strong></p>
  374. <pre><code>pi@piras:~ $ sudo systemctl start apache2
  375. pi@piras:~ $
  376. </code></pre>
  377. </li>
  378. <li>
  379. <p>Premier test</p>
  380. <p><img alt="Test avec SSL" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2015-24-01.png" /></p>
  381. <p>C'est bon.</p>
  382. </li>
  383. <li>
  384. <p>Sécurisation du serveur <strong>apache</strong></p>
  385. <ul>
  386. <li>
  387. <p>Strict-Transport-Security</p>
  388. <p>Ajouter la ligne suivante à piras.conf :</p>
  389. <pre><code>Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  390. </code></pre>
  391. </li>
  392. <li>
  393. <p>Content-Security-Policy</p>
  394. <p>Ajouter la ligne suivante à piras.conf :</p>
  395. <pre><code>Header set Content-Security-Policy "default-src 'self';"
  396. </code></pre>
  397. </li>
  398. <li>
  399. <p>X-Content-Type-Options</p>
  400. <p>Ajouter la ligne suivante à piras.conf :</p>
  401. <pre><code>&lt;IfModule mod_headers.c&gt;
  402. Header set X-Content-Type-Options "nosniff"
  403. &lt;/IfModule&gt;
  404. </code></pre>
  405. <p>Il faut activer aussi le module headers (déjà activé chez moi) :</p>
  406. <pre><code>pi@piras:~ $ sudo a2enmod headers
  407. Module headers already enabled
  408. pi@piras:~ $
  409. </code></pre>
  410. </li>
  411. <li>
  412. <p>X-Frame-Options</p>
  413. <p>Ajouter la ligne suivante à piras.conf :</p>
  414. <pre><code>&lt;IfModule mod_headers.c&gt;
  415. Header set X-Content-Type-Options "nosniff"
  416. &lt;/IfModule&gt;
  417. </code></pre>
  418. </li>
  419. <li>
  420. <p>X-XSS-Protection</p>
  421. <p>Ajouter la ligne suivante à piras.conf :</p>
  422. <pre><code>Header set X-Frame-Options: "SAMEORIGIN"
  423. </code></pre>
  424. </li>
  425. </ul>
  426. <p>Voilà le contenu du fichier après modifications :</p>
  427. <pre><code>pi@piras:~ $ cat /etc/apache2/sites-available/piras-le-ssl.conf
  428. &lt;IfModule mod_ssl.c&gt;
  429. &lt;VirtualHost *:443&gt;
  430. Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  431. Header set Content-Security-Policy "default-src 'self';"
  432. &lt;IfModule mod_headers.c&gt;
  433. Header set X-Content-Type-Options "nosniff"
  434. &lt;/IfModule&gt;
  435. Header set X-Frame-Options: "SAMEORIGIN"
  436. ServerName piras.yojik.net
  437. ServerAdmin webmaster@localhost
  438. DocumentRoot /var/www/html
  439. ErrorLog ${APACHE_LOG_DIR}/error.log
  440. CustomLog ${APACHE_LOG_DIR}/access.log combined
  441. SSLCertificateFile /etc/letsencrypt/live/piras.yojik.net/fullchain.pem
  442. SSLCertificateKeyFile /etc/letsencrypt/live/piras.yojik.net/privkey.pem
  443. Include /etc/letsencrypt/options-ssl-apache.conf
  444. &lt;/VirtualHost&gt;
  445. &lt;/IfModule&gt;
  446. pi@piras:~ $
  447. </code></pre>
  448. </li>
  449. </ol>
  450. <h3 id="test-de-notre-nouvelle-configuration">Test de notre nouvelle configuration</h3>
  451. <p>Cette fois-ci, nous obtenons la note maximale A+ :</p>
  452. <p><img alt="Test avec SSL" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2018-13-31.png" /></p>
  453. <p><img alt="Test avec SSL" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2018-13-51.png" /></p>
  454. <p><img alt="Test avec SSL" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-07%2018-14-43.png" /></p>
  455. <p>Nous sommes passés d'une note <strong>F</strong> à <strong>A+</strong>!</p>
  456. <h3 id="petites-ameliorations-supplementaires">Petites améliorations supplémentaires</h3>
  457. <ul>
  458. <li>
  459. <p>cacher les données du serveur</p>
  460. <p>Cela se configure dans le fichier <strong>/etc/apache2/conf-available/security.conf</strong></p>
  461. <p>J'ai modifié les lignes suivantes : </p>
  462. <pre><code>ServerSignature Off
  463. ServerTokens Prod
  464. </code></pre>
  465. <p>Sauvegarde du fichier et relance du serveur apache.</p>
  466. <p><img alt="Avant" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-08%2009-18-18.png" /></p>
  467. <p><img alt="Après" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-08%2009-18-28.png" /></p>
  468. <p>On peut constater que notre serveur ne divulgue plus d'informations sur son type, ni sur l'OS utilisé.</p>
  469. </li>
  470. <li>
  471. <p>le parcours des répertoires</p>
  472. <p>Nous allons interdire le parcours des répertoires/sous-répertoires, de telle façon que le visiteur ne puisse plus voir les fichiers/répertoires.</p>
  473. <p>Procédure de test : </p>
  474. <p>Nous allons créer un répertoire <strong>test</strong> avec 2 fichiers (vides) dans l'arboresence de notre site Web.</p>
  475. <pre><code>pi@piras:/etc/apache2/conf-available $ cd /var/www/html/
  476. pi@piras:/var/www/html $ sudo mkdir test
  477. pi@piras:/var/www/html $ cd test
  478. pi@piras:/var/www/html/test $ sudo touch fichier1 fichier2
  479. pi@piras:/var/www/html/test $
  480. </code></pre>
  481. <p>Le résultat est le suivant :</p>
  482. <p><img alt="Avant" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-08%2009-25-25.png" /></p>
  483. <p>Retournons dans notre fichier précédent et modifions-le pour avoir ceci :</p>
  484. <pre><code>&lt;Directory /var/www/html&gt;
  485. # AllowOverride None
  486. # Require all denied
  487. Options None
  488. &lt;/Directory&gt;
  489. </code></pre>
  490. <p>Relançons apache et voyons le résultat :</p>
  491. <p><img alt="Après" src="../Images/Capture%20d%E2%80%99%C3%A9cran%20de%202021-03-08%2009-31-20.png" /></p>
  492. <p>Le visiteur n'a plus accès au listage des répertoires.</p>
  493. </li>
  494. <li>
  495. <p>protection contre les informations données par l'entête (header) <strong>Etag</strong></p>
  496. <p>Il nous faut rajouter la directive suivante au fichier de configuration :</p>
  497. <pre><code>FileEtag None
  498. </code></pre>
  499. </li>
  500. <li>
  501. <p>limitation des requêtes possibles : </p>
  502. <p>les méthodes supportées sont nombreuses et peuvent être configurées site par site. Mais en général, pour un site statique comme celui-là, seules les méthodes <strong>GET</strong>, <strong>Head</strong>, et <strong>POST</strong> sont nécessaires.</p>
  503. <p>Modification du fichier précédent</p>
  504. <pre><code>&lt;Directory /var/www/html&gt;
  505. # AllowOverride None
  506. # Require all denied
  507. Options None
  508. &lt;LimitExcept GET POST OPTIONS&gt;
  509. Require all denied
  510. &lt;/LimitExcept&gt;
  511. &lt;/Directory&gt;S
  512. </code></pre>
  513. </li>
  514. <li>
  515. <p>interdire la requête Trace</p>
  516. <p>C'est déjà mis en place par défaut dans la configuration Debian.</p>
  517. </li>
  518. </ul>
  519. <p>Voilà pour quelques améliorations de la sécurité de notre serveur Web.</p>
  520. </div>
  521. </div>
  522. <footer>
  523. <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
  524. <a href="../Annexe/" class="btn btn-neutral float-right" title="Annexe">Next <span class="icon icon-circle-arrow-right"></span></a>
  525. <a href="../Installation-courrier-basique/" class="btn btn-neutral" title="Installation d'un serveur de courriers basique"><span class="icon icon-circle-arrow-left"></span> Previous</a>
  526. </div>
  527. <hr/>
  528. <div role="contentinfo">
  529. <!-- Copyright etc -->
  530. </div>
  531. Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
  532. </footer>
  533. </div>
  534. </div>
  535. </section>
  536. </div>
  537. <div class="rst-versions" role="note" aria-label="versions">
  538. <span class="rst-current-version" data-toggle="rst-current-version">
  539. <span><a href="../Installation-courrier-basique/" style="color: #fcfcfc;">&laquo; Previous</a></span>
  540. <span style="margin-left: 15px"><a href="../Annexe/" style="color: #fcfcfc">Next &raquo;</a></span>
  541. </span>
  542. </div>
  543. <script>var base_url = '..';</script>
  544. <script src="../js/theme.js" defer></script>
  545. <script src="../search/main.js" defer></script>
  546. <script defer>
  547. window.onload = function () {
  548. SphinxRtdTheme.Navigation.enable(true);
  549. };
  550. </script>
  551. </body>
  552. </html>