{"id":66,"date":"2008-03-21T11:19:11","date_gmt":"2008-03-21T10:19:11","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=66"},"modified":"2008-03-21T11:19:11","modified_gmt":"2008-03-21T10:19:11","slug":"anatomie-dune-architecture-4","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/03\/21\/anatomie-dune-architecture-4\/","title":{"rendered":"Anatomie d&rsquo;une architecture (4)"},"content":{"rendered":"<p><u><strong>Conception d\u2019un Firewall Rouge en Haute-Disponiblit\u00e9 (2\u00e8me Partie)<\/strong><\/u><\/p>\n<p>Je consid\u00e8re que vos deux futures firewalls son pr\u00eat, sous OpenBSD et dispose au minimum de 3 cartes r\u00e9seaux.<\/p>\n<p>CARP est un protocole permettant \u00e0 un m\u00eame groupe d&rsquo;h\u00f4tes de partager la m\u00eame adresse IP.<\/p>\n<p>Il supporte Ipv4 et Ipv6, mais personnellement, je bloque tout les flux ipv6 actuellement.<\/p>\n<p>NB : je vous invite si vous avez le temps \u00e0 lire l&rsquo;<a href=\"http:\/\/www.juniperipv6.net\/library\/detail.cfm?num=14\" title=\"juniper-ipv6\" target=\"_blank\">Ipv6 Security Guide<\/a> de Juniper.<\/p>\n<p>Si vous avez activ\u00e9 PF (PacketFilter), n&rsquo;oubliez pas d&rsquo;autoriser le protocole CARP :<\/p>\n<p><tt> pass out on $carp_dev proto carp keep state<\/tt><\/p>\n<p>Dans votre fichier \/etc\/sysctl.conf, ajouter les entr\u00e9es suivantes :<\/p>\n<p>net.inet.carp.preempt=1<br \/>\nnet.inet.carp.allow=1<\/p>\n<p>Pour les ins\u00e9rer \u00e0 chaud :<\/p>\n<p># sysctl -w  net.inet.carp.allow=1<\/p>\n<p>Maintenant sur chaque Firewall, nous allons cr\u00e9er l&rsquo;interface CARP c\u00f4t\u00e9 rouge :<\/p>\n<p><tt> # ifconfig carp0 create<\/tt><\/p>\n<p>Puis configurer l&rsquo;interface (dans un fichier \u00e9galement  hostname.carp0 pour qu&rsquo;il soit effectif au reboot) :<\/p>\n<p>#<tt>ifconfig carp0 vhid 1 pass motdepasse carpdev sis0 <\/tt><tt>advskew 1 192.168.0.1 netmask 255.255.255.0<\/tt><\/p>\n<p>Dans le fichier :<\/p>\n<p>inet 192.168.0.1 255.255.255.0 192.168.0.255 vhid 1 carpdev sis0 advskew 1 pass motdepasse<\/p>\n<p>Sur le deuxi\u00e8me Firewall, changer la valeur advskew de 1 \u00e0 100.<\/p>\n<p>Explications :<\/p>\n<p>VHID : C&rsquo;est l&rsquo;identifiant unique qui unit les deux interfaces du groupe de firewall.<\/p>\n<p>CARPDEV : l&rsquo;interface sur laquelle monter le CARP<\/p>\n<p>ADVSKEW : Plus grand est ce nombre moins de chance cette interface \u00e0 d&rsquo;\u00eatre le ma\u00eetre au d\u00e9marrage<\/p>\n<p>ADVBASE (optionnel): d\u00e9lai en seconde de v\u00e9rification de l&rsquo;\u00e9tat des cartes (1 seconde par d\u00e9faut)<\/p>\n<p>Un petit ifconfig sur le ma\u00eetre (advskew = 1) :<\/p>\n<p>carp0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500<br \/>\nlladdr 00:00:5e:00:01:01<br \/>\ncarp: MASTER carpdev sis0 vhid 1 advbase 1 advskew 1<br \/>\ngroups: carp<br \/>\ninet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0x6<br \/>\ninet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255<\/p>\n<p>Sur l&rsquo;esclave :<\/p>\n<p>carp0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500<br \/>\nlladdr 00:00:5e:00:01:01<br \/>\ncarp: BACKUP carpdev em0 vhid 1 advbase 1 advskew 100<br \/>\ngroups: carp<br \/>\ninet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0x6<br \/>\ninet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255<\/p>\n<p>Maintenant, d\u00e9brancher le cable r\u00e9seau , arreter le ou un ifconfig carp0 down sur le ma\u00eetre :<\/p>\n<p># ifconfig carp0 down<\/p>\n<p>#ifconfig<\/p>\n<p>carp0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500<br \/>\nlladdr 00:00:5e:00:01:01<br \/>\ncarp: INIT carpdev sis0 vhid 1 advbase 1 advskew 1<br \/>\ngroups: carp<br \/>\ninet6 fe80::200:5eff:fe00:101%carp0 prefixlen 64 scopeid 0x6<br \/>\ninet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255<\/p>\n<p>Sur l&rsquo;esclave, vous devriez voir l&rsquo;interface CARP0 pass\u00e9e en MASTER en 1 seconde et si vous faites un test ping d&rsquo;une autre machine sur le 192.168.0.1, vous ne devriez quasiment rien voir.<\/p>\n<p>Magique \ud83d\ude00<\/p>\n<p>Mais maintenant vous vous dites, \u00ab\u00a0oui mais si j&rsquo;ai du trafic sur mon firewall-A ???\u00a0\u00bb et l\u00e0 je vous r\u00e9ponds \u00ab\u00a0pfsync\u00a0\u00bb.<\/p>\n<p>Pfsync permet de synchroniser les \u00e9tats firewalls entre les deux noeuds du cluster.<\/p>\n<p>Dans la cas d&rsquo;un basculement, le trafic n&rsquo;est pas interrompu.<\/p>\n<p>Comme pour CARP, nous autorisons PFSYNC dans nos r\u00e8gles PF :<\/p>\n<p><tt> pass on $sync_if proto pfsync<\/tt><\/p>\n<p>Sur les deux firewalls, nous d\u00e9dions une interface r\u00e9seau \u00e0 pfsync (les deux FW reli\u00e9s par un cable crois\u00e9 par exemple) :<\/p>\n<pre># ifconfig pfsync0 syncdev sis2<\/pre>\n<pre># ifconfig pfsync0 up<\/pre>\n<p>PS: Cela marche aussi sur un lien s\u00e9rie \ud83d\ude09<\/p>\n<p>Par d\u00e9faut psync fait du multicast. Je vous conseille fortement d&rsquo;utiliser l&rsquo;attribut \u00ab\u00a0syncpeer x.x.x.x\u00a0\u00bb pour sp\u00e9cifier l&rsquo;ip de l&rsquo;autre Firewall :<\/p>\n<pre># ifconfig pfsync0 syncpeer 192.168.0.5 syncdev sis2<\/pre>\n<pre><\/pre>\n<p>Dans une politique de s\u00e9curit\u00e9 pouss\u00e9e, vous devriez utiliser <a href=\"http:\/\/fr.wikipedia.org\/wiki\/IPsec\" title=\"ipsec\" target=\"_blank\">IPsec<\/a> pour encapsuler les flux psync entre les deux firewalls.<\/p>\n<p>Et voila comment en quelques minutes, vous avez mont\u00e9e un Firewall en haute-disponibilit\u00e9 et enti\u00e8rement redondant.<\/p>\n<p>Vous ferez les m\u00eames manipulations c\u00f4t\u00e9s pattes Vertes afin d&rsquo;avoir une HA cot\u00e9 LAN aussi :<\/p>\n<pre>    +----|   WAN\/Internet |-------+\r\n         |                        |\r\n     sis0|                        |sis0\r\n      +-----+                  +-----+\r\n      | fw1 |-sis2--------sis2-| fw2 |\r\n      +-----+                  +-----+\r\n     sis1|                        |sis1\r\n         |                        |\r\n      ---+----------LAN-----------+---<\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<p>Nous avons donc maintenant une VIP cot\u00e9 rouge en 192.168.0.1<\/p>\n<p>C&rsquo;est sur cette IP que vous allez configur\u00e9r la Freebox en mode&#8230; DMZ.<\/p>\n<p>Tout ce qui arrivera sur votre Freebox en entr\u00e9e, sera redirig\u00e9 sur votre cluster de Firewall. Ce qui vous permettra de g\u00e9rer vos translations de port sans avoir \u00e0 rebooter la Freebox&#8230;  Ni vos Firewalls d&rsquo;ailleurs, il est ab\u00e9rant de devoir rebooter un \u00e9quipement r\u00e9seau pour appliquer une r\u00e8gle r\u00e9seau.<\/p>\n<p><u>NB<\/u>: Vous pouvez \u00e9galement ne rediriger sur 192.168.0.1 que des plages de porst, l&rsquo;avantage est de laisser la Freebox bloquer les ports \u00ab\u00a0pourris\u00a0\u00bb (135,139 etc&#8230;) et donc d&rsquo;avoir un premier \u00e9tage Rouge de blocage.<\/p>\n<p>Ne vous reste plus qu&rsquo;\u00e0 configurer votre \/etc\/pf.conf (le fichier de configuration de PacketFilter) :<\/p>\n<p>Lire <a href=\"http:\/\/www.unixgarden.com\/index.php\/securite\/pf-pour-les-nuls\" title=\"PF\" target=\"_blank\">PF pour les nuls<\/a><\/p>\n<p>Exemple de r\u00e8gle sur une interface CARP :<\/p>\n<p>pass in quick inet proto udp from any to carp1 port 123<\/p>\n<p>Je vous laisse peaufiner votre fichier de configuration PF afin de r\u00e9pondre au mieux \u00e0 vos propres r\u00e8gles firewall.<\/p>\n<p>A faire, ajouter une autre carte r\u00e9seau sur vos deux firewalls et monter une interface CARP2 Jaune pour votre DMZ \ud83d\ude00<\/p>\n<p>Petit exemple en dessin :<\/p>\n<p><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/schema-4.jpg\" title=\"Schema\"><img src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/schema-4.thumbnail.jpg\" alt=\"Schema\" \/><\/a><\/p>\n<p>Prochaine \u00e9tape, monter le Firewall Vert qui contr\u00f4lera les flux inter-vlans et les sorties sur Internet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Conception d\u2019un Firewall Rouge en Haute-Disponiblit\u00e9 (2\u00e8me Partie) Je consid\u00e8re que vos deux futures firewalls son pr\u00eat, sous OpenBSD et dispose au minimum de 3 cartes r\u00e9seaux. CARP est un protocole permettant \u00e0 un m\u00eame groupe d&rsquo;h\u00f4tes de partager la &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/03\/21\/anatomie-dune-architecture-4\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16,8],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/66"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=66"}],"version-history":[{"count":0,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/66\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=66"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=66"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}