index.html 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  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>Installation d'un pare-feu - 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 = "Installation d'un pare-feu";
  16. var mkdocs_page_input_path = "Tutoriels/tutostretch/Installation-Parre-Feu.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">Home</span></p>
  38. <ul>
  39. <li class="toctree-l1"><a class="reference internal" href="../../..">Page d'accueil</a>
  40. </li>
  41. </ul>
  42. <p class="caption"><span class="caption-text">Tutoriels</span></p>
  43. <ul class="current">
  44. <li class="toctree-l1"><a class="reference internal" href="../../tutos/">Introduction</a>
  45. </li>
  46. <li class="toctree-l1 current"><a class="reference internal current" href="#">Installation d'un serveur sécurisé, version Debian/Stretch (obsolète)</a>
  47. <ul class="current">
  48. <li class="toctree-l2"><a class="reference internal" href="../tutostretch/">Présentation</a>
  49. </li>
  50. <li class="toctree-l2 current"><a class="reference internal current" href="#">Installation</a>
  51. <ul class="current">
  52. <li class="toctree-l3"><a class="reference internal" href="../Installation-de-base/">Installation du système de base</a>
  53. </li>
  54. <li class="toctree-l3"><a class="reference internal" href="../ovh/">Démarrage sur serveur OVH</a>
  55. </li>
  56. <li class="toctree-l3"><a class="reference internal" href="../Premi%C3%A8re-Etape-S%C3%A9curisation/">Première étapes de sécurisation du serveur</a>
  57. </li>
  58. <li class="toctree-l3"><a class="reference internal" href="../Configuration-R%C3%A9seau/">Configuration du réseau</a>
  59. </li>
  60. <li class="toctree-l3"><a class="reference internal" href="../Installation-Serveur-Temps/">Installation d'un serveur de temps</a>
  61. </li>
  62. <li class="toctree-l3 current"><a class="reference internal current" href="./">Installation d'un pare-feu</a>
  63. <ul class="current">
  64. <li class="toctree-l4"><a class="reference internal" href="#installation-de-iptables">Installation de iptables</a>
  65. </li>
  66. <li class="toctree-l4"><a class="reference internal" href="#configuration-des-regles-iptables">Configuration des règles iptables</a>
  67. </li>
  68. <li class="toctree-l4"><a class="reference internal" href="#test-dns-et-du-serveur-de-temps-avec-iptables-actif">Test DNS et du serveur de temps (avec iptables actif)</a>
  69. </li>
  70. </ul>
  71. </li>
  72. <li class="toctree-l3"><a class="reference internal" href="../Installation-Fail2ban/">Contrer les attaques de brute-force avec fail2ban</a>
  73. </li>
  74. <li class="toctree-l3"><a class="reference internal" href="../Installation-Serveur-Courrier-Basique/">Installation d'un serveur de courrier basique</a>
  75. </li>
  76. <li class="toctree-l3"><a class="reference internal" href="../Installation-Serveur-DNS/">Installation du serveur DNS</a>
  77. </li>
  78. <li class="toctree-l3"><a class="reference internal" href="../Installation-Serveur-Web/">Installation d'un serveur web</a>
  79. </li>
  80. <li class="toctree-l3"><a class="reference internal" href="../Installation-Dovecot-Authentification/">Installation de dovecot et de l'authentification</a>
  81. </li>
  82. <li class="toctree-l3"><a class="" href="../Installation-Certificats-Letsencrypt.md)">Installation des certificats letsencrypt</a>
  83. </li>
  84. <li class="toctree-l3"><a class="" href="../courrier-SPF-DKIM-OPENDMARC.md">Ajout des enregistrements **spf**, **DKIM**, **DMARC** au fichier de zone DNS</a>
  85. </li>
  86. <li class="toctree-l3"><a class="reference internal" href="../Courrier-Comptes-Virtuels/">Ajout des comptes émail virtuels</a>
  87. </li>
  88. <li class="toctree-l3"><a class="reference internal" href="../Surveillance-Serveur/">Installation de programmes de surveillance du serveur</a>
  89. </li>
  90. <li class="toctree-l3"><a class="reference internal" href="../Installation-Webmail/">Installation d'un webmail (rainloop)</a>
  91. </li>
  92. <li class="toctree-l3"><a class="" href="../Sécurisation-Serveur-Web">Sécurisation d'un serveur WEB</a>
  93. </li>
  94. </ul>
  95. </li>
  96. </ul>
  97. </li>
  98. <li class="toctree-l1"><a class="reference internal" href="#">Installation d'un serveur sécurisé, version Debian/Buster (en cours d'écriture)</a>
  99. <ul>
  100. <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/1-tutobuster/">Présentation</a>
  101. </li>
  102. <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/2-Installation-de-base/">Installation de base</a>
  103. </li>
  104. <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/3-ovh/">Démarrage sur serveur OVH</a>
  105. </li>
  106. <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/4-Plan/">Plan d'ensemble</a>
  107. </li>
  108. <li class="toctree-l2"><a class="reference internal" href="../../tutobuster/5-Premi%C3%A8re-Etape-S%C3%A9curisation/">Premières étapes de sécurisation du serveur</a>
  109. </li>
  110. </ul>
  111. </li>
  112. <li class="toctree-l1"><a class="reference internal" href="#">Installation d'un serveur sécurisé, version Debian/Buster sur RaspberryPI</a>
  113. <ul>
  114. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/R%C3%A9sum%C3%A9/">Résumé</a>
  115. </li>
  116. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/tutoraspi/">Présentation</a>
  117. </li>
  118. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Installation-de-base/">Installation de base</a>
  119. </li>
  120. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Premier-d%C3%A9marrage/">Premier démarrage</a>
  121. </li>
  122. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Etat-des-lieux/">État des lieux</a>
  123. </li>
  124. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/S%C3%A9curisation-SSH/">Sécurisation SSH</a>
  125. </li>
  126. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/R%C3%A9seau/">Réseau (des IPs fixes)</a>
  127. </li>
  128. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Knot/">Installation de Knot-resolver</a>
  129. </li>
  130. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Firewall/">Installation d'un pare-feux</a>
  131. </li>
  132. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Fail2ban/">Contrer les attaques de force brute</a>
  133. </li>
  134. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Logwatch/">Surveillance du serveur</a>
  135. </li>
  136. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Installation-courrier-basique/">Installation d'un serveur de courriers basique</a>
  137. </li>
  138. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Exemple-d-utilisation-serveur-Web/">Exemple d'utilisation avec un serveur Web</a>
  139. </li>
  140. <li class="toctree-l2"><a class="reference internal" href="../../tutoraspi/Annexe/">Annexe</a>
  141. </li>
  142. </ul>
  143. </li>
  144. <li class="toctree-l1"><a class="reference internal" href="#">Domotique</a>
  145. <ul>
  146. <li class="toctree-l2"><a class="reference internal" href="../../Domotique/Introduction/">Introduction</a>
  147. </li>
  148. <li class="toctree-l2"><a class="reference internal" href="../../Domotique/Le-mat%C3%A9riel/">Le matériel</a>
  149. </li>
  150. </ul>
  151. </li>
  152. <li class="toctree-l1"><a class="reference internal" href="#">Tutoriel Anki</a>
  153. <ul>
  154. <li class="toctree-l2"><a class="reference internal" href="../../tutoanki/Introduction/">Introduction</a>
  155. </li>
  156. <li class="toctree-l2"><a class="reference internal" href="../../tutoanki/Installation/">Installation</a>
  157. </li>
  158. <li class="toctree-l2"><a class="reference internal" href="../../tutoanki/Les-fiches/">Les fiches</a>
  159. </li>
  160. <li class="toctree-l2"><a class="reference internal" href="../../tutoanki/Premi%C3%A8re-utilisation/">Premières utilisations et impressions</a>
  161. </li>
  162. <li class="toctree-l2"><a class="reference internal" href="../../tutoanki/Personnalisation/">Personnalisation</a>
  163. </li>
  164. <li class="toctree-l2"><a class="reference internal" href="../../tutoanki/Cartes/">Les cartes</a>
  165. </li>
  166. </ul>
  167. </li>
  168. </ul>
  169. </div>
  170. </div>
  171. </nav>
  172. <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
  173. <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
  174. <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
  175. <a href="../../..">Les Tutoriels du Yojik</a>
  176. </nav>
  177. <div class="wy-nav-content">
  178. <div class="rst-content">
  179. <div role="navigation" aria-label="breadcrumbs navigation">
  180. <ul class="wy-breadcrumbs">
  181. <li><a href="../../..">Docs</a> &raquo;</li>
  182. <li>Installation &raquo;</li>
  183. <li>Installation d'un serveur sécurisé, version Debian/Stretch (obsolète) &raquo;</li>
  184. <li>Tutoriels &raquo;</li>
  185. <li>Installation d'un pare-feu</li>
  186. <li class="wy-breadcrumbs-aside">
  187. </li>
  188. </ul>
  189. <hr/>
  190. </div>
  191. <div role="main">
  192. <div class="section">
  193. <h1 id="installation-dun-pare-feu">Installation d'un pare-feu</h1>
  194. <p>J'ai utilisé depuis toujours <strong>iptables</strong> <em>brut</em>. Ayant lu beaucoup de bien de <strong>ufw</strong>, je vais tenter une installation de ce dernier.</p>
  195. <p>Après usage, il s'avère difficile de configurer <strong>fail2ban</strong> avec <strong>ufw</strong>.</p>
  196. <p>Je vais quand même laisser la doc de configuration de <strong>ufw</strong>, tout en préférant utiliser <strong>iptables</strong>.</p>
  197. <h2 id="installation-de-iptables">Installation de iptables</h2>
  198. <p><strong>Iptables</strong> est installé automatiquement. Nous allons rajouter le paquet <strong>iptables-persistent</strong> pour assurer le lancement automatique de nos règles à l'allumage de la machine.</p>
  199. <pre><code>root@atom:/home/ericadmin# apt install iptables-persistent
  200. Lecture des listes de paquets... Fait
  201. Construction de l'arbre des dépendances
  202. Lecture des informations d'état... Fait
  203. The following additional packages will be installed:
  204. netfilter-persistent
  205. Les NOUVEAUX paquets suivants seront installés :
  206. iptables-persistent netfilter-persistent
  207. 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
  208. Il est nécessaire de prendre 19,5 ko dans les archives.
  209. Après cette opération, 79,9 ko d'espace disque supplémentaires seront utilisés.
  210. Souhaitez-vous continuer ? [O/n] o
  211. Réception de:1 http://deb.debian.org/debian stretch/main amd64 netfilter-persistent all 1.0.4+nmu2 [8 792 B]
  212. Réception de:2 http://deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10,7 kB]
  213. 19,5 ko réceptionnés en 0s (198 ko/s)
  214. Préconfiguration des paquets...
  215. Sélection du paquet netfilter-persistent précédemment désélectionné.
  216. (Lecture de la base de données... 36713 fichiers et répertoires déjà installés.)
  217. Préparation du dépaquetage de .../netfilter-persistent_1.0.4+nmu2_all.deb ...
  218. Dépaquetage de netfilter-persistent (1.0.4+nmu2) ...
  219. Sélection du paquet iptables-persistent précédemment désélectionné.
  220. Préparation du dépaquetage de .../iptables-persistent_1.0.4+nmu2_all.deb ...
  221. Dépaquetage de iptables-persistent (1.0.4+nmu2) ...
  222. Paramétrage de netfilter-persistent (1.0.4+nmu2) ...
  223. Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service → /lib/systemd/system/netfilter-persistent.service.
  224. update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
  225. Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
  226. Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
  227. Paramétrage de iptables-persistent (1.0.4+nmu2) ...
  228. root@atom:/home/ericadmin#
  229. </code></pre>
  230. <p>Nous obtenons donc 2 fichiers de configuration, /etc/iptables/rules.v4 et /etc/iptables/rules.v6.</p>
  231. <p>En listant ces fichiers, aucune règle n'est encore enregistrée: tout passe, en entrée et en sortie.</p>
  232. <p>Ces fichiers sont mis à jour grâce aux commandes suivantes.</p>
  233. <pre><code>iptables-save &gt; /etc/iptables/rules.v4
  234. ip6tables-save &gt; /etc/iptables/rules.v6
  235. </code></pre>
  236. <p>Les commandes disponibles pour <strong>netfilter-persistent</strong> sont les suivantes:</p>
  237. <ul>
  238. <li>systemctl start netfilter-persistent</li>
  239. <li>systemctl stop netfilter-persistent</li>
  240. <li>systemctl restart netfilter-persistent</li>
  241. <li>systemctl stop netfilter-persistent</li>
  242. <li>systemctl status netfilter-persistent</li>
  243. </ul>
  244. <p>Exemples d'utilisation suivant l'état de <strong>netfilter-persistent</strong>:</p>
  245. <pre><code>root@atom:/home/ericadmin# systemctl stop netfilter-persistent
  246. root@atom:/home/ericadmin# systemctl status netfilter-persistent
  247. ● (**point en rouge**) netfilter-persistent.service - netfilter persistent configuration
  248. Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
  249. Active: failed (Result: exit-code) since Sun 2018-02-11 13:50:22 CET; 13s ago
  250. Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
  251. Process: 1525 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
  252. Main PID: 1525 (code=exited, status=0/SUCCESS)
  253. févr. 11 13:42:02 atom systemd[1]: Starting netfilter persistent configuration...
  254. févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
  255. févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
  256. févr. 11 13:42:02 atom systemd[1]: Started netfilter persistent configuration.
  257. févr. 11 13:50:22 atom systemd[1]: Stopping netfilter persistent configuration...
  258. févr. 11 13:50:22 atom netfilter-persistent[1629]: Automatic flush disabled; use '/usr/sbin/netfilter-persistent flush'
  259. févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
  260. févr. 11 13:50:22 atom systemd[1]: Stopped netfilter persistent configuration.
  261. févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Unit entered failed state.
  262. févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
  263. root@atom:/home/ericadmin#
  264. root@atom:/home/ericadmin# systemctl start netfilter-persistent
  265. root@atom:/home/ericadmin# systemctl status netfilter-persistent
  266. ● (**point en vert**) netfilter-persistent.service - netfilter persistent configuration
  267. Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
  268. Active: active (exited) since Sun 2018-02-11 13:51:09 CET; 2s ago
  269. Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
  270. Process: 1641 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
  271. Main PID: 1641 (code=exited, status=0/SUCCESS)
  272. févr. 11 13:51:09 atom systemd[1]: Starting netfilter persistent configuration...
  273. févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
  274. févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
  275. févr. 11 13:51:09 atom systemd[1]: Started netfilter persistent configuration.
  276. root@atom:/home/ericadmin#
  277. </code></pre>
  278. <p>Pour sauver des règles “entrées à la main”, tapez:</p>
  279. <pre><code>root@atom:/home/ericadmin# service netfilter-persistent save
  280. [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
  281. run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
  282. done.
  283. root@atom:/home/ericadmin#
  284. </code></pre>
  285. <p>ou</p>
  286. <pre><code>root@atom:/home/ericadmin# iptables-save &gt; /etc/iptables/rules.v4
  287. root@atom:/home/ericadmin# ip6tables-save &gt; /etc/iptables/rules.v6
  288. </code></pre>
  289. <h2 id="configuration-des-regles-iptables">Configuration des règles iptables</h2>
  290. <p>Nous allons les configurer avec un script donné par Nicolargo: <a href="https://blog.nicolargo.com/2013/06/ma-methode-pour-gerer-les-regles-iptables.html">Site de NicoLargo</a></p>
  291. <pre><code>#! /bin/sh
  292. ### BEGIN INIT INFO
  293. # Provides: PersonalFirewall
  294. # Required-Start: $remote_fs $syslog
  295. # Required-Stop: $remote_fs $syslog
  296. # Default-Start: 2 3 4 5
  297. # Default-Stop: 0 1 6
  298. # Short-Description: Personal Firewall
  299. # Description:
  300. ### END INIT INFO
  301. # programme iptables IPV4 et IPV6
  302. IPT=/sbin/iptables
  303. IP6T=/sbin/ip6tables
  304. # Les IPs
  305. IPMAISON=192.168.111.150
  306. IP6MAISON=fe80::1e6f:65ff:fe92:dd1f
  307. # fonction qui démarre le firewall
  308. do_start() {
  309. # Efface toutes les règles en cours. -F toutes. -X utilisateurs
  310. $IPT -t filter -F
  311. $IPT -t filter -X
  312. $IPT -t nat -F
  313. $IPT -t nat -X
  314. $IPT -t mangle -F
  315. $IPT -t mangle -X
  316. #
  317. $IP6T -t filter -F
  318. $IP6T -t filter -X
  319. # Il n'y a pas de NAT en IPV6
  320. #$IP6T -t nat -F
  321. #$IP6T -t nat -X
  322. $IP6T -t mangle -F
  323. $IP6T -t mangle -X
  324. # stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
  325. $IPT -t filter -P INPUT DROP
  326. $IPT -t filter -P FORWARD DROP
  327. $IPT -t filter -P OUTPUT ACCEPT
  328. #
  329. $IP6T -F INPUT
  330. $IP6T -F FORWARD
  331. $IP6T -X
  332. # Loopback
  333. $IPT -t filter -A INPUT -i lo -j ACCEPT
  334. $IPT -t filter -A OUTPUT -o lo -j ACCEPT
  335. #
  336. $IP6T -t filter -A INPUT -i lo -j ACCEPT
  337. $IP6T -t filter -A OUTPUT -o lo -j ACCEPT
  338. # ICMP
  339. $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  340. $IPT -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
  341. # Permettre à une connexion ouverte de recevoir du trafic en entrée
  342. $IPT -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
  343. #
  344. $IP6T -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
  345. $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
  346. $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
  347. $IP6T -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  348. $IP6T -A INPUT -j ACCEPT
  349. $IP6T -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
  350. $IP6T -P INPUT DROP
  351. $IP6T -A FORWARD -m state --state ESTABLISHED -j ACCEPT
  352. $IP6T -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  353. $IP6T -A FORWARD -i br0 -j ACCEPT
  354. $IP6T -A FORWARD -i br1 -o sit_sixxs -j ACCEPT
  355. $IP6T -P FORWARD DROP
  356. # DNS:53
  357. # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
  358. $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
  359. $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
  360. # DNS:53
  361. $IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
  362. $IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
  363. # DNS:953
  364. # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
  365. $IPT -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
  366. $IPT -t filter -A INPUT -p udp --dport 953 -j ACCEPT
  367. #
  368. $IP6T -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
  369. $IP6T -t filter -A INPUT -p udp --dport 953 -j ACCEPT
  370. # accepte tout d'une ip en TCP (de la maison)
  371. $IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
  372. $IP6T -t filter -A INPUT -p tcp -s $IP6MAISON -j ACCEPT
  373. # ssh
  374. $IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  375. $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
  376. #
  377. $IP6T -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  378. $IP6T -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
  379. #NTP out
  380. $IPT -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
  381. $IP6T -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
  382. # # HTTP + HTTPS Out
  383. # $IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  384. # $IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
  385. # $IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  386. # $IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
  387. # # HTTP + HTTPS In
  388. # $IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
  389. # $IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
  390. # $IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
  391. # $IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
  392. # # Mail SMTP:25
  393. # $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
  394. # $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
  395. # $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
  396. # $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
  397. # # Mail SMTP:587
  398. # $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
  399. # $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
  400. # $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
  401. # $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
  402. # # Mail IMAP:143
  403. # $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
  404. # $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
  405. # $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
  406. # $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
  407. # # Mail IMAPS:993
  408. # $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
  409. # $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
  410. # $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
  411. # $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
  412. # # Mail 465
  413. # $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
  414. # $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
  415. # $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
  416. # $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
  417. #
  418. echo "firewall started [OK]"
  419. }
  420. # fonction qui arrête le firewall
  421. do_stop() {
  422. # Efface toutes les règles
  423. $IPT -t filter -F
  424. $IPT -t filter -X
  425. $IPT -t nat -F
  426. $IPT -t nat -X
  427. $IPT -t mangle -F
  428. $IPT -t mangle -X
  429. #
  430. $IP6T -t filter -F
  431. $IP6T -t filter -X
  432. #$IP6T -t nat -F
  433. #$IP6T -t nat -X
  434. $IP6T -t mangle -F
  435. $IP6T -t mangle -X
  436. # remet la stratégie
  437. $IPT -t filter -P INPUT ACCEPT
  438. $IPT -t filter -P OUTPUT ACCEPT
  439. $IPT -t filter -P FORWARD ACCEPT
  440. #
  441. $IP6T -t filter -P INPUT ACCEPT
  442. $IP6T -t filter -P OUTPUT ACCEPT
  443. $IP6T -t filter -P FORWARD ACCEPT
  444. #
  445. echo "firewall stopped [OK]"
  446. }
  447. # fonction status firewall
  448. do_status() {
  449. # affiche les règles en cours
  450. clear
  451. echo Status IPV4
  452. echo --
  453. $IPT -L -n -v
  454. echo
  455. echo --
  456. echo
  457. echo status IPV6
  458. echo --
  459. $IP6T -L -n -v
  460. echo
  461. }
  462. case "$1" in
  463. start)
  464. do_start
  465. # quitte sans erreur
  466. exit 0
  467. ;;
  468. stop)
  469. do_stop
  470. # quitte sans erreur
  471. exit 0
  472. ;;
  473. restart)
  474. do_stop
  475. do_start
  476. # quitte sans erreur
  477. exit 0
  478. ;;
  479. status)
  480. do_status
  481. # quitte sans erreurs
  482. exit 0
  483. ;;
  484. *)
  485. # Si on ne tape ni "start" ni "stop"... on affiche une erreur
  486. echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
  487. # quitte le script avec un etat "en erreur"
  488. exit 1
  489. ;;
  490. esac
  491. </code></pre>
  492. <p>Explications:</p>
  493. <p>Création de 4 chaînes pour faciliter les opérations:</p>
  494. <pre><code># iptables -N TCP
  495. # iptables -N UDP
  496. # ip6tables -N TCP
  497. # ip6tables -N UDP
  498. </code></pre>
  499. <p>On est sur un serveur, pas un routeur, donc, on interdit la règle FORWARD:</p>
  500. <pre><code># iptables -P FORWARD DROP
  501. # ip6tables -P FORWARD DROP
  502. </code></pre>
  503. <p>On autorise tout en sortie:</p>
  504. <pre><code># iptables -P OUTPUT ACCEPT
  505. # ip6tables -P OUTPUT ACCEPT
  506. </code></pre>
  507. <p>Nous allons accepter les connexions déjà établies:</p>
  508. <pre><code># iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
  509. # ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
  510. </code></pre>
  511. <p>En entrée, on commence par interdire tout; on ouvrira les ports suivantles besoins:</p>
  512. <pre><code># iptables -P INPUT DROP
  513. # ip6tables -P INPUT DROP
  514. </code></pre>
  515. <p>Autorisation des connexions <strong>loopback</strong> (internes):</p>
  516. <pre><code># iptables -A INPUT -i lo -j ACCEPT
  517. # ip6tables -A INPUT -i lo -j ACCEPT
  518. </code></pre>
  519. <p>Nous allons interdire les paquets marqués <strong>INVALID</strong>; il faudra auparavant accepter les paquets <strong>ICMPv6 Neighbor Discovery</strong> qui apparaissent invalides:</p>
  520. <pre><code>#iptables -A INPUT -p 41 -j ACCEPT
  521. #ip6tables -A INPUT -p 41 -j ACCEPT
  522. # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
  523. # ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
  524. </code></pre>
  525. <p>Pour IPV6, il faut rajouter la règle suivante qui permet de faire passer le protocol de découverte des ordinateurs sur le même réseau:</p>
  526. <pre><code># ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
  527. </code></pre>
  528. <p>L'adresse fe80:: est l'adresse ipv6 valable uniquement sur le réseau local.</p>
  529. <p>On accepte les paquets <strong>ping</strong>:</p>
  530. <pre><code># iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
  531. # ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate NEW -j ACCEPT
  532. </code></pre>
  533. <p>On peut maintenant accepter les nouveaux paquets entrants. Les connexions entrantes doivent commencer avec un paquet <strong>SYNC</strong>. Elles seront rejetées si ce n'est pas le cas:</p>
  534. <pre><code># iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  535. # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
  536. # ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  537. # ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
  538. </code></pre>
  539. <p>On rejette les paquets du protocole <strong>icmp unreachable</strong></p>
  540. <pre><code># iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
  541. # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  542. # ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
  543. # ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  544. </code></pre>
  545. <p>Pour IPV6, nous pouvons rajouter un filtrage pour le "kernel reverse path filter":</p>
  546. <pre><code># ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
  547. # ip6tables -t raw -A PREROUTING -j DROP
  548. </code></pre>
  549. <p>On accepte les paquets <strong>ssh</strong> sur le port 22 (changez ce port si vous avez configuré vos ports différemment)</p>
  550. <pre><code># iptables -A TCP -p tcp --dport 22 -j ACCEPT
  551. # ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
  552. </code></pre>
  553. <p>Règles pour le DNS et NTP (ports 53 et 41)</p>
  554. <pre><code># iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  555. # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  556. # iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  557. # iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  558. # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
  559. # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
  560. </code></pre>
  561. <p>La même chose pour IPV6:</p>
  562. <pre><code># ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  563. # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  564. # ip6tables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  565. # ip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  566. # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
  567. # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
  568. </code></pre>
  569. <p>Nous pouvons maintenant lister nos règles. Nous allons commencer par IPV4:</p>
  570. <p>Listons les règles actuelles, ensuite ajoutons 2 règles et sauvons celles-ci, puis listons le résultat. Vous pouvez faire de même pour toutes les règles.</p>
  571. <pre><code>root@atom:/etc/iptables# cat rules.v4
  572. # Generated by iptables-save v1.6.0 on Sun Feb 11 14:27:32 2018
  573. *filter
  574. :INPUT ACCEPT [491:50774]
  575. :FORWARD ACCEPT [0:0]
  576. :OUTPUT ACCEPT [267:23983]
  577. COMMIT
  578. # Completed on Sun Feb 11 14:27:32 2018
  579. root@atom:/etc/iptables# iptables -N TCP
  580. root@atom:/etc/iptables# iptables -N UDP
  581. root@atom:/etc/iptables# service netfilter-persistent save
  582. [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
  583. run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
  584. done.
  585. root@atom:/etc/iptables# cat rules.v4
  586. # Generated by iptables-save v1.6.0 on Sun Feb 11 14:28:24 2018
  587. *filter
  588. :INPUT ACCEPT [13:888]
  589. :FORWARD ACCEPT [0:0]
  590. :OUTPUT ACCEPT [8:944]
  591. :TCP - [0:0]
  592. :UDP - [0:0]
  593. COMMIT
  594. # Completed on Sun Feb 11 14:28:24 2018
  595. </code></pre>
  596. <p>Ne pas oublier de valider la règle d'acceptation des connexions existantes AVANT d'entrer la règle INPUT DROP sinon, vous perdez toute connexion avec votre serveur :).</p>
  597. <p>Il suffit de répéter pour les autres règles puis pour IPV6.</p>
  598. <p>Nous obtenons donc les règles suivantes:</p>
  599. <p>Pour IPV4:</p>
  600. <pre><code>root@atom:/etc/iptables# cat rules.v4
  601. # Generated by iptables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  602. *filter
  603. :INPUT DROP [0:0]
  604. :FORWARD DROP [0:0]
  605. :OUTPUT ACCEPT [105:27592]
  606. :TCP - [0:0]
  607. :UDP - [0:0]
  608. -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
  609. -A INPUT -i lo -j ACCEPT
  610. -A INPUT -m conntrack --ctstate INVALID -j DROP
  611. -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
  612. -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  613. -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
  614. -A INPUT -j REJECT --reject-with icmp-proto-unreachable
  615. -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  616. -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
  617. COMMIT
  618. # Completed on Sun Feb 11 15:33:41 2018
  619. root@atom:/etc/iptables#
  620. </code></pre>
  621. <p>Pour IPV6:</p>
  622. <pre><code>root@atom:/etc/iptables# cat rules.v6
  623. # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  624. *raw
  625. :PREROUTING ACCEPT [0:0]
  626. :OUTPUT ACCEPT [0:0]
  627. -A PREROUTING -m rpfilter -j ACCEPT
  628. -A PREROUTING -j DROP
  629. COMMIT
  630. # Completed on Sun Feb 11 15:33:41 2018
  631. # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  632. *filter
  633. :INPUT DROP [1:144]
  634. :FORWARD DROP [0:0]
  635. :OUTPUT ACCEPT [0:0]
  636. :TCP - [0:0]
  637. :UDP - [0:0]
  638. -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
  639. -A INPUT -i lo -j ACCEPT
  640. -A INPUT -p ipv6 -j ACCEPT
  641. -A INPUT -m conntrack --ctstate INVALID -j DROP
  642. -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  643. -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
  644. -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  645. -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
  646. -A OUTPUT -p ipv6-icmp -j ACCEPT
  647. -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
  648. COMMIT
  649. # Completed on Sun Feb 11 15:33:41 2018
  650. root@atom:/etc/iptables#
  651. </code></pre>
  652. <h2 id="test-dns-et-du-serveur-de-temps-avec-iptables-actif">Test DNS et du serveur de temps (avec iptables actif)</h2>
  653. <pre><code>root@atom:/home/ericadmin# nslookup www.gnome.org
  654. Server: 192.168.111.254
  655. Address: 192.168.111.254#53
  656. Non-authoritative answer:
  657. www.gnome.org canonical name = proxy.gnome.org.
  658. Name: proxy.gnome.org
  659. Address: 209.132.180.168
  660. Name: proxy.gnome.org
  661. Address: 209.132.180.180
  662. root@atom:/home/ericadmin# timedatectl status
  663. Local time: dim. 2018-04-01 12:26:57 CEST
  664. Universal time: dim. 2018-04-01 10:26:57 UTC
  665. RTC time: dim. 2018-04-01 10:26:58
  666. Time zone: Europe/Paris (CEST, +0200)
  667. Network time on: yes
  668. NTP synchronized: yes
  669. RTC in local TZ: no
  670. </code></pre>
  671. <p>Ça fonctionne.</p>
  672. <p>Il faut re-tester la connectivité en IPV4 et IPV6</p>
  673. <ol>
  674. <li>Serveur -&gt; extérieur</li>
  675. <li>Extérieur -&gt; serveur</li>
  676. </ol>
  677. <p>On peut utiliser l'adresse <strong>ipv6.google.com</strong> pour vérifier la connexion IPV6 en dehors du réseau local.</p>
  678. </div>
  679. </div>
  680. <footer>
  681. <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
  682. <a href="../Installation-Fail2ban/" class="btn btn-neutral float-right" title="Contrer les attaques de brute-force avec fail2ban">Next <span class="icon icon-circle-arrow-right"></span></a>
  683. <a href="../Installation-Serveur-Temps/" class="btn btn-neutral" title="Installation d'un serveur de temps"><span class="icon icon-circle-arrow-left"></span> Previous</a>
  684. </div>
  685. <hr/>
  686. <div role="contentinfo">
  687. <!-- Copyright etc -->
  688. </div>
  689. 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>.
  690. </footer>
  691. </div>
  692. </div>
  693. </section>
  694. </div>
  695. <div class="rst-versions" role="note" aria-label="versions">
  696. <span class="rst-current-version" data-toggle="rst-current-version">
  697. <span><a href="../Installation-Serveur-Temps/" style="color: #fcfcfc;">&laquo; Previous</a></span>
  698. <span style="margin-left: 15px"><a href="../Installation-Fail2ban/" style="color: #fcfcfc">Next &raquo;</a></span>
  699. </span>
  700. </div>
  701. <script>var base_url = '../../..';</script>
  702. <script src="../../../js/theme.js" defer></script>
  703. <script src="../../../search/main.js" defer></script>
  704. <script defer>
  705. window.onload = function () {
  706. SphinxRtdTheme.Navigation.enable(true);
  707. };
  708. </script>
  709. </body>
  710. </html>