{"id":199,"date":"2008-11-17T14:55:13","date_gmt":"2008-11-17T13:55:13","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=199"},"modified":"2008-11-19T10:20:59","modified_gmt":"2008-11-19T09:20:59","slug":"mandater-ses-connexions-tcp-tu-tes-lave-les-mains-avant-dentrer","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/11\/17\/mandater-ses-connexions-tcp-tu-tes-lave-les-mains-avant-dentrer\/","title":{"rendered":"Mandater ses connexions TCP, tu t&rsquo;es lav\u00e9 les mains avant d&rsquo;entrer ?"},"content":{"rendered":"<p>Ce billet est un petit exercice de style \ud83d\ude42<\/p>\n<p>Dans le cadre d&rsquo;une architecture \u00ab\u00a0standard\u00a0\u00bb, vous disposez d&rsquo;un routeur qui vous donne acc\u00e8s au Nain Ternet, un firewall d\u00e9di\u00e9 et vos serveurs.<\/p>\n<p>Les serveurs d\u00e9di\u00e9s \u00e0 offrir des services aux utilisateurs externes sont normallement en DMZ.<\/p>\n<p>Ca c&rsquo;est le cas id\u00e9al, mais il peut arriver (souvent m\u00eame), que quelques applications soient h\u00e9berg\u00e9es sur des serveurs du LAN et l\u00e0 on joue avec de la NAT dans tout les sens.<\/p>\n<p>Vous avez donc ouvert le port sur votre firewall puis fait une redirection sur la machine dans le LAN.<\/p>\n<p>Ca marche mais bof quoi \ud83d\ude09<\/p>\n<p>Dans ce genre de concept (tr\u00e8s fr\u00e9quent), on laisse donc la transaction TCP (le fameux <a title=\"Handshake\" href=\"http:\/\/en.wikipedia.org\/wiki\/Three-way_handshake#Connection_establishment\" target=\"_blank\">3-way handshake<\/a>) s&rsquo;\u00e9tablir entre le client et le serveur dans le LAN.<\/p>\n<p>Moyen hein ?<\/p>\n<p>Apr\u00e8s tout, vous obligez bien vos utilisateurs \u00e0 passer par un proxy <a title=\"Squid\" href=\"http:\/\/www.squid-cache.org\/\" target=\"_blank\">Squid<\/a> pour aller sur le Web, pourquoi ne pas faire pareil avec vos connexions entrantes TCP ?&#8230;<\/p>\n<p>Voila ce que nous allons mettre en place :<\/p>\n<div id=\"attachment_201\" style=\"width: 263px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/mandatairetcp.png\"><img aria-describedby=\"caption-attachment-201\" loading=\"lazy\" class=\"size-medium wp-image-201\" title=\"mandatairetcp\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/mandatairetcp-253x300.png\" alt=\"Sch\u00e9ma\" width=\"253\" height=\"300\" \/><\/a><p id=\"caption-attachment-201\" class=\"wp-caption-text\">Sch\u00e9ma<\/p><\/div>\n<p>Et qui a la plus de comp\u00e9tences pour g\u00e9rer le 3-way handshake a la place des autres ? Qui a la plus grosse quand on parle de couche r\u00e9seau ?<\/p>\n<p>R\u00e9ponse : <a title=\"OpenBSD\" href=\"http:\/\/www.openbsd.org\/fr\/\" target=\"_blank\">OpenBSD<\/a> forcement<\/p>\n<p>Nous allons partir du principe que vous d\u00e9sirez offrir un acc\u00e8s SMTP sur la machine LAN-MAIL depuis le Nain Ternet.<\/p>\n<p>L&rsquo;adressage utilis\u00e9e sera le suivant (et comme toujours un dessin valant mieux qu&rsquo;un grand discours) :<\/p>\n<div id=\"attachment_204\" style=\"width: 266px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/proxytcp-1.png\"><img aria-describedby=\"caption-attachment-204\" loading=\"lazy\" class=\"size-medium wp-image-204\" title=\"proxytcp-1\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/proxytcp-1-256x300.png\" alt=\"Sch\u00e9ma\" width=\"256\" height=\"300\" \/><\/a><p id=\"caption-attachment-204\" class=\"wp-caption-text\">Sch\u00e9ma<\/p><\/div>\n<p>Cot\u00e9 Firewall, redirection toute simple, tout ce qui entre sur le port 25 SMTP depuis le Net sur l&rsquo;interface externe est redirig\u00e9 sur 10.154.1.1 port 25 (ou autre hein, c&rsquo;est vous qui voyez).<\/p>\n<p>La, c&rsquo;est du truc habituel, rien de bien sorcier.<\/p>\n<p>Cot\u00e9 OpenBSD, on va se monter un petit socket :<\/p>\n<pre lang=\"text\">vi \/etc\/inetd.conf\r\n\r\n127.0.0.1:5025 stream tcp nowait nobody \/usr\/bin\/nc nc 192.168.0.50 25<\/pre>\n<p>On reload le process inetd<\/p>\n<pre lang=\"text\">Puffy:~# ps aux | grep inetd\r\nroot     24243  0.0  0.3   524   780 ??  Is    26Sep08    0:18.06 inetd\r\nroot     30919  0.0  0.3   472   764 p0  S+    11:23AM    0:00.02 grep inetd\r\nPuffy:~# kill -HUP 24243<\/pre>\n<p>Explication, on utilise netcat pour \u00e9tablir une connexion tcp vers LAN-MAIL sur le port 25 quand une requ\u00e8te TCP arrive sur son port 5025 en localhost.<\/p>\n<p>Maintenant on s&rsquo;attaque \u00e0 la couche la plus poilue, Packet Filter :<\/p>\n<p>(wan_if \u00e9tant l&rsquo;interface sis0 dans le sch\u00e9ma)<\/p>\n<pre lang=\"text\">pf.conf\r\n\r\nrdr pass on $wan_if inet proto tcp from any to $wan_if port 25 --&gt; 127.0.0.1 port 5025\r\npass in quick inet proto tcp from any to 127.0.0.1 port 5025<\/pre>\n<p>Et c&rsquo;est tout.<\/p>\n<p>Bien \u00e9videmment vous avez d\u00e9j\u00e0 un beau PF configur\u00e9 avec toutes les options qui vont bien, antispoof, scrub in all et tout, et tout&#8230;<\/p>\n<p>J&rsquo;ai volontairement simplifi\u00e9 l&rsquo;architecture et les r\u00e8gles, alors ne me criez pas dessus \ud83d\ude00<\/p>\n<p>Et ca fait quoi donc maintenant ce joli truc ?<\/p>\n<p>Cela fait que d\u00e9sormais, c&rsquo;est l&rsquo;OpenBSD qui va traiter la connexion entrante, l&rsquo;accepter,  ouvrir une nouvelle connexion vers LAN-MAIL et v\u00e9hiculer les paquets vers lui.<\/p>\n<p>Toute la phase d&rsquo;\u00e9change TCP sera trait\u00e9e par le BSD et c&rsquo;est avec lui que le client discutera directement.<\/p>\n<p>Bref, l&rsquo;OpenBSD joue le r\u00f4le de Proxy TCP \ud83d\ude42<\/p>\n<p>Voila pour ce petit exercice que je vous laisse peaufiner et qui peut vous d\u00e9patouiller d&rsquo;architectures un peu compliqu\u00e9s ou surtout, de connexions TCP moisies entre le Firewall et le Serveur final.<\/p>\n<p>P.S. : Attention avec le protocole FTP, ce n&rsquo;est aussi simple que cela y parait. Je vous conseille fortement d&rsquo;utiliser le programme ftp-proxy d&rsquo;openBSD (surtout si vous voulez redirigez vos requ\u00eates FTP externes vers le FTP de votre Freebox HD par exemple \ud83d\ude09 )<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce billet est un petit exercice de style \ud83d\ude42 Dans le cadre d&rsquo;une architecture \u00ab\u00a0standard\u00a0\u00bb, vous disposez d&rsquo;un routeur qui vous donne acc\u00e8s au Nain Ternet, un firewall d\u00e9di\u00e9 et vos serveurs. Les serveurs d\u00e9di\u00e9s \u00e0 offrir des services aux &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/11\/17\/mandater-ses-connexions-tcp-tu-tes-lave-les-mains-avant-dentrer\/\">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":[27,16,3],"tags":[81,33,84],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/199"}],"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=199"}],"version-history":[{"count":19,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/199\/revisions"}],"predecessor-version":[{"id":228,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/199\/revisions\/228"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=199"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}