Informations :
Dates
- Publish : : Monday 22 december 2003
- Modification : Sunday 19 july 2020
- 11279 views
Share :
Introduction
Je vais vous expliquer comment configurer notre poste pour pouvoir naviguer sur internet. Détailler ainsi les fichiers de configurations et voir les régles firewall de bases pour se protéger des attaques. Nous utilisons pour cette documentation un Linux Debian. Certains fichers de configuration pouraient changer d'emplacement sur d'autres distributions (Mandrake).
Nous commençons par voir la configuration d'un poste client (derrère un routeur) puis celle d'un poste utilisé comme routeur/firewall.
Plages d'adresses IPv4 :
Pour information il existe 3 "grandes" classes d'IPv4 pour notre réseau privé qui sont :
- Classe A :
10.0.0.0/8(plage IPv4 : 10.0.0.0 - 10.255.255.255) qui représente à 16 777 216 adresses IPv4 - Classe B :
172.16.0.0/12(plage IPv4 : 172.16.0.0 - 172.31.255.255) qui représente à 1 048 576 adresses IPv4 - Classe C :
192.168.0.0/16(plage IPv4 : 192.168.0.0 - 192.168.255.255) qui représente à 65 536 adresses IPv4
Plus la Classe D que l'on se sert pour le multicast 224.0.0.0 - Par exemple nos fournisseurs Internet s'en servent pour diffuser nos chaines télévisions.
Plus la Classe E réservée par IANA à un usage non déterminé.
Déclarons nos DNS
Les DNS servent à faire la relation entre une IP et un Nom. C'est à dire que si nos DNS ne sont pas déclarer nous pourons accéder à un serveur sur internet mais seulement en tappant son adresse IP (et non son Nom de domaine). ex : http://158.69.126.137 Une fois que nous aurons définis nos DNS nous pourons accéder à un serveur grâce à son nom de domaine (ex: http://zw3b.net) Donc déclarons nos DNS :
Script avec 1 ligne
001vi /etc/resolv.conf
et ajoutons plusieurs DNS (au moins 1):
Script avec 3 lignes
001nameserver 1Z7.0.0.1002nameserver 83.159.31.116003nameserver 158.69.126.137
- DNS PUBLIC LAB3W/ZW3B :
83.159.31.116-158.69.126.137(accessible depuis n'importe quel accès Internet) - DNS chez Free :
212.27.32.176-212.27.32.2-212.27.32.175 - DNS chez Nérim :
62.4.16.70-62.4.16.80 - DNS chez Wanadoo :
193.252.19.3-193.252.19.4 - DNS chez Aol :
205.188.146.146-202.67.95.0 - DNS chez Alice et Tiscali :
212.216.172.62 - DNS chez Cegetel :
194.6.128.3-194.6.128.4 - DNS chez Club-Internet :
194.117.200.10-194.117.200.15 - DNS chez Neuf Telecom :
212.30.96.108-213.203.124.146 - DNS chez Numéricable :
81.220.255.4-80.236.0.68 - DNS chez Télé2 :
130.244.127.161-130.244.127.162 - DNS chez Liberty Surf :
194.149.160.9-194.149.160.9 - DNS chez Magic Online :
194.149.160.9-194.149.160.1
DNS publics (accessible depuis n'importe quel accès Internet) : 194.2.0.20 - 194.2.0.50 - 195.132.0.132 - 195.132.0.193 - 8.8.8.8 - 8.8.4.4
J'ajoute comment-faire un DNS sous Linux > serveurs > Configuration BIND9 Masters et Slaves
Naviguer depuis un poste derrière un routeur
La commande pour savoir qu'elles sont nos interfaces ethernet configurées est ifconfig.
Si vous n'avez pas cette commande je vous suggère d'installer ces paquets grâce à la commande apt install iputils-ping dnsutils net-tools whois ipv6toolkit ipv6pref qui sont logiciels/commandes réseaux.
Script avec 1 ligne
001ifconfig
Nous devons actuellement trouver 1 interface : L'interface lo (boucle locale : interne à la machine) :
Script avec 8 lignes
001lo Lien encap:Boucle locale002inet adr:127.0.0.1 Masque:255.0.0.0003adr inet6: ::1/128 Scope:Hôte004UP LOOPBACK RUNNING MTU:16436 Metric:1005RX packets:11650 errors:0 dropped:0 overruns:0 frame:0006TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0007collisions:0 lg file transmission:0008RX bytes:5509007 (5.2 MiB) TX bytes:5509007 (5.2 MiB)
Pour assigner temporairement* une adresse IP à notre carte nous utilisons ifconfig ou la commande ip :
Script avec 1 ligne
001ifconfig eth0 192.168.0.2
ou
Script avec 1 ligne
001ip -4 address add 192.168.0.2/24 dev eth0
Maintenant en tapant ifconfig nous devions voir notre carte que nous venons de configurer. On doit trouver 2 interfaces. Notre carte ethernet et l'interface loop (local) :
Script avec 18 lignes
001eth0 Lien encap:Ethernet HWaddr 00:E0:18:DC:94:3E002inet adr:192.168.0.2 Bcast:192.168.0.255 Masque:255.255.255.0003adr inet6: fe80::2e0:18ff:fedc:943e/64 Scope:Lien004UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1005RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0006TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0007collisions:0 lg file transmission:1000008RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB)009Interruption:177 Adresse de base:0x2000010 011lo Lien encap:Boucle locale012inet adr:127.0.0.1 Masque:255.0.0.0013adr inet6: ::1/128 Scope:Hôte014UP LOOPBACK RUNNING MTU:16436 Metric:1015RX packets:11650 errors:0 dropped:0 overruns:0 frame:0016TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0017collisions:0 lg file transmission:0018RX bytes:5509007 (5.2 MiB) TX bytes:5509007 (5.2 MiB)
Pour définir une passerelle (gw) nous devons définir la route et l'adresse IPv4 de la passerelle que prendra les packets pour accéder à internet.
Script avec 1 ligne
001route add -net default gw 192.168.0.1
où ici l'adresse IP de la passerelle est 192.168.0.1
- temporairement parce qu'au prochain reboot votre carte ne sera plus configurée.
Nous pouvons aussi utiliser la commande ip de cette manière :
Script avec 1 ligne
001ip -4 route add default via 192.168.0.1
Pour que notre carte ethernet soit prise en compte au boot/démarage de la machine nous devons éditer le fichier de configuration des interfaces réseau.
Script avec 1 ligne
001vi /etc/network/interfaces
et y ajouter :
Script avec 7 lignes
001auto eth0002iface eth0 inet static003address 192.168.0.2004netmask 255.255.255.0005network 192.168.0.0006broadcast 192.168.0.255007gateway 192.168.0.1
Nous pouvons (ou pas de suite) relancer la configuration du fichier réseau /etc/network/interfaces de cette manière :
Script avec 1 ligne
001/etc/init.d/networking restart
Naviguer depuis un poste connecté directement à Internet
Donc la commande pour savoir qu'elles sont les interfaces ethernet configurées est ifconfig
Script avec 1 ligne
001ifconfig
Actuellement voilà ce que nous voyons (l'interface local (lo)) :
Script avec 8 lignes
001lo Lien encap:Boucle locale002inet adr:127.0.0.1 Masque:255.0.0.0003adr inet6: ::1/128 Scope:Hôte004UP LOOPBACK RUNNING MTU:16436 Metric:1005RX packets:11650 errors:0 dropped:0 overruns:0 frame:0006TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0007collisions:0 lg file transmission:0008RX bytes:5509007 (5.2 MiB) TX bytes:5509007 (5.2 MiB)
Déclarons une IP à notre carte : Vérifions si notre FAI à un serveur DHCP nous permettant de déclarer l'IP de notre carte relié au modem :
Script avec 1 ligne
001dhclient eth0
dhclient se connecte de l'interface eth0 sur le serveur DHCP pour qu'il lui assigne une IP (par rapport à sa mac adresse ou à la classe d'IP). Voilà nous avons maintenant notre carte eth0 configurée. Nous devons voir l'interface loop (lo) avec comme IP : 127.0.0.1 et notre carte ethernet (eth0) avec comme IP : 1.2.3.4 reliée au modem :
Script avec 19 lignes
001eth0 Lien encap:Ethernet HWaddr 52:54:05:F5:95:BE002inet adr:1.2.3.4 Bcast:1.2.3.255 Masque:255.255.255.0003adr inet6: fe80::5054:5ff:fef5:95bc/64 Scope:Lien004UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1005RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0006TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0007collisions:0 lg file transmission:1000008RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB)009Interruption:177 Adresse de base:0x2000010 011lo Lien encap:Boucle locale012inet adr:127.0.0.1 Masque:255.0.0.0013adr inet6: ::1/128 Scope:Hôte014UP LOOPBACK RUNNING MTU:16436 Metric:1015RX packets:11650 errors:0 dropped:0 overruns:0 frame:0016TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0017collisions:0 lg file transmission:0018RX bytes:5509007 (5.2 MiB) TX bytes:5509007 (5.2 MiB)019
Pour que notre carte ethernet soit prise en compte au boot (démarage) de la machine nous devons éditer le fichier de config des interfaces réseau.
Script avec 1 ligne
001vi /etc/network/interfaces
et y ajouter :
Script avec 2 lignes
001auto eth0002iface eth0 inet dhcp
Faire de notre machine un routeur
Si nous souhaitons faire de cette machine une passerelle/routeur, nous devons avoir une carte supplémentaire qui sera connecté au switch du réseau ou directement à un autre pc grâce à un cable RJ45 croisé. Occupons nous de notre réseau privé :
Script avec 2 lignes
001ifconfig eth1 192.168.0.1
002
Nos 2 cartes sont configurées, en tappant ifconfig vous devez voir quelque chose approchant cela :
Script avec 29 lignes
001eth0 Lien encap:Ethernet HWaddr 52:54:05:F5:95:BE002inet adr:1.2.3.4 Bcast:1.2.3.255 Masque:255.255.255.0003adr inet6: fe80::5054:5ff:fef5:95bc/64 Scope:Lien004UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1005RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0006TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0007collisions:0 lg file transmission:1000008RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB)009Interruption:177 Adresse de base:0x2000010 011eth1 Lien encap:Ethernet HWaddr 00:10:A7:1A:50:65012inet adr:192.168.0.1 Bcast:192.168.0.255 Masque:255.255.255.0013adr inet6: fe80::2e0:18ff:fedc:943e/64 Scope:Lien014UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1015RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0016TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0017collisions:0 lg file transmission:1000018RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB)019Interruption:177 Adresse de base:0x2000020021 022lo Lien encap:Boucle locale023inet adr:127.0.0.1 Masque:255.0.0.0024adr inet6: ::1/128 Scope:Hôte025UP LOOPBACK RUNNING MTU:16436 Metric:1026RX packets:11650 errors:0 dropped:0 overruns:0 frame:0027TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0028collisions:0 lg file transmission:0029RX bytes:5509007 (5.2 MiB) TX bytes:5509007 (5.2 MiB)
Ajoutons au fichier de conf des interfaces réseau notre carte eth1.
Script avec 1 ligne
001vi /etc/network/interfaces
et y ajouter :
Script avec 6 lignes
001auto eth1002iface eth1 inet static003address 192.168.0.1004netmask 255.255.255.0005network 192.168.0.0006broadcast 192.168.0.255
Et faire le routage grâce à iptables qui permettra aux autres machines du réseau de pouvoir naviguer sur Internet. Iptables permet de configurer des règles de pare-feu ainsi que d'activer le Masquerading. Le masquerading permet de "cacher" toutes les adresses de notre réseau local. Les paquets partent sur Internet avec comme adresse source l'adresse de la passerelle. Notre réseau local est invisible sur internet (rappelez-vous que nous n'avons qu'une adresse IP attribuée par notre FAI et qu'il faut la partager).
Script avec 1 ligne
001iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
ou
Script avec 1 ligne
001iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT -o eth1 --to-source 1.2.3.4
sans oublier d'activer dans le noyeau le forward. à la volé :
Script avec 1 ligne
001echo 1 > /proc/sys/net/ipv4/ip_forward
en permanant :
Script avec 1 ligne
001vi /etc/network/options
et remplacer ip_forward=no par ip_forward=yes
Explications pour configurer le pare-feu de notre machine routeur
On commence par configuer les "accés" à notre machine locale (la passerelle) :
on accepte les réponses des requêtes qui sortent de notre firewall :
Script avec 3 lignes
001# On accepte tous ce qui vient d'ici002iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT003
on va autoriser l'accés à notre machine routeur/firewall sur le port 22 (SSH) du réseau local :
Script avec 3 lignes
001# Autoriser a se connecter sur la passerelle du réseau local002iptables -A INPUT -i eth1 -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT003iptables -A OUTPUT -o eth1 -m state --state ESTABLISHED -p tcp --sport 22 -j ACCEPT
On continue en nous attaquant au réseau local (LAN) : on souhaite laisser passer toutes les requêtes vers et venant notre réseau local pour profiter entièrement de notre accès à Internet.
Script avec 3 lignes
001# On accepte de transfert entre la carte eth0 (net) et eth1 (LAN)002iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT003iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT
on va tout fermer :
Script avec 4 lignes
001# Fermer les portes002iptables -P INPUT DROP003iptables -P OUTPUT DROP004iptables -P FORWARD DROP
Voilà notre firewall est configuré. Imaginez maintenant que vous avez un serveur (logiciel) sur un poste de votre réseau local, il faudra alors router le port en question vers la machine serveur (toujours pour faire croire au réseau InterNet que votre machine passerelle (avec l'ip de votre FAI) héberge le serveur logiciel en question). Par exemple pour un serveur Web sur la machine 192.168.0.5 du réseau local et que votre IP Internet est 1.2.3.4
Script avec 3 lignes
001# WEB Serveur002iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.5:80003iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 443 -j DNAT --to-destination 192.168.0.5:443
ou tiens, un client p2p comme eMule :
Script avec 1 ligne
001iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 4657 -j DNAT --to-destination 192.168.0.8:4657
En espèrant que cela poura vous aider. Bien sûr cet article ne se veut pas exhaustif mais peut vous aider à comprendre le fonctionnement d'une configuration pour naviguer sur InterNet d'un Linux. Les configurations pouvent changer en fonction de ce que vous voulez faire et de votre raccordement InterNet.
NdMoi-même 2020/04/09 : Je vous met ici un firewall IPv4 que je vous concoctais (ajouter vos règles selon les services que vous proposez) pour vivre en toutes sécurités ;)
On édite vim /root/firewall.sh :
Script avec 374 lignes
001#!/bin/bash002### BEGIN INIT INFO003# Provides: firewall004# Required-Start: $remote_fs $syslog005# Required-Stop: $remote_fs $syslog006# Default-Start: 2 3 4 5007# Default-Stop: 0 1 6008# Short-Description: Start daemon at boot time009# Description: Enable service provided by daemon.010### END INIT INFO011 012#####-------------------------- VARIABLES ----------------------------######013 014# Chemin commandes015IPTABLE="/sbin/iptables"016MODPROBE="/sbin/modprobe"017 018# interfaces reseaux019LOOP_IF="lo"020NET_IF="eth0"021VLAN_IF="eth1"022 023# IPv4 du serveur024NET_IP="1.2.3.4"025VLAN_IP="10.106.42.254"026 027# IPv4 des Containers028CT_WWW="10.106.42.1"029 030###########031IPS="$NET_IP $VLAN_IP $CT_WWW"032###########033 034# port du service ssh035PORT_SSH="22"036 037# ports tcp et udp a ouvrir038TCP_OK="514" # SYSLOG039UDP_OK="69 123 161 514 546 547" # TFTP NTP SNMP SYSLOG DHCP040 041# ip qui ont acces en ssh au serveur042SSH_IP_OK="83.159.31.116 158.69.126.137" #043 044LOOPBACK="127.0.0.0/8"045CLASS_A="10.0.0.0/8"046CLASS_B="172.16.0.0/12"047CLASS_C="192.168.0.0/16"048CLASS_D_MULTICAST="224.0.0.0/4"049CLASS_E_RESERVED_NET="240.0.0.0/5"050 051MODULES="iptable_filter iptable_nat iptable_mangle052ip_tables ip_conntrack ip_conntrack_ftp053ipt_state ipt_limit ipt_multiport ip_nat_ftp"054 055#####-------------------------- VARIABLES ----------------------------######056 057#####-------------------------- FONCTIONS ----------------------------######058 059#####060# diverses optimisations et protection du noyau061#####062 063function kernel()064{065for a in $MODULES #load Modules066do067$MODPROBE $a068done069 070# Enable 8192 Connections to track071#/bin/echo "32768" > /proc/sys/net/ipv4/ip_conntrack_max072 073# Disable response to ping.074/bin/echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all075 076# Disable response to broadcasts.077/bin/echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts078 079# Don't accept source routed packets.080/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route081 082# Disable ICMP redirect acceptance.083/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects084 085# Enable bad error message protection.086/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses087 088# No spoof089for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do090/bin/echo "1" > ${interface}091done092 093/bin/echo "1" > /proc/sys/net/ipv4/tcp_syncookies094/bin/echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog095#/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter096 097 098# Log spoofed packets, source routed packets, redirect packets.099/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians100 101# Make sure that IP forwarding is turned on.102# /bin/echo "1" > /proc/sys/net/ipv4/ip_forward103104echo " "+ Options du kernel : [OK]105}106 107function synflood()108{109## SYN-FLOODING PROTECTION110$IPTABLE -N Syn-Flood111$IPTABLE -A INPUT -i $NET_IF -p tcp --syn -j Syn-Flood112$IPTABLE -A Syn-Flood -m limit --limit 1/s --limit-burst 4 -j RETURN113$IPTABLE -A Syn-Flood -j DROP114## Make sure NEW tcp connections are SYN packets115$IPTABLE -A INPUT -i $NET_IF -p tcp ! --syn -m state --state NEW -j DROP116########117 118########119# 20251128 BLOCK SYN-ACK attack (TCP SYN 44 ATTACK:TCP_SYN)120$IPTABLE -A INPUT -f -j DROP121$IPTABLE -A INPUT -p tcp --tcp-flags ALL ALL -j DROP122$IPTABLE -A INPIT -p tcp --tcp-flags ALL NONE -j DROP123########124 125echo " "+ Synflood Attack : [OK]126}127 128function spoofing()129{130## SPOOFING131$IPTABLE -A INPUT -i $NET_IF -s $CLASS_A -j DROP132$IPTABLE -A INPUT -i $NET_IF -s $CLASS_B -j DROP133$IPTABLE -A INPUT -i $NET_IF -s $CLASS_C -j DROP134$IPTABLE -A INPUT -i $NET_IF -s $CLASS_D_MULTICAST -j DROP135$IPTABLE -A INPUT -i $NET_IF -s $CLASS_E_RESERVED_NET -j DROP136$IPTABLE -A INPUT -i $NET_IF -s $LOOPBACK -j DROP137echo " "+ Spoofing Attack : [OK]138}139 140function logging()141{142## LOGGING143# Any udp not already allowed is logged and then dropped.144$IPTABLE -A INPUT -i $NET_IF -p udp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES UDP-IN: "145# $IPTABLE -A INPUT -i $NET_IF -p udp -m limit --limit 6/h --limit-burst 5146$IPTABLE -A INPUT -i $NET_IF -p udp -j DROP147 148$IPTABLE -A OUTPUT -o $NET_IF -p udp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES UDP-OUT: "149# $IPTABLE -A OUTPUT -o $NET_IF -p udp -m limit --limit 6/h --limit-burst 5150$IPTABLE -A OUTPUT -o $NET_IF -p udp -j DROP151 152# Any icmp not already allowed is logged and then dropped.153$IPTABLE -A INPUT -i $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES ICMP-IN: "154# $IPTABLE -A INPUT -i $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5155$IPTABLE -A INPUT -i $NET_IF -p icmp -j DROP156 157$IPTABLE -A OUTPUT -o $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES ICMP-OUT: "158# $IPTABLE -A OUTPUT -o $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5159$IPTABLE -A OUTPUT -o $NET_IF -p icmp -j DROP160 161# Any tcp not already allowed is logged and then dropped.162$IPTABLE -A INPUT -i $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES TCP-IN: "163# $IPTABLE -A INPUT -i $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5164$IPTABLE -A INPUT -i $NET_IF -p tcp -j DROP165 166$IPTABLE -A OUTPUT -o $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES TCP-OUT: "167# $IPTABLE -A OUTPUT -o $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5168$IPTABLE -A OUTPUT -o $NET_IF -p tcp -j DROP169 170# Anything else not already allowed is logged and then dropped.171# It will be dropped by the default policy anyway ........ but let's be paranoid.172$IPTABLE -A INPUT -i $NET_IF -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES PROTOCOL-X-IN: "173# $IPTABLE -A INPUT -i $NET_IF -m limit --limit 6/h --limit-burst 5174$IPTABLE -A INPUT -i $NET_IF -j DROP175 176$IPTABLE -A OUTPUT -o $NET_IF -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES PROTOCOL-X-OUT: "177# $IPTABLE -A OUTPUT -o $NET_IF -m limit --limit 6/h --limit-burst 5178$IPTABLE -A OUTPUT -o $NET_IF -j DROP179 180echo " "+ LOG BURST 5 : [OK]181}182 183#####184# on accepte tout de et pour "lo" local185#####186 187function loopback()188{189$IPTABLE -A INPUT -i lo -j ACCEPT190$IPTABLE -A FORWARD -i lo -j ACCEPT191$IPTABLE -A FORWARD -o lo -j ACCEPT192$IPTABLE -A OUTPUT -o lo -j ACCEPT193 194echo " "+ On accepte la loop : [OK]195}196 197#####198# on fixe les regles general (DROP||ACCEPT)199#####200 201function policy()202{203$IPTABLE -P INPUT $1204$IPTABLE -P FORWARD $1205$IPTABLE -P OUTPUT $1206 207echo " "+ On fixe les portes : $1208}209 210#####211# on accepte tout ce qui sort et on fait du tracking212#####213 214function generique()215{216for ip in $IPS217do218# Permettre à une connexion ouverte de recevoir du trafic en entrée.219$IPTABLE -A INPUT -d $ip -m state --state ESTABLISHED,RELATED -j ACCEPT220# Accepter le ping221$IPTABLE -A INPUT -d $ip -p icmp -m limit --limit 5/s --limit-burst 4 -j ACCEPT222 223$IPTABLE -A OUTPUT -s $ip -m state ! --state INVALID -j ACCEPT224 225done226227# Limiter un ping par seconde par adresse IPv4228$IPTABLE -I INPUT -p icmp -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 32 -j DROP229230echo " "+ Retour REQ : [OK]231echo " "+ Ping Limit 5/s Burst 4 : [OK]232}233 234#####235# ouverture des acces SSH a certaines IP236#####237 238function ssh_ok()239{240# On autorise les IPv4 à accéder au SSH241for host in $SSH_IP_OK242do243$IPTABLE -A INPUT -i $NET_IF -s $host -p tcp --dport $PORT_SSH -j ACCEPT244done245 246# On autorise les autres à accéder au SSH avec une limite de 3 connexions / minute247$IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m state --state NEW -m recent --set --name SSH248$IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP249$IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -j ACCEPT250251echo " "+ SSH : [OK]252}253 254#####255# ouverture des ports tcp et upd256#####257 258function tcp_ok()259{260for port in $TCP_OK261do262$IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT263$IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT264done265266echo " "+ TCP : [OK]267}268 269function udp_ok()270{271for port in $UDP_OK272do273$IPTABLE -A INPUT -p udp --dport $port -j ACCEPT274$IPTABLE -A OUTPUT -p udp --sport $port -j ACCEPT275done276277echo " "+ UDP : [OK]278}279 280#####281# ouverture des acces HTTP(S)282#####283 284function server_http()285{286HTTPX_PORTS="80 443"287 288for port in $HTTPX_PORTS289do290# SOIT le service est sur LHOTE SOIT dans un VServer291$IPTABLE -A INPUT -p tcp --dport $port -m tcp -m state --state NEW -m recent --set --name WEB_$port -j ACCEPT292# $IPTABLE -A INPUT -p tcp --dport $port -m recent --update --seconds 60 --hitcount 1000 --rttl --name WEB_$port -j DROP293$IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT294 295$IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT296 297# SOIT le service est dans un VServer ou AUTRE Machine298$IPTABLE -t nat -A PREROUTING -d $NET_IP -p tcp --dport $port -j DNAT --to-destination $CT_WWW:$port299 300done301 302echo " "+ HTTP(S) : [OK]303}304 305#####306# on route vers&pour les vservers (a peaufinner)307#####308 309function vservers_nat()310{311# On active le forward du noyeau312/bin/echo "1" > /proc/sys/net/ipv4/ip_forward313 314# On active le forward entre les cartes réseaux315for interface in /proc/sys/net/ipv4/conf/*/forwarding; do316/bin/echo "1" > ${interface}317done318319# Acces complet au NET pour le VLAN320$IPTABLE -A FORWARD -i $NET_IF -o $VLAN_IF -j ACCEPT321$IPTABLE -A FORWARD -o $NET_IF -i $VLAN_IF -j ACCEPT322323# On route le CT_WWW à sortir sur Internet avec l'IP publique324$IPTABLE -t nat -A POSTROUTING -o $NET_IF -s $CT_WWW -j MASQUERADE325 326echo " "+ VSERVERS NAT : [OK]327}328 329#####-------------------------- FONCTIONS ----------------------------######330 331#####-------------------------- START / STOP ----------------------------######332 333case "$1" in334 335start|restart)336$0 stop337echo "$0 Starting"338kernel339synflood340spoofing341loopback342generique343 344ssh_ok345 346tcp_ok347udp_ok348 349vservers_nat350 351server_http352353logging354355policy DROP356;;357 358 359stop)360echo "$0 Stop"361$IPTABLE -F362$IPTABLE -t nat -F363$IPTABLE -Z364$IPTABLE -X365policy ACCEPT366;;367 368*)369echo "usage : $0 (start|stop|restart)"370;;371 372esac373 374#####-------------------------- START / STOP ----------------------------######
Mettre le script en execution pour root chmod u+x /root/firewall.sh puis lancer /root/firewall.sh (start|stop|restart).
Une fois que tout est Okay :
- Créer un lien symbolique dans initd comme cela
ln -s /root/firewall.sh /etc/init.d/firewall - Puis ajouter le script au démarage de la machine en lancant la commande
update-rc.d firewall defaults
J'ajoute un lien qui explique bien le Routage avancé avec marquage de paquet et rp_filter (DLFP) pour celles et ceux que çà intéresseraient.
Sauvegarder/restaurer votre configuration firewall.
J'ajoute 2 commandes qui peuvent être utile :) et qui peuvent servir pour NuFW.
Sauvegarder votre configuration firewall actuelle :
Script avec 1 ligne
001iptables-save > /etc/firewall.conf
Restaurer votre configuration firewall :
Script avec 1 ligne
001iptables-restore < /etc/firewall.conf
Visualiser votre firewall INPUT (entrée), FORWARD (transfert entre vos cartes réseaux), OUTPUT (sortie) :
Chain INPUT, FORWARD, OUTPUT.
Script avec 4 lignes
001iptables -L -vn002iptables -L INPUT -vn003iptables -L FORWARD -vn004iptables -L OUTPUT -vn
La table NAT (Network Translation Address) :
Script avec 1 ligne
001iptables -L -vn -t nat
Cordialement,
Romain


