1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027 |
- <!DOCTYPE html>
- <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
- <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-
-
- <title>Installation d'un pare-feu - The Yojik Server Installation Guide</title>
-
- <link rel="shortcut icon" href="../img/favicon.ico">
-
- <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
- <link rel="stylesheet" href="../css/theme.css" type="text/css" />
- <link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
- <link rel="stylesheet" href="../css/highlight.css">
-
- <script>
- // Current page data
- var mkdocs_page_name = "Installation d'un pare-feu";
- var mkdocs_page_input_path = "5-cinq.md";
- var mkdocs_page_url = "/5-cinq/";
- </script>
-
- <script src="../js/jquery-2.1.1.min.js"></script>
- <script src="../js/modernizr-2.8.3.min.js"></script>
- <script type="text/javascript" src="../js/highlight.pack.js"></script>
- <script src="../js/theme.js"></script>
-
- </head>
- <body class="wy-body-for-nav" role="document">
- <div class="wy-grid-for-nav">
-
- <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
- <div class="wy-side-nav-search">
- <a href=".." class="icon icon-home"> The Yojik Server Installation Guide</a>
- <div role="search">
- <form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
- <input type="text" name="q" placeholder="Search docs" />
- </form>
- </div>
- </div>
- <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
- <ul class="current">
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="..">Home</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../1-un/">Installation d'un serveur Debian/Stretch sécurisé</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../2-deux/">Premières étapes de sécurisation du serveur</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../3-trois/">Configuration du réseau</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../4-quatre/">Installation d'un serveur de temps</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 current">
- <a class="current" href="./">Installation d'un pare-feu</a>
-
- <ul>
-
- <li class="toctree-l3"><a href="#installation-dun-pare-feu">Installation d'un pare-feu</a></li>
-
- <li><a class="toctree-l4" href="#installation-de-iptables">Installation de iptables</a></li>
-
- <li><a class="toctree-l4" href="#configuration-des-regles-iptables">Configuration des règles iptables</a></li>
-
- <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>
-
- <li><a class="toctree-l4" href="#installation-de-ufw">Installation de ufw</a></li>
-
- <li><a class="toctree-l4" href="#configuration-de-ufw">Configuration de ufw</a></li>
-
- <li><a class="toctree-l4" href="#activation-du-pare-feu">Activation du pare-feu:</a></li>
-
- <li><a class="toctree-l4" href="#verification">Vérification:</a></li>
-
- <li><a class="toctree-l4" href="#pour-desactiver-le-pare-feu">Pour désactiver le pare-feu:</a></li>
-
- <li><a class="toctree-l4" href="#activation-du-logging-des-actions-de-ufw">Activation du logging des actions de ufw</a></li>
-
-
- </ul>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../6-six/">Contrer les attaques de brute-force avec fail2ban</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../7-sept/">Installation d'un serveur de courrier basique</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../8-huit/">Installation du serveur DNS</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../9-neuf/">Installation d'un serveur web</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../10-dix/">Installation de dovecot et de l'authentification</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../11-onze/">Installation des certificats letsencrypt</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../12-douze/">Ajout des enregistrements SPF et DKIM au fichier de zone DNS</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../17-dixsept/">Installation de programmes de surveillance du serveur</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../18-dixhuit/">Installation d'un webmail</a>
-
- </li>
- <li>
-
- <li>
- <li class="toctree-l1 ">
- <a class="" href="../19-dixneuf/">Installation de git et de gogs</a>
-
- </li>
- <li>
-
- </ul>
- </div>
-
- </nav>
- <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
-
- <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
- <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
- <a href="..">The Yojik Server Installation Guide</a>
- </nav>
-
- <div class="wy-nav-content">
- <div class="rst-content">
- <div role="navigation" aria-label="breadcrumbs navigation">
- <ul class="wy-breadcrumbs">
- <li><a href="..">Docs</a> »</li>
-
-
-
- <li>Installation d'un pare-feu</li>
- <li class="wy-breadcrumbs-aside">
-
- </li>
- </ul>
- <hr/>
- </div>
- <div role="main">
- <div class="section">
-
- <p></p>
- <h2 id="installation-dun-pare-feu">Installation d'un pare-feu</h2>
- <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>
- <p>Après usage, il s'avère difficile de configurer <strong>fail2ban</strong> avec <strong>ufw</strong>.</p>
- <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>
- <h3 id="installation-de-iptables">Installation de iptables</h3>
- <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>
- <hr />
- <pre><code>root@aijan:/home/ericadmin# apt install iptables-persistent
- Lecture des listes de paquets... Fait
- Construction de l'arbre des dépendances
- Lecture des informations d'état... Fait
- The following additional packages will be installed:
- netfilter-persistent
- Les NOUVEAUX paquets suivants seront installés :
- iptables-persistent netfilter-persistent
- 0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
- Il est nécessaire de prendre 19,5 ko dans les archives.
- Après cette opération, 79,9 ko d'espace disque supplémentaires seront utilisés.
- Souhaitez-vous continuer ? [O/n] o
- Réception de:1 http://deb.debian.org/debian stretch/main amd64 netfilter-persistent all 1.0.4+nmu2 [8 792 B]
- Réception de:2 http://deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10,7 kB]
- 19,5 ko réceptionnés en 0s (198 ko/s)
- Préconfiguration des paquets...
- Sélection du paquet netfilter-persistent précédemment désélectionné.
- (Lecture de la base de données... 36713 fichiers et répertoires déjà installés.)
- Préparation du dépaquetage de .../netfilter-persistent_1.0.4+nmu2_all.deb ...
- Dépaquetage de netfilter-persistent (1.0.4+nmu2) ...
- Sélection du paquet iptables-persistent précédemment désélectionné.
- Préparation du dépaquetage de .../iptables-persistent_1.0.4+nmu2_all.deb ...
- Dépaquetage de iptables-persistent (1.0.4+nmu2) ...
- Paramétrage de netfilter-persistent (1.0.4+nmu2) ...
- Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service → /lib/systemd/system/netfilter-persistent.service.
- update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
- Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
- Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
- Paramétrage de iptables-persistent (1.0.4+nmu2) ...
- root@aijan:/home/ericadmin#
- </code></pre>
- <hr />
- <p>Vous noterez que le nom du serveur est différent. J'ai testé mon tutoriel sur un nouveau serveur (aijan.yojik.net.)</p>
- <p>Nous obtenons donc 2 fichiers de configuration, /etc/iptables/rules.v4 et /etc/iptables/rules.v6.</p>
- <p>En listant ces fichiers, aucune règle n'est encore enregistrée: tout passe, en entrée et en sortie.</p>
- <p>Ces fichiers sont mis à jour grâce aux commandes suivantes.</p>
- <hr />
- <pre><code>iptables-save > /etc/iptables/rules.v4
- ip6tables-save > /etc/iptables/rules.v6
- </code></pre>
- <hr />
- <p>Les commandes disponibles pour <strong>netfilter-persistent</strong> sont les suivantes:</p>
- <ul>
- <li>systemctl start netfilter-persistent</li>
- <li>systemctl stop netfilter-persistent</li>
- <li>systemctl restart netfilter-persistent</li>
- <li>systemctl stop netfilter-persistent</li>
- <li>systemctl status netfilter-persistent</li>
- </ul>
- <p>Exemples d'utilisation suivant l'état de <strong>netfilter-persistent</strong>:</p>
- <hr />
- <pre><code>root@aijan:/home/ericadmin# systemctl stop netfilter-persistent
- root@aijan:/home/ericadmin# systemctl status netfilter-persistent
- ● (**point en rouge**) netfilter-persistent.service - netfilter persistent configuration
- Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
- Active: failed (Result: exit-code) since Sun 2018-02-11 13:50:22 CET; 13s ago
- Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
- Process: 1525 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
- Main PID: 1525 (code=exited, status=0/SUCCESS)
- févr. 11 13:42:02 aijan systemd[1]: Starting netfilter persistent configuration...
- févr. 11 13:42:02 aijan netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
- févr. 11 13:42:02 aijan netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
- févr. 11 13:42:02 aijan systemd[1]: Started netfilter persistent configuration.
- févr. 11 13:50:22 aijan systemd[1]: Stopping netfilter persistent configuration...
- févr. 11 13:50:22 aijan netfilter-persistent[1629]: Automatic flush disabled; use '/usr/sbin/netfilter-persistent flush'
- févr. 11 13:50:22 aijan systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
- févr. 11 13:50:22 aijan systemd[1]: Stopped netfilter persistent configuration.
- févr. 11 13:50:22 aijan systemd[1]: netfilter-persistent.service: Unit entered failed state.
- févr. 11 13:50:22 aijan systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
- root@aijan:/home/ericadmin#
- root@aijan:/home/ericadmin# systemctl start netfilter-persistent
- root@aijan:/home/ericadmin# systemctl status netfilter-persistent
- ● (**point en vert**) netfilter-persistent.service - netfilter persistent configuration
- Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
- Active: active (exited) since Sun 2018-02-11 13:51:09 CET; 2s ago
- Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
- Process: 1641 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
- Main PID: 1641 (code=exited, status=0/SUCCESS)
- févr. 11 13:51:09 aijan systemd[1]: Starting netfilter persistent configuration...
- févr. 11 13:51:09 aijan netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
- févr. 11 13:51:09 aijan netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
- févr. 11 13:51:09 aijan systemd[1]: Started netfilter persistent configuration.
- root@aijan:/home/ericadmin#
- </code></pre>
- <hr />
- <p>Pour sauver des règles “entrées à la main”, tapez:</p>
- <blockquote>
- <p><strong>service netfilter-persistent save</strong></p>
- </blockquote>
- <hr />
- <pre><code>root@aijan:/home/ericadmin# service netfilter-persistent save
- [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
- run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
- done.
- root@aijan:/home/ericadmin#
- </code></pre>
- <hr />
- <h3 id="configuration-des-regles-iptables">Configuration des règles iptables</h3>
- <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>
- <hr />
- <pre><code>#! /bin/sh
- ### BEGIN INIT INFO
- # Provides: PersonalFirewall
- # Required-Start: $remote_fs $syslog
- # Required-Stop: $remote_fs $syslog
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: Personal Firewall
- # Description:
- ### END INIT INFO
- # programme iptables IPV4 et IPV6
- IPT=/sbin/iptables
- IP6T=/sbin/ip6tables
- # Les IPs
- IPMAISON=192.168.111.150
- IP6MAISON=fe80::1e6f:65ff:fe92:dd1f
- # fonction qui démarre le firewall
- do_start() {
- # Efface toutes les règles en cours. -F toutes. -X utilisateurs
- $IPT -t filter -F
- $IPT -t filter -X
- $IPT -t nat -F
- $IPT -t nat -X
- $IPT -t mangle -F
- $IPT -t mangle -X
- #
- $IP6T -t filter -F
- $IP6T -t filter -X
- # Il n'y a pas de NAT en IPV6
- #$IP6T -t nat -F
- #$IP6T -t nat -X
- $IP6T -t mangle -F
- $IP6T -t mangle -X
- # stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
- $IPT -t filter -P INPUT DROP
- $IPT -t filter -P FORWARD DROP
- $IPT -t filter -P OUTPUT ACCEPT
- #
- $IP6T -F INPUT
- $IP6T -F FORWARD
- $IP6T -X
- # Loopback
- $IPT -t filter -A INPUT -i lo -j ACCEPT
- $IPT -t filter -A OUTPUT -o lo -j ACCEPT
- #
- $IP6T -t filter -A INPUT -i lo -j ACCEPT
- $IP6T -t filter -A OUTPUT -o lo -j ACCEPT
- # ICMP
- $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
- $IPT -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
- # Permettre à une connexion ouverte de recevoir du trafic en entrée
- $IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- #
- $IP6T -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
- $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
- $IP6T -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
- $IP6T -A INPUT -j ACCEPT
- $IP6T -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
- $IP6T -P INPUT DROP
- $IP6T -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
- $IP6T -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
- $IP6T -A FORWARD -i br0 -j ACCEPT
- $IP6T -A FORWARD -i br1 -o sit_sixxs -j ACCEPT
- $IP6T -P FORWARD DROP
- # DNS:53
- # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
- $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
- $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
- # DNS:53
- $IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
- $IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT
- # DNS:953
- # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
- $IPT -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
- $IPT -t filter -A INPUT -p udp --dport 953 -j ACCEPT
- #
- $IP6T -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
- $IP6T -t filter -A INPUT -p udp --dport 953 -j ACCEPT
- # accepte tout d'une ip en TCP (de la maison)
- $IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
- $IP6T -t filter -A INPUT -p tcp -s $IP6MAISON -j ACCEPT
- # ssh
- $IPT -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
- $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
- #
- $IP6T -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
- $IP6T -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT
- #NTP out
- $IPT -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
- $IP6T -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
- # # HTTP + HTTPS Out
- # $IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
- # $IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
- # $IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
- # $IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
- # # HTTP + HTTPS In
- # $IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
- # $IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
- # $IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
- # $IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
- # # Mail SMTP:25
- # $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
- # $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
- # $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
- # $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
- # # Mail SMTP:587
- # $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
- # $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
- # $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
- # $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
- # # Mail IMAP:143
- # $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
- # $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
- # $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
- # $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
- # # Mail IMAPS:993
- # $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
- # $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
- # $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
- # $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
- # # Mail 465
- # $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
- # $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
- # $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
- # $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
- #
- echo "firewall started [OK]"
- }
- # fonction qui arrête le firewall
- do_stop() {
- # Efface toutes les règles
- $IPT -t filter -F
- $IPT -t filter -X
- $IPT -t nat -F
- $IPT -t nat -X
- $IPT -t mangle -F
- $IPT -t mangle -X
- #
- $IP6T -t filter -F
- $IP6T -t filter -X
- #$IP6T -t nat -F
- #$IP6T -t nat -X
- $IP6T -t mangle -F
- $IP6T -t mangle -X
- # remet la stratégie
- $IPT -t filter -P INPUT ACCEPT
- $IPT -t filter -P OUTPUT ACCEPT
- $IPT -t filter -P FORWARD ACCEPT
- #
- $IP6T -t filter -P INPUT ACCEPT
- $IP6T -t filter -P OUTPUT ACCEPT
- $IP6T -t filter -P FORWARD ACCEPT
- #
- echo "firewall stopped [OK]"
- }
- # fonction status firewall
- do_status() {
- # affiche les règles en cours
- clear
- echo Status IPV4
- echo -----------------------------------------------
- $IPT -L -n -v
- echo
- echo -----------------------------------------------
- echo
- echo status IPV6
- echo -----------------------------------------------
- $IP6T -L -n -v
- echo
- }
- case "$1" in
- start)
- do_start
- # quitte sans erreur
- exit 0
- ;;
- stop)
- do_stop
- # quitte sans erreur
- exit 0
- ;;
- restart)
- do_stop
- do_start
- # quitte sans erreur
- exit 0
- ;;
- status)
- do_status
- # quitte sans erreurs
- exit 0
- ;;
- *)
- # Si on ne tape ni "start" ni "stop"... on affiche une erreur
- echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
- # quitte le script avec un etat "en erreur"
- exit 1
- ;;
- esac
- </code></pre>
- <hr />
- <p>Explications:</p>
- <hr />
- <pre><code>Création de 4 chaînes pour faciliter les opérations:
- # iptables -N TCP
- # iptables -N UDP
- # ip6tables -N TCP
- # ip6tables -N UDP
- On est sur un serveur, pas un routeur, donc, on interdit la règle FORWARD:
- # iptables -P FORWARD DROP
- # ip6tables -P FORWARD DROP
- On autorise tout en sortie:
- # iptables -P OUTPUT ACCEPT
- # ip6tables -P OUTPUT ACCEPT
- Nous allons accepter les connexions déjà établies:
- # iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- # ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- En entrée, on commence par interdire tout; on ouvrira les ports suivantles besoins:
- # iptables -P INPUT DROP
- # ip6tables -P INPUT DROP
- Aoristaion des connexions **loopback** (internes):
- # iptables -A INPUT -i lo -j ACCEPT
- # ip6tables -A INPUT -i lo -j ACCEPT
- Nous allons interdire les paquets marqués **INVALID**; il faudra auparavant accepter les paquets **ICMPv6 Neighbor Discovery** qui apparaissent invalides:
- #iptables -A INPUT -p 41 -j ACCEPT
- #ip6tables -A INPUT -p 41 -j ACCEPT
- # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
- # ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP
- 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:
- # ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT
- L'adresse fe80:: est l'adresse ipv6 valable uniquement sur le réseau local.
- On accepte les paquets **ping**:
- # iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
- # ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate NEW -j ACCEPT
- 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:
- # iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
- # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
- # ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
- # ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
- On rejette les paquets du protocole **icmp unreachable**
- # iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
- # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
- # ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
- # ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
- Pour IPV6, nous pouvons rajouter un filtrage pour le "kernel reverse path filter":
- # ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
- # ip6tables -t raw -A PREROUTING -j DROP
- On accepte les paquets **ssh** sur le port 22 (changez ce port si vous avez configuré vos ports différemment)
- # iptables -A TCP -p tcp --dport 22 -j ACCEPT
- # ip6tables -A TCP -p tcp --dport 22 -j ACCEPT
- Règles pour le DNS et NTP (ports 53 et 41)
- # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
- # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
- # iptables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
- # iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
- # iptables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
- # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
- La même chose pour IPV6:
- # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
- # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
- # ip6tables -A INPUT -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
- # ip6tables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
- # ip6tables -A INPUT -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
- # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT
- Nous pouvons maintenant lister nos règles. Nous allons commencer par IPV4:
- 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.
- root@aijan:/etc/iptables# cat rules.v4
- # Generated by iptables-save v1.6.0 on Sun Feb 11 14:27:32 2018
- *filter
- :INPUT ACCEPT [491:50774]
- :FORWARD ACCEPT [0:0]
- :OUTPUT ACCEPT [267:23983]
- COMMIT
- # Completed on Sun Feb 11 14:27:32 2018
- root@aijan:/etc/iptables# iptables -N TCP
- root@aijan:/etc/iptables# iptables -N UDP
- root@aijan:/etc/iptables# service netfilter-persistent save
- [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
- run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
- done.
- oot@aijan:/etc/iptables# cat rules.v4
- # Generated by iptables-save v1.6.0 on Sun Feb 11 14:28:24 2018
- *filter
- :INPUT ACCEPT [13:888]
- :FORWARD ACCEPT [0:0]
- :OUTPUT ACCEPT [8:944]
- :TCP - [0:0]
- :UDP - [0:0]
- COMMIT
- # Completed on Sun Feb 11 14:28:24 2018
- 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 :)
- Il suffit de répéter pour les autres règles puis pour IPV6.
- </code></pre>
- <hr />
- <p>Nous obtenons donc les règles suivantes:</p>
- <p>Pour IPV4:</p>
- <hr />
- <pre><code>root@aijan:/etc/iptables# cat rules.v4
- # Generated by iptables-save v1.6.0 on Sun Feb 11 15:33:41 2018
- *filter
- :INPUT DROP [0:0]
- :FORWARD DROP [0:0]
- :OUTPUT ACCEPT [105:27592]
- :TCP - [0:0]
- :UDP - [0:0]
- -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- -A INPUT -i lo -j ACCEPT
- -A INPUT -m conntrack --ctstate INVALID -j DROP
- -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
- -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
- -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
- -A INPUT -j REJECT --reject-with icmp-proto-unreachable
- -A INPUT -p tcp -j REJECT --reject-with tcp-reset
- -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
- COMMIT
- # Completed on Sun Feb 11 15:33:41 2018
- root@aijan:/etc/iptables#
- </code></pre>
- <hr />
- <p>Pour IPV6:</p>
- <hr />
- <pre><code>
- root@aijan:/etc/iptables# cat rules.v6
- # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
- *raw
- :PREROUTING ACCEPT [0:0]
- :OUTPUT ACCEPT [0:0]
- -A PREROUTING -m rpfilter -j ACCEPT
- -A PREROUTING -j DROP
- COMMIT
- # Completed on Sun Feb 11 15:33:41 2018
- # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
- *filter
- :INPUT DROP [1:144]
- :FORWARD DROP [0:0]
- :OUTPUT ACCEPT [0:0]
- :TCP - [0:0]
- :UDP - [0:0]
- -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- -A INPUT -i lo -j ACCEPT
- -A INPUT -p ipv6 -j ACCEPT
- -A INPUT -m conntrack --ctstate INVALID -j DROP
- -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
- -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
- -A INPUT -p tcp -j REJECT --reject-with tcp-reset
- -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
- -A OUTPUT -p ipv6-icmp -j ACCEPT
- -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
- COMMIT
- # Completed on Sun Feb 11 15:33:41 2018
- root@aijan:/etc/iptables#
- </code></pre>
- <hr />
- <h3 id="test-dns-et-du-serveur-de-temps-avec-iptables-actif">Test DNS et du serveur de temps (avec iptables actif)</h3>
- <hr />
- <pre><code>
- root@aijan:/home/ericadmin# nslookup www.gnome.org
- Server: 192.168.111.254
- Address: 192.168.111.254#53
- Non-authoritative answer:
- www.gnome.org canonical name = proxy.gnome.org.
- Name: proxy.gnome.org
- Address: 209.132.180.168
- Name: proxy.gnome.org
- Address: 209.132.180.180
- root@aijan:/home/ericadmin# timedatectl status
- Local time: dim. 2018-04-01 12:26:57 CEST
- Universal time: dim. 2018-04-01 10:26:57 UTC
- RTC time: dim. 2018-04-01 10:26:58
- Time zone: Europe/Paris (CEST, +0200)
- Network time on: yes
- NTP synchronized: yes
- RTC in local TZ: no
- </code></pre>
- <hr />
- <p>Ça fonctionne.</p>
- <h3 id="installation-de-ufw">Installation de <strong>ufw</strong></h3>
- <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>
- <p>Son installation est détaillée dans le paragraphe ci-dessus.</p>
- <hr />
- <pre><code>root@atom:/home/ericadmin# apt install ufw
- Lecture des listes de paquets... Fait
- Construction de l'arbre des dépendances
- Lecture des informations d'état... Fait
- Les NOUVEAUX paquets suivants seront installés :
- ufw
- 0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
- Il est nécessaire de prendre 164 ko dans les archives.
- Après cette opération, 848 ko d'espace disque supplémentaires seront utilisés.
- Réception de:1 http://deb.debian.org/debian stretch/main i386 ufw all 0.35-4 [164 kB]
- 164 ko réceptionnés en 0s (1 239 ko/s)
- Préconfiguration des paquets...
- Sélection du paquet ufw précédemment désélectionné.
- (Lecture de la base de données... 31776 fichiers et répertoires déjà installés.)
- Préparation du dépaquetage de .../archives/ufw_0.35-4_all.deb ...
- Dépaquetage de ufw (0.35-4) ...
- Paramétrage de ufw (0.35-4) ...
- Creating config file /etc/ufw/before.rules with new version
- Creating config file /etc/ufw/before6.rules with new version
- Creating config file /etc/ufw/after.rules with new version
- Creating config file /etc/ufw/after6.rules with new version
- Created symlink /etc/systemd/system/multi-user.target.wants/ufw.service → /lib/systemd/system/ufw.service.
- Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
- Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
- Traitement des actions différées (« triggers ») pour rsyslog (8.24.0-1) ...
- </code></pre>
- <hr />
- <h3 id="configuration-de-ufw">Configuration de <strong>ufw</strong></h3>
- <p>Après installation, le pare-feu est inactif.</p>
- <hr />
- <pre><code>root@atom:/home/ericadmin# ufw status
- Status: inactive
- root@atom:/home/ericadmin#
- </code></pre>
- <hr />
- <p>Nous allons autoriser les connexions <strong>ssh</strong> et <strong>ntp</strong>, seuls services en place pour l'instant.</p>
- <hr />
- <pre><code>root@atom:/home/ericadmin# ufw allow 22
- Rules updated
- Rules updated (v6)
- root@atom:/home/ericadmin#
- root@atom:/etc/fail2ban# ufw allow ntp
- Rule added
- Rule added (v6)
- </code></pre>
- <hr />
- <h3 id="activation-du-pare-feu">Activation du pare-feu:</h3>
- <hr />
- <pre><code>root@atom:/home/ericadmin# ufw enable
- Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
- Firewall is active and enabled on system startup
- root@atom:/home/ericadmin#
- </code></pre>
- <hr />
- <h3 id="verification">Vérification:</h3>
- <hr />
- <pre><code>root@atom:/home/ericadmin# ufw status
- Status: active
- To Action From
- -- ------ ----
- 22 ALLOW Anywhere
- 123 ALLOW Anywhere
- 22 (v6) ALLOW Anywhere (v6)
- 123 (v6) ALLOW Anywhere (v6)
- root@atom:/home/ericadmin#
- </code></pre>
- <hr />
- <p>Les connexions <strong>ssh</strong> et <strong>ntp</strong> sont autorisées, en <strong>IPV4</strong> et <strong>IPV6</strong>.</p>
- <p>Nous ajouterons des règles en fonction des services utilisés.</p>
- <h3 id="pour-desactiver-le-pare-feu">Pour désactiver le pare-feu:</h3>
- <hr />
- <pre><code>ufw disable
- </code></pre>
- <hr />
- <h3 id="activation-du-logging-des-actions-de-ufw">Activation du logging des actions de <strong>ufw</strong></h3>
- <hr />
- <pre><code>root@atom:/home/ericadmin# ufw logging on
- Logging enabled
- root@atom:/home/ericadmin#
- </code></pre>
- <hr />
- <p>Vous pouvez voiur l'ensemble des commandes de <strong>ufw</strong> en tapant:</p>
- <hr />
- <pre><code>root@atom:/home/ericadmin# ufw --help
- Usage: ufw COMMAND
- Commands:
- enable enables the firewall
- disable disables the firewall
- default ARG set default policy
- logging LEVEL set logging to LEVEL
- allow ARGS add allow rule
- deny ARGS add deny rule
- reject ARGS add reject rule
- limit ARGS add limit rule
- delete RULE|NUM delete RULE
- insert NUM RULE insert RULE at NUM
- route RULE add route RULE
- route delete RULE|NUM delete route RULE
- route insert NUM RULE insert route RULE at NUM
- reload reload firewall
- reset reset firewall
- status show firewall status
- status numbered show firewall status as numbered list of RULES
- status verbose show verbose firewall status
- show ARG show firewall report
- version display version information
- Application profile commands:
- app list list application profiles
- app info PROFILE show information on PROFILE
- app update PROFILE update PROFILE
- app default ARG set default application policy
- root@atom:/home/ericadmin#
- </code></pre>
- <hr />
- <p>Il faut re-tester la connectivité en IPV4 et IPV6</p>
- <ol>
- <li>Serveur -> extérieur</li>
- <li>Extérieur -> serveur</li>
- </ol>
- <p>On peut utiliser l'adresse <strong>ipv6.google.com</strong> pour vérifier la connexion IPV6 en dehors du réseau local.</p>
-
- </div>
- </div>
- <footer>
-
- <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
-
- <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>
-
-
- <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>
-
- </div>
-
- <hr/>
- <div role="contentinfo">
- <!-- Copyright etc -->
-
- </div>
- 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>.
- </footer>
-
- </div>
- </div>
- </section>
- </div>
- <div class="rst-versions" role="note" style="cursor: pointer">
- <span class="rst-current-version" data-toggle="rst-current-version">
-
-
- <span><a href="../4-quatre/" style="color: #fcfcfc;">« Previous</a></span>
-
-
- <span style="margin-left: 15px"><a href="../6-six/" style="color: #fcfcfc">Next »</a></span>
-
- </span>
- </div>
- </body>
- </html>
|