index.html 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985
  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. <title>Installation d'un pare-feu - The Yojik Server Installation Guide</title>
  9. <link rel="shortcut icon" href="../img/favicon.ico">
  10. <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
  11. <link rel="stylesheet" href="../css/theme.css" type="text/css" />
  12. <link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
  13. <link rel="stylesheet" href="../css/highlight.css">
  14. <script>
  15. // Current page data
  16. var mkdocs_page_name = "Installation d'un pare-feu";
  17. var mkdocs_page_input_path = "5-cinq.md";
  18. var mkdocs_page_url = "/5-cinq/";
  19. </script>
  20. <script src="../js/jquery-2.1.1.min.js"></script>
  21. <script src="../js/modernizr-2.8.3.min.js"></script>
  22. <script type="text/javascript" src="../js/highlight.pack.js"></script>
  23. <script src="../js/theme.js"></script>
  24. </head>
  25. <body class="wy-body-for-nav" role="document">
  26. <div class="wy-grid-for-nav">
  27. <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
  28. <div class="wy-side-nav-search">
  29. <a href=".." class="icon icon-home"> The Yojik Server Installation Guide</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" />
  33. </form>
  34. </div>
  35. </div>
  36. <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
  37. <ul class="current">
  38. <li>
  39. <li class="toctree-l1 ">
  40. <a class="" href="..">Home</a>
  41. </li>
  42. <li>
  43. <li>
  44. <li class="toctree-l1 ">
  45. <a class="" href="../1-un/">Installation d'un serveur Debian/Stretch sécurisé</a>
  46. </li>
  47. <li>
  48. <li>
  49. <li class="toctree-l1 ">
  50. <a class="" href="../2-deux/">Premières étapes de sécurisation du serveur</a>
  51. </li>
  52. <li>
  53. <li>
  54. <li class="toctree-l1 ">
  55. <a class="" href="../3-trois/">Configuration du réseau</a>
  56. </li>
  57. <li>
  58. <li>
  59. <li class="toctree-l1 ">
  60. <a class="" href="../4-quatre/">Installation d'un serveur de temps</a>
  61. </li>
  62. <li>
  63. <li>
  64. <li class="toctree-l1 current">
  65. <a class="current" href="./">Installation d'un pare-feu</a>
  66. <ul>
  67. <li class="toctree-l3"><a href="#installation-dun-pare-feu">Installation d'un pare-feu</a></li>
  68. <li><a class="toctree-l4" href="#installation-de-iptables">Installation de iptables</a></li>
  69. <li><a class="toctree-l4" href="#configuration-des-regles-iptables">Configuration des règles iptables</a></li>
  70. <li><a class="toctree-l4" href="#test-dns-et-du-serveur-de-temps-avec-iptables-actif">Test DNS et du serveur de temps (avec iptables actif)</a></li>
  71. <li><a class="toctree-l4" href="#installation-de-ufw">Installation de ufw</a></li>
  72. <li><a class="toctree-l4" href="#configuration-de-ufw">Configuration de ufw</a></li>
  73. <li><a class="toctree-l4" href="#activation-du-pare-feu">Activation du pare-feu:</a></li>
  74. <li><a class="toctree-l4" href="#verification">Vérification:</a></li>
  75. <li><a class="toctree-l4" href="#pour-desactiver-le-pare-feu">Pour désactiver le pare-feu:</a></li>
  76. <li><a class="toctree-l4" href="#activation-du-logging-des-actions-de-ufw">Activation du logging des actions de ufw</a></li>
  77. </ul>
  78. </li>
  79. <li>
  80. <li>
  81. <li class="toctree-l1 ">
  82. <a class="" href="../6-six/">Contrer les attaques de brute-force avec fail2ban</a>
  83. </li>
  84. <li>
  85. <li>
  86. <li class="toctree-l1 ">
  87. <a class="" href="../7-sept/">Installation d'un serveur de courrier basique</a>
  88. </li>
  89. <li>
  90. <li>
  91. <li class="toctree-l1 ">
  92. <a class="" href="../8-huit/">Installation du serveur DNS</a>
  93. </li>
  94. <li>
  95. <li>
  96. <li class="toctree-l1 ">
  97. <a class="" href="../9-neuf/">Installation d'un serveur web</a>
  98. </li>
  99. <li>
  100. <li>
  101. <li class="toctree-l1 ">
  102. <a class="" href="../10-dix/">Installation de dovecot et de l'authentification</a>
  103. </li>
  104. <li>
  105. <li>
  106. <li class="toctree-l1 ">
  107. <a class="" href="../11-onze/">Installation des certificats letsencrypt</a>
  108. </li>
  109. <li>
  110. <li>
  111. <li class="toctree-l1 ">
  112. <a class="" href="../12-douze/">Ajout des enregistrements SPF et DKIM au fichier de zone DNS</a>
  113. </li>
  114. <li>
  115. <li>
  116. <li class="toctree-l1 ">
  117. <a class="" href="../17-dixsept/">Installation de programmes de surveillance du serveur</a>
  118. </li>
  119. <li>
  120. <li>
  121. <li class="toctree-l1 ">
  122. <a class="" href="../18-dixhuit/">Installation d'un webmail</a>
  123. </li>
  124. <li>
  125. <li>
  126. <li class="toctree-l1 ">
  127. <a class="" href="../19-dixneuf/">Installation de git et de gogs</a>
  128. </li>
  129. <li>
  130. </ul>
  131. </div>
  132. &nbsp;
  133. </nav>
  134. <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
  135. <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
  136. <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
  137. <a href="..">The Yojik Server Installation Guide</a>
  138. </nav>
  139. <div class="wy-nav-content">
  140. <div class="rst-content">
  141. <div role="navigation" aria-label="breadcrumbs navigation">
  142. <ul class="wy-breadcrumbs">
  143. <li><a href="..">Docs</a> &raquo;</li>
  144. <li>Installation d'un pare-feu</li>
  145. <li class="wy-breadcrumbs-aside">
  146. </li>
  147. </ul>
  148. <hr/>
  149. </div>
  150. <div role="main">
  151. <div class="section">
  152. <p></p>
  153. <h2 id="installation-dun-pare-feu">Installation d'un pare-feu</h2>
  154. <p>J'ai utilisé depuis toujours <strong>iptables</strong> "brut". Ayant lu beaucoup de bien de <strong>ufw</strong>, je vais tenter une installation de ce dernier.</p>
  155. <p>Après usage, il s'avère difficile de configurer <strong>fail2ban</strong> avec <strong>ufw</strong>.</p>
  156. <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>
  157. <h3 id="installation-de-iptables">Installation de iptables</h3>
  158. <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>
  159. <pre><code class="shell">root@atom:/home/ericadmin# apt install iptables-persistent
  160. Lecture des listes de paquets... Fait
  161. Construction de l'arbre des dépendances
  162. Lecture des informations d'état... Fait
  163. The following additional packages will be installed:
  164. netfilter-persistent
  165. Les NOUVEAUX paquets suivants seront installés :
  166. iptables-persistent netfilter-persistent
  167. 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
  168. Il est nécessaire de prendre 19,5 ko dans les archives.
  169. Après cette opération, 79,9 ko d'espace disque supplémentaires seront utilisés.
  170. Souhaitez-vous continuer ? [O/n] o
  171. Réception de:1 http://deb.debian.org/debian stretch/main amd64 netfilter-persistent all 1.0.4+nmu2 [8 792 B]
  172. Réception de:2 http://deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10,7 kB]
  173. 19,5 ko réceptionnés en 0s (198 ko/s)
  174. Préconfiguration des paquets...
  175. Sélection du paquet netfilter-persistent précédemment désélectionné.
  176. (Lecture de la base de données... 36713 fichiers et répertoires déjà installés.)
  177. Préparation du dépaquetage de .../netfilter-persistent_1.0.4+nmu2_all.deb ...
  178. Dépaquetage de netfilter-persistent (1.0.4+nmu2) ...
  179. Sélection du paquet iptables-persistent précédemment désélectionné.
  180. Préparation du dépaquetage de .../iptables-persistent_1.0.4+nmu2_all.deb ...
  181. Dépaquetage de iptables-persistent (1.0.4+nmu2) ...
  182. Paramétrage de netfilter-persistent (1.0.4+nmu2) ...
  183. Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service → /lib/systemd/system/netfilter-persistent.service.
  184. update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
  185. Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
  186. Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
  187. Paramétrage de iptables-persistent (1.0.4+nmu2) ...
  188. root@atom:/home/ericadmin#
  189. </code></pre>
  190. <p>Nous obtenons donc 2 fichiers de configuration, /etc/iptables/rules.v4 et /etc/iptables/rules.v6.</p>
  191. <p>En listant ces fichiers, aucune règle n'est encore enregistrée: tout passe, en entrée et en sortie.</p>
  192. <p>Ces fichiers sont mis à jour grâce aux commandes suivantes.</p>
  193. <pre><code class="shell">iptables-save &gt; /etc/iptables/rules.v4
  194. ip6tables-save &gt; /etc/iptables/rules.v6
  195. </code></pre>
  196. <p>Les commandes disponibles pour <strong>netfilter-persistent</strong> sont les suivantes:</p>
  197. <ul>
  198. <li>systemctl start netfilter-persistent</li>
  199. <li>systemctl stop netfilter-persistent</li>
  200. <li>systemctl restart netfilter-persistent</li>
  201. <li>systemctl stop netfilter-persistent</li>
  202. <li>systemctl status netfilter-persistent</li>
  203. </ul>
  204. <p>Exemples d'utilisation suivant l'état de <strong>netfilter-persistent</strong>:</p>
  205. <pre><code class="shell">root@atom:/home/ericadmin# systemctl stop netfilter-persistent
  206. root@atom:/home/ericadmin# systemctl status netfilter-persistent
  207. ● (**point en rouge**) netfilter-persistent.service - netfilter persistent configuration
  208. Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
  209. Active: failed (Result: exit-code) since Sun 2018-02-11 13:50:22 CET; 13s ago
  210. Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
  211. Process: 1525 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
  212. Main PID: 1525 (code=exited, status=0/SUCCESS)
  213. févr. 11 13:42:02 atom systemd[1]: Starting netfilter persistent configuration...
  214. févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
  215. févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
  216. févr. 11 13:42:02 atom systemd[1]: Started netfilter persistent configuration.
  217. févr. 11 13:50:22 atom systemd[1]: Stopping netfilter persistent configuration...
  218. févr. 11 13:50:22 atom netfilter-persistent[1629]: Automatic flush disabled; use '/usr/sbin/netfilter-persistent flush'
  219. févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
  220. févr. 11 13:50:22 atom systemd[1]: Stopped netfilter persistent configuration.
  221. févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Unit entered failed state.
  222. févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
  223. root@atom:/home/ericadmin#
  224. root@atom:/home/ericadmin# systemctl start netfilter-persistent
  225. root@atom:/home/ericadmin# systemctl status netfilter-persistent
  226. ● (**point en vert**) netfilter-persistent.service - netfilter persistent configuration
  227. Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
  228. Active: active (exited) since Sun 2018-02-11 13:51:09 CET; 2s ago
  229. Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
  230. Process: 1641 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
  231. Main PID: 1641 (code=exited, status=0/SUCCESS)
  232. févr. 11 13:51:09 atom systemd[1]: Starting netfilter persistent configuration...
  233. févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
  234. févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
  235. févr. 11 13:51:09 atom systemd[1]: Started netfilter persistent configuration.
  236. root@atom:/home/ericadmin#
  237. </code></pre>
  238. <p>Pour sauver des règles “entrées à la main”, tapez:</p>
  239. <pre><code class="shell">root@atom:/home/ericadmin# service netfilter-persistent save
  240. [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
  241. run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
  242. done.
  243. root@atom:/home/ericadmin#
  244. </code></pre>
  245. <p>ou</p>
  246. <pre><code class="shell">root@atom:/home/ericadmin# iptables-save &gt; /etc/iptables/rules.v4
  247. root@atom:/home/ericadmin# ip6tables-save &gt; /etc/iptables/rules.v6
  248. </code></pre>
  249. <h3 id="configuration-des-regles-iptables">Configuration des règles iptables</h3>
  250. <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>
  251. <pre><code class="shell">#! /bin/sh
  252. ### BEGIN INIT INFO
  253. # Provides: PersonalFirewall
  254. # Required-Start: $remote_fs $syslog
  255. # Required-Stop: $remote_fs $syslog
  256. # Default-Start: 2 3 4 5
  257. # Default-Stop: 0 1 6
  258. # Short-Description: Personal Firewall
  259. # Description:
  260. ### END INIT INFO
  261. # programme iptables IPV4 et IPV6
  262. IPT=/sbin/iptables
  263. IP6T=/sbin/ip6tables
  264. # Les IPs
  265. IPMAISON=192.168.111.150
  266. IP6MAISON=fe80::1e6f:65ff:fe92:dd1f
  267. # fonction qui démarre le firewall
  268. do_start() {
  269. # Efface toutes les règles en cours. -F toutes. -X utilisateurs
  270. $IPT -t filter -F
  271. $IPT -t filter -X
  272. $IPT -t nat -F
  273. $IPT -t nat -X
  274. $IPT -t mangle -F
  275. $IPT -t mangle -X
  276. #
  277. $IP6T -t filter -F
  278. $IP6T -t filter -X
  279. # Il n'y a pas de NAT en IPV6
  280. #$IP6T -t nat -F
  281. #$IP6T -t nat -X
  282. $IP6T -t mangle -F
  283. $IP6T -t mangle -X
  284. # stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
  285. $IPT -t filter -P INPUT DROP
  286. $IPT -t filter -P FORWARD DROP
  287. $IPT -t filter -P OUTPUT ACCEPT
  288. #
  289. $IP6T -F INPUT
  290. $IP6T -F FORWARD
  291. $IP6T -X
  292. # Loopback
  293. $IPT -t filter -A INPUT -i lo -j ACCEPT
  294. $IPT -t filter -A OUTPUT -o lo -j ACCEPT
  295. #
  296. $IP6T -t filter -A INPUT -i lo -j ACCEPT
  297. $IP6T -t filter -A OUTPUT -o lo -j ACCEPT
  298. # ICMP
  299. $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
  300. $IPT -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
  301. # Permettre à une connexion ouverte de recevoir du trafic en entrée
  302. $IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  303. #
  304. $IP6T -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  305. $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
  306. $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
  307. $IP6T -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  308. $IP6T -A INPUT -j ACCEPT
  309. $IP6T -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
  310. $IP6T -P INPUT DROP
  311. $IP6T -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
  312. $IP6T -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
  313. $IP6T -A FORWARD -i br0 -j ACCEPT
  314. $IP6T -A FORWARD -i br1 -o sit_sixxs -j ACCEPT
  315. $IP6T -P FORWARD DROP
  316. # DNS:53
  317. # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
  318. $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
  319. $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
  320. # DNS:53
  321. $IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
  322. $IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
  323. # DNS:953
  324. # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
  325. $IPT -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
  326. $IPT -t filter -A INPUT -p udp --dport 953 -j ACCEPT
  327. #
  328. $IP6T -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
  329. $IP6T -t filter -A INPUT -p udp --dport 953 -j ACCEPT
  330. # accepte tout d'une ip en TCP (de la maison)
  331. $IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
  332. $IP6T -t filter -A INPUT -p tcp -s $IP6MAISON -j ACCEPT
  333. # ssh
  334. $IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  335. $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
  336. #
  337. $IP6T -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
  338. $IP6T -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
  339. #NTP out
  340. $IPT -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
  341. $IP6T -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
  342. # # HTTP + HTTPS Out
  343. # $IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  344. # $IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
  345. # $IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
  346. # $IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
  347. # # HTTP + HTTPS In
  348. # $IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
  349. # $IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
  350. # $IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
  351. # $IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
  352. # # Mail SMTP:25
  353. # $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
  354. # $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
  355. # $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
  356. # $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
  357. # # Mail SMTP:587
  358. # $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
  359. # $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
  360. # $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
  361. # $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
  362. # # Mail IMAP:143
  363. # $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
  364. # $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
  365. # $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
  366. # $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
  367. # # Mail IMAPS:993
  368. # $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
  369. # $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
  370. # $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
  371. # $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
  372. # # Mail 465
  373. # $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
  374. # $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
  375. # $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
  376. # $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
  377. #
  378. echo &quot;firewall started [OK]&quot;
  379. }
  380. # fonction qui arrête le firewall
  381. do_stop() {
  382. # Efface toutes les règles
  383. $IPT -t filter -F
  384. $IPT -t filter -X
  385. $IPT -t nat -F
  386. $IPT -t nat -X
  387. $IPT -t mangle -F
  388. $IPT -t mangle -X
  389. #
  390. $IP6T -t filter -F
  391. $IP6T -t filter -X
  392. #$IP6T -t nat -F
  393. #$IP6T -t nat -X
  394. $IP6T -t mangle -F
  395. $IP6T -t mangle -X
  396. # remet la stratégie
  397. $IPT -t filter -P INPUT ACCEPT
  398. $IPT -t filter -P OUTPUT ACCEPT
  399. $IPT -t filter -P FORWARD ACCEPT
  400. #
  401. $IP6T -t filter -P INPUT ACCEPT
  402. $IP6T -t filter -P OUTPUT ACCEPT
  403. $IP6T -t filter -P FORWARD ACCEPT
  404. #
  405. echo &quot;firewall stopped [OK]&quot;
  406. }
  407. # fonction status firewall
  408. do_status() {
  409. # affiche les règles en cours
  410. clear
  411. echo Status IPV4
  412. echo --
  413. $IPT -L -n -v
  414. echo
  415. echo --
  416. echo
  417. echo status IPV6
  418. echo --
  419. $IP6T -L -n -v
  420. echo
  421. }
  422. case &quot;$1&quot; in
  423. start)
  424. do_start
  425. # quitte sans erreur
  426. exit 0
  427. ;;
  428. stop)
  429. do_stop
  430. # quitte sans erreur
  431. exit 0
  432. ;;
  433. restart)
  434. do_stop
  435. do_start
  436. # quitte sans erreur
  437. exit 0
  438. ;;
  439. status)
  440. do_status
  441. # quitte sans erreurs
  442. exit 0
  443. ;;
  444. *)
  445. # Si on ne tape ni &quot;start&quot; ni &quot;stop&quot;... on affiche une erreur
  446. echo &quot;Usage: /etc/init.d/firewall {start|stop|restart|status}&quot;
  447. # quitte le script avec un etat &quot;en erreur&quot;
  448. exit 1
  449. ;;
  450. esac
  451. </code></pre>
  452. <p>Explications:</p>
  453. <pre><code class="shell">Création de 4 chaînes pour faciliter les opérations:
  454. # iptables -N TCP
  455. # iptables -N UDP
  456. # ip6tables -N TCP
  457. # ip6tables -N UDP
  458. On est sur un serveur, pas un routeur, donc, on interdit la règle FORWARD:
  459. # iptables -P FORWARD DROP
  460. # ip6tables -P FORWARD DROP
  461. On autorise tout en sortie:
  462. # iptables -P OUTPUT ACCEPT
  463. # ip6tables -P OUTPUT ACCEPT
  464. Nous allons accepter les connexions déjà établies:
  465. # iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  466. # ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  467. En entrée, on commence par interdire tout; on ouvrira les ports suivantles besoins:
  468. # iptables -P INPUT DROP
  469. # ip6tables -P INPUT DROP
  470. Aoristaion des connexions **loopback** (internes):
  471. # iptables -A INPUT -i lo -j ACCEPT
  472. # ip6tables -A INPUT -i lo -j ACCEPT
  473. Nous allons interdire les paquets marqués **INVALID**; il faudra auparavant accepter les paquets **ICMPv6 Neighbor Discovery** qui apparaissent invalides:
  474. #iptables -A INPUT -p 41 -j ACCEPT
  475. #ip6tables -A INPUT -p 41 -j ACCEPT
  476. # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
  477. # ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
  478. 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:
  479. # ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
  480. L'adresse fe80:: est l'adresse ipv6 valable uniquement sur le réseau local.
  481. On accepte les paquets **ping**:
  482. # iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
  483. # ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate NEW -j ACCEPT
  484. On peut maintenant accepter les nouveaux paquets entrants. Les connexions entrantes doivent commencer avec un paquet **SYNC**. Elles seront rejetées si ce n'est pas le cas:
  485. # iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  486. # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
  487. # ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  488. # ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
  489. On rejette les paquets du protocole **icmp unreachable**
  490. # iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
  491. # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  492. # ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
  493. # ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  494. Pour IPV6, nous pouvons rajouter un filtrage pour le &quot;kernel reverse path filter&quot;:
  495. # ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
  496. # ip6tables -t raw -A PREROUTING -j DROP
  497. On accepte les paquets **ssh** sur le port 22 (changez ce port si vous avez configuré vos ports différemment)
  498. # iptables -A TCP -p tcp --dport 22 -j ACCEPT
  499. # ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
  500. Règles pour le DNS et NTP (ports 53 et 41)
  501. # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  502. # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  503. # iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  504. # iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  505. # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
  506. # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
  507. La même chose pour IPV6:
  508. # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  509. # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  510. # ip6tables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
  511. # ip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
  512. # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
  513. # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
  514. Nous pouvons maintenant lister nos règles. Nous allons commencer par IPV4:
  515. 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.
  516. ```shell
  517. root@atom:/etc/iptables# cat rules.v4
  518. # Generated by iptables-save v1.6.0 on Sun Feb 11 14:27:32 2018
  519. *filter
  520. :INPUT ACCEPT [491:50774]
  521. :FORWARD ACCEPT [0:0]
  522. :OUTPUT ACCEPT [267:23983]
  523. COMMIT
  524. # Completed on Sun Feb 11 14:27:32 2018
  525. root@atom:/etc/iptables# iptables -N TCP
  526. root@atom:/etc/iptables# iptables -N UDP
  527. root@atom:/etc/iptables# service netfilter-persistent save
  528. [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
  529. run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
  530. done.
  531. root@atom:/etc/iptables# cat rules.v4
  532. # Generated by iptables-save v1.6.0 on Sun Feb 11 14:28:24 2018
  533. *filter
  534. :INPUT ACCEPT [13:888]
  535. :FORWARD ACCEPT [0:0]
  536. :OUTPUT ACCEPT [8:944]
  537. :TCP - [0:0]
  538. :UDP - [0:0]
  539. COMMIT
  540. # Completed on Sun Feb 11 14:28:24 2018
  541. </code></pre>
  542. <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>
  543. <p>Il suffit de répéter pour les autres règles puis pour IPV6.</p>
  544. <p>Nous obtenons donc les règles suivantes:</p>
  545. <p>Pour IPV4:</p>
  546. <pre><code class="shell">root@atom:/etc/iptables# cat rules.v4
  547. # Generated by iptables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  548. *filter
  549. :INPUT DROP [0:0]
  550. :FORWARD DROP [0:0]
  551. :OUTPUT ACCEPT [105:27592]
  552. :TCP - [0:0]
  553. :UDP - [0:0]
  554. -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  555. -A INPUT -i lo -j ACCEPT
  556. -A INPUT -m conntrack --ctstate INVALID -j DROP
  557. -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
  558. -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  559. -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
  560. -A INPUT -j REJECT --reject-with icmp-proto-unreachable
  561. -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  562. -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
  563. COMMIT
  564. # Completed on Sun Feb 11 15:33:41 2018
  565. root@atom:/etc/iptables#
  566. </code></pre>
  567. <p>Pour IPV6:</p>
  568. <pre><code class="shell">root@atom:/etc/iptables# cat rules.v6
  569. # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  570. *raw
  571. :PREROUTING ACCEPT [0:0]
  572. :OUTPUT ACCEPT [0:0]
  573. -A PREROUTING -m rpfilter -j ACCEPT
  574. -A PREROUTING -j DROP
  575. COMMIT
  576. # Completed on Sun Feb 11 15:33:41 2018
  577. # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
  578. *filter
  579. :INPUT DROP [1:144]
  580. :FORWARD DROP [0:0]
  581. :OUTPUT ACCEPT [0:0]
  582. :TCP - [0:0]
  583. :UDP - [0:0]
  584. -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  585. -A INPUT -i lo -j ACCEPT
  586. -A INPUT -p ipv6 -j ACCEPT
  587. -A INPUT -m conntrack --ctstate INVALID -j DROP
  588. -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
  589. -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
  590. -A INPUT -p tcp -j REJECT --reject-with tcp-reset
  591. -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
  592. -A OUTPUT -p ipv6-icmp -j ACCEPT
  593. -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
  594. COMMIT
  595. # Completed on Sun Feb 11 15:33:41 2018
  596. root@atom:/etc/iptables#
  597. </code></pre>
  598. <h3 id="test-dns-et-du-serveur-de-temps-avec-iptables-actif">Test DNS et du serveur de temps (avec iptables actif)</h3>
  599. <pre><code class="shell">root@atom:/home/ericadmin# nslookup www.gnome.org
  600. Server: 192.168.111.254
  601. Address: 192.168.111.254#53
  602. Non-authoritative answer:
  603. www.gnome.org canonical name = proxy.gnome.org.
  604. Name: proxy.gnome.org
  605. Address: 209.132.180.168
  606. Name: proxy.gnome.org
  607. Address: 209.132.180.180
  608. root@atom:/home/ericadmin# timedatectl status
  609. Local time: dim. 2018-04-01 12:26:57 CEST
  610. Universal time: dim. 2018-04-01 10:26:57 UTC
  611. RTC time: dim. 2018-04-01 10:26:58
  612. Time zone: Europe/Paris (CEST, +0200)
  613. Network time on: yes
  614. NTP synchronized: yes
  615. RTC in local TZ: no
  616. </code></pre>
  617. <p>Ça fonctionne.</p>
  618. <h3 id="installation-de-ufw">Installation de <strong>ufw</strong></h3>
  619. <p>J'avais (ai) choisi <strong>ufw</strong>; je ne l'ai encore jamais utilisé, donc, c'est l'occasion! Finalement, pas un très bon plan, même si cela a l'air très facile en premier lieu ... je vais rester sur du <strong>iptables</strong> brut avec <strong><em>iptables-persistent</em></strong>.</p>
  620. <p>Son installation est détaillée dans le paragraphe ci-dessus.</p>
  621. <pre><code class="shell">root@atom:/home/ericadmin# apt install ufw
  622. Lecture des listes de paquets... Fait
  623. Construction de l'arbre des dépendances
  624. Lecture des informations d'état... Fait
  625. Les NOUVEAUX paquets suivants seront installés :
  626. ufw
  627. 0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
  628. Il est nécessaire de prendre 164 ko dans les archives.
  629. Après cette opération, 848 ko d'espace disque supplémentaires seront utilisés.
  630. Réception de:1 http://deb.debian.org/debian stretch/main i386 ufw all 0.35-4 [164 kB]
  631. 164 ko réceptionnés en 0s (1 239 ko/s)
  632. Préconfiguration des paquets...
  633. Sélection du paquet ufw précédemment désélectionné.
  634. (Lecture de la base de données... 31776 fichiers et répertoires déjà installés.)
  635. Préparation du dépaquetage de .../archives/ufw_0.35-4_all.deb ...
  636. Dépaquetage de ufw (0.35-4) ...
  637. Paramétrage de ufw (0.35-4) ...
  638. Creating config file /etc/ufw/before.rules with new version
  639. Creating config file /etc/ufw/before6.rules with new version
  640. Creating config file /etc/ufw/after.rules with new version
  641. Creating config file /etc/ufw/after6.rules with new version
  642. Created symlink /etc/systemd/system/multi-user.target.wants/ufw.service → /lib/systemd/system/ufw.service.
  643. Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
  644. Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
  645. Traitement des actions différées (« triggers ») pour rsyslog (8.24.0-1) ...
  646. </code></pre>
  647. <h3 id="configuration-de-ufw">Configuration de <strong>ufw</strong></h3>
  648. <p>Après installation, le pare-feu est inactif.</p>
  649. <pre><code class="shell">root@atom:/home/ericadmin# ufw status
  650. Status: inactive
  651. root@atom:/home/ericadmin#
  652. </code></pre>
  653. <p>Nous allons autoriser les connexions <strong>ssh</strong> et <strong>ntp</strong>, seuls services en place pour l'instant.</p>
  654. <pre><code class="shell">root@atom:/home/ericadmin# ufw allow 22
  655. Rules updated
  656. Rules updated (v6)
  657. root@atom:/home/ericadmin#
  658. root@atom:/etc/fail2ban# ufw allow ntp
  659. Rule added
  660. Rule added (v6)
  661. </code></pre>
  662. <h3 id="activation-du-pare-feu">Activation du pare-feu:</h3>
  663. <pre><code class="shell">root@atom:/home/ericadmin# ufw enable
  664. Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
  665. Firewall is active and enabled on system startup
  666. root@atom:/home/ericadmin#
  667. </code></pre>
  668. <h3 id="verification">Vérification:</h3>
  669. <pre><code class="shell">root@atom:/home/ericadmin# ufw status
  670. Status: active
  671. To Action From
  672. -- -
  673. 22 ALLOW Anywhere
  674. 123 ALLOW Anywhere
  675. 22 (v6) ALLOW Anywhere (v6)
  676. 123 (v6) ALLOW Anywhere (v6)
  677. root@atom:/home/ericadmin#
  678. </code></pre>
  679. <p>Les connexions <strong>ssh</strong> et <strong>ntp</strong> sont autorisées, en <strong>IPV4</strong> et <strong>IPV6</strong>.</p>
  680. <p>Nous ajouterons des règles en fonction des services utilisés.</p>
  681. <h3 id="pour-desactiver-le-pare-feu">Pour désactiver le pare-feu:</h3>
  682. <pre><code class="shell">ufw disable
  683. </code></pre>
  684. <h3 id="activation-du-logging-des-actions-de-ufw">Activation du logging des actions de <strong>ufw</strong></h3>
  685. <pre><code class="shell">root@atom:/home/ericadmin# ufw logging on
  686. Logging enabled
  687. root@atom:/home/ericadmin#
  688. </code></pre>
  689. <p>Vous pouvez voir l'ensemble des commandes de <strong>ufw</strong> en tapant:</p>
  690. <pre><code class="shell">root@atom:/home/ericadmin# ufw --help
  691. Usage: ufw COMMAND
  692. Commands:
  693. enable enables the firewall
  694. disable disables the firewall
  695. default ARG set default policy
  696. logging LEVEL set logging to LEVEL
  697. allow ARGS add allow rule
  698. deny ARGS add deny rule
  699. reject ARGS add reject rule
  700. limit ARGS add limit rule
  701. delete RULE|NUM delete RULE
  702. insert NUM RULE insert RULE at NUM
  703. route RULE add route RULE
  704. route delete RULE|NUM delete route RULE
  705. route insert NUM RULE insert route RULE at NUM
  706. reload reload firewall
  707. reset reset firewall
  708. status show firewall status
  709. status numbered show firewall status as numbered list of RULES
  710. status verbose show verbose firewall status
  711. show ARG show firewall report
  712. version display version information
  713. Application profile commands:
  714. app list list application profiles
  715. app info PROFILE show information on PROFILE
  716. app update PROFILE update PROFILE
  717. app default ARG set default application policy
  718. root@atom:/home/ericadmin#
  719. </code></pre>
  720. <p>Il faut re-tester la connectivité en IPV4 et IPV6</p>
  721. <ol>
  722. <li>Serveur -&gt; extérieur</li>
  723. <li>Extérieur -&gt; serveur</li>
  724. </ol>
  725. <p>On peut utiliser l'adresse <strong>ipv6.google.com</strong> pour vérifier la connexion IPV6 en dehors du réseau local.</p>
  726. </div>
  727. </div>
  728. <footer>
  729. <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
  730. <a href="../6-six/" 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>
  731. <a href="../4-quatre/" class="btn btn-neutral" title="Installation d'un serveur de temps"><span class="icon icon-circle-arrow-left"></span> Previous</a>
  732. </div>
  733. <hr/>
  734. <div role="contentinfo">
  735. <!-- Copyright etc -->
  736. </div>
  737. Built with <a href="http://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>.
  738. </footer>
  739. </div>
  740. </div>
  741. </section>
  742. </div>
  743. <div class="rst-versions" role="note" style="cursor: pointer">
  744. <span class="rst-current-version" data-toggle="rst-current-version">
  745. <span><a href="../4-quatre/" style="color: #fcfcfc;">&laquo; Previous</a></span>
  746. <span style="margin-left: 15px"><a href="../6-six/" style="color: #fcfcfc">Next &raquo;</a></span>
  747. </span>
  748. </div>
  749. </body>
  750. </html>