index.html 35 KB

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