{"id":289,"date":"2015-02-05T14:49:33","date_gmt":"2015-02-05T13:49:33","guid":{"rendered":"http:\/\/www.fragnol.net\/?p=289"},"modified":"2021-03-14T19:59:32","modified_gmt":"2021-03-14T18:59:32","slug":"un-firewall-avec-iptables","status":"publish","type":"post","link":"https:\/\/www.fragnol.net\/?p=289","title":{"rendered":"Un Firewall avec Iptables"},"content":{"rendered":"<p>Apr\u00e8s avoir s\u00e9curis\u00e9 l&rsquo;acc\u00e8s SSH de notre serveur il convient maintenant de \u00ab\u00a0l&rsquo;habiller\u00a0\u00bb. En effet celui ci est actuellement \u00ab\u00a0\u00e0 poil\u00a0\u00bb sur internet, nous allons donc lui faire rev\u00eatir une \u00ab\u00a0armure\u00a0\u00bb en veillant \u00e0 ce que notre serveur puisse tout de m\u00eame \u00ab\u00a0respirer\u00a0\u00bb ! Bon ok, l&rsquo;analogie n&rsquo;est peut-\u00eatre pas tr\u00e8s bien trouv\u00e9 mais l&rsquo;essentiel est l\u00e0&#8230; Nous allons installer un pare-feu sur notre machine Linux \u00e0 l&rsquo;aide de l\u2019incontournable Iptables.<\/p>\n<p><a href=\"http:\/\/www.fragnol.net\/?p=289\" data-wplink-edit=\"true\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-290 size-medium\" src=\"https:\/\/www.fragnol.net\/wp-content\/uploads\/2015\/02\/Firewall-sans-root-300x300.png\" alt=\"Firewall-sans-root\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.fragnol.net\/wp-content\/uploads\/2015\/02\/Firewall-sans-root.png 300w, https:\/\/www.fragnol.net\/wp-content\/uploads\/2015\/02\/Firewall-sans-root-150x150.png 150w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><!--more-->Au lieu de repartir de z\u00e9ro j&rsquo;ai modifi\u00e9 le script iptables de \u00ab&nbsp;Nicolargo&nbsp;\u00bb (<a href=\"http:\/\/blog.nicolargo.com\/\">http:\/\/blog.nicolargo.com\/<\/a> ) et je l\u2019ai adapt\u00e9 \u00e0 mes besoins. Personnellement je n&rsquo;utilise aucun contr\u00f4le sur le trafic sortant de mon serveur, uniquement sur l&rsquo;entrant.<\/p>\n<p>Commencez par cr\u00e9er votre script :<\/p>\n<pre class=\"lang:default decode:true\" title=\"firewall\">nano \/etc\/init.d\/firewall.sh<\/pre>\n<p>Copiez coller le script ci-dessous (je vous expliquerais 2-3 choses plus bas :<\/p>\n<pre class=\"lang:default decode:true\">#!\/bin\/sh\n#\n# Simple Firewall configuration.\n#\n# Author: Nicolargo\n# Edit : fmplaw\n#\n# chkconfig: 2345 9 91\n# description: Activates\/Deactivates the firewall at boot time\n#\n### BEGIN INIT INFO\n# Provides:          firewall.sh\n# Required-Start:    $syslog $network\n# Required-Stop:     $syslog $network\n# Default-Start:     2 3 4 5\n# Default-Stop:      0 1 6\n# Short-Description: Start firewall daemon at boot time\n# Description:       Custom Firewall script.\n### END INIT INFO\n \nPATH=\/bin:\/sbin:\/usr\/bin:\/usr\/sbin\n \n# Services that the system will offer to the network\n# SSH = 22\nTCP_SERVICES=\"22\"\nUDP_SERVICES=\"\"\n\nif ! [ -x \/sbin\/iptables ]; then\nexit 0\nfi\n \n##########################\n# Start the Firewall rules\n##########################\n \nfw_start () {\n \n# Input traffic:\n\/sbin\/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT\n# Services\nif [ -n \"$TCP_SERVICES\" ] ; then\nfor PORT in $TCP_SERVICES; do\n\/sbin\/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT\ndone\nfi\nif [ -n \"$UDP_SERVICES\" ] ; then\nfor PORT in $UDP_SERVICES; do\n\/sbin\/iptables -A INPUT -p udp --dport ${PORT} -j ACCEPT\ndone\nfi\n\n# Remote testing\n\/sbin\/iptables -A INPUT -p icmp -j ACCEPT\n\/sbin\/iptables -A INPUT -i lo -j ACCEPT\n\/sbin\/iptables -P INPUT DROP\n\/sbin\/iptables -A INPUT -j LOG\n \n# Other network protections\n# (some will only work with some kernel versions)\necho 1 &gt; \/proc\/sys\/net\/ipv4\/tcp_syncookies\necho 0 &gt; \/proc\/sys\/net\/ipv4\/ip_forward\necho 1 &gt; \/proc\/sys\/net\/ipv4\/icmp_echo_ignore_broadcasts\necho 1 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/log_martians\necho 1 &gt; \/proc\/sys\/net\/ipv4\/icmp_ignore_bogus_error_responses\necho 1 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/rp_filter\necho 0 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/send_redirects\necho 0 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/accept_source_route\n \n}\n \n##########################\n# Stop the Firewall rules\n##########################\n \nfw_stop () {\n\/sbin\/iptables -F\n\/sbin\/iptables -t nat -F\n\/sbin\/iptables -t mangle -F\n\/sbin\/iptables -P INPUT DROP\n\/sbin\/iptables -P FORWARD DROP\n\/sbin\/iptables -P OUTPUT ACCEPT\n}\n \n##########################\n# Clear the Firewall rules\n##########################\n \nfw_clear () {\n\/sbin\/iptables -F\n\/sbin\/iptables -t nat -F\n\/sbin\/iptables -t mangle -F\n\/sbin\/iptables -P INPUT ACCEPT\n\/sbin\/iptables -P FORWARD ACCEPT\n\/sbin\/iptables -P OUTPUT ACCEPT\n}\n \n##########################\n# Test the Firewall rules\n##########################\n \nfw_save () {\n\/sbin\/iptables-save &gt; \/etc\/iptables.backup\n}\n \nfw_restore () {\nif [ -e \/etc\/iptables.backup ]; then\n\/sbin\/iptables-restore &lt; \/etc\/iptables.backup\nfi\n}\n \nfw_test () {\nfw_save\nsleep 30 &amp;&amp; echo \"Restore previous Firewall rules...\" &amp;&amp; fw_restore &amp;\nfw_stop\nfw_start\n}\n \ncase \"$1\" in\nstart|restart)\necho -n \"Starting firewall..\"\nfw_stop\nfw_start\necho \"done.\"\n;;\nstop)\necho -n \"Stopping firewall..\"\nfw_stop\necho \"done.\"\n;;\nclear)\necho -n \"Clearing firewall rules..\"\nfw_clear\necho \"done.\"\n;;\ntest)\necho -n \"Test Firewall rules...\"\nfw_test\necho -n \"Previous configuration will be restore in 30 seconds\"\n;;\n*)\necho \"Usage: $0 {start|stop|restart|clear|test}\"\necho \"Be aware that stop drop all incoming\/outgoing traffic !!!\"\nexit 1\n;;\nesac\nexit 0\n<\/pre>\n<p>Ensuite rendez le ex\u00e9cutable :<\/p>\n<pre class=\"lang:default decode:true\" title=\"firewall\">chmod +x \/etc\/init.d\/firewall.sh<\/pre>\n<p>Puis on le lance au d\u00e9marrage :<\/p>\n<pre class=\"lang:default decode:true\" title=\"firewall\">update-rc.d firewall.sh defaults<\/pre>\n<p>Cela dit il peut-\u00eatre utile de comprendre comme il fonctionne&#8230; Tout d&rsquo;abord il reconnait les param\u00e8tres suivants :<\/p>\n<p>start : permet de lancer le script.<br \/>\nstop : <span style=\"text-decoration: underline;\">ATTENTION<\/span> r\u00e9initialise les r\u00e8gles iptables et emp\u00eache le trafic forward et<span style=\"text-decoration: underline;\"> input.<\/span><br \/>\nrestart : red\u00e9marre le script.<br \/>\nclear : r\u00e9initialise les r\u00e8gles iptables et autorise tous les trafics.<br \/>\ntest : permet de tester la configuration iptables 30 sec.<br \/>\nsave : permet de sauvegarder la conf iptables.<br \/>\nrestore : permet la restauration de la conf iptables.<\/p>\n<p>L\u2019int\u00e9r\u00eat de ce script est qu&rsquo;il est tr\u00e8s facilement \u00e9ditable. En effet si vous voulez ajouter le service ftp \u00e0 votre serveur il est imp\u00e9ratif d&rsquo;ouvrir les ports 20 et 21 en TCP. Rien de plus simple, \u00e9ditez votre script :<\/p>\n<pre class=\"lang:default decode:true\" title=\"firewall\">nano \/etc\/init.d\/firewall.sh<\/pre>\n<p>Puis rajoutez ces ports \u00e0 la ligne 26 (voir script ci-dessus) de la variable TCP_SERVICES:<\/p>\n<pre class=\"lang:default decode:true\" title=\"firewall\"># Services that the system will offer to the network\n# SSH = 22\nTCP_SERVICES=\"22 20 21\"\nUDP_SERVICES=\"\"<\/pre>\n<p>Sauvegardez ces changements et relancez le services :<\/p>\n<pre class=\"lang:default decode:true\" title=\"firewall\">\/etc\/init.d\/firewall.sh restart<\/pre>\n<p>Et voil\u00e0 ! Simple, non ?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s avoir s\u00e9curis\u00e9 l&rsquo;acc\u00e8s SSH de notre serveur il convient maintenant de \u00ab\u00a0l&rsquo;habiller\u00a0\u00bb. En effet celui ci est actuellement \u00ab\u00a0\u00e0 poil\u00a0\u00bb sur internet, nous allons donc lui faire rev\u00eatir une \u00ab\u00a0armure\u00a0\u00bb en veillant \u00e0 ce que notre serveur puisse tout &hellip; <a href=\"https:\/\/www.fragnol.net\/?p=289\">Continuer la lecture <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":{"footnotes":""},"categories":[6,12],"tags":[],"class_list":["post-289","post","type-post","status-publish","format-standard","hentry","category-reseau","category-securite"],"_links":{"self":[{"href":"https:\/\/www.fragnol.net\/index.php?rest_route=\/wp\/v2\/posts\/289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fragnol.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fragnol.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fragnol.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fragnol.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=289"}],"version-history":[{"count":17,"href":"https:\/\/www.fragnol.net\/index.php?rest_route=\/wp\/v2\/posts\/289\/revisions"}],"predecessor-version":[{"id":447,"href":"https:\/\/www.fragnol.net\/index.php?rest_route=\/wp\/v2\/posts\/289\/revisions\/447"}],"wp:attachment":[{"href":"https:\/\/www.fragnol.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fragnol.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fragnol.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}