Informations :
Dates
- Publish : : Monday 22 december 2003
- Modification : Sunday 19 july 2020
- 11042 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 366 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 117echo " "+ Synflood Attack : [OK]118}119 120function spoofing()121{122## SPOOFING123$IPTABLE -A INPUT -i $NET_IF -s $CLASS_A -j DROP124$IPTABLE -A INPUT -i $NET_IF -s $CLASS_B -j DROP125$IPTABLE -A INPUT -i $NET_IF -s $CLASS_C -j DROP126$IPTABLE -A INPUT -i $NET_IF -s $CLASS_D_MULTICAST -j DROP127$IPTABLE -A INPUT -i $NET_IF -s $CLASS_E_RESERVED_NET -j DROP128$IPTABLE -A INPUT -i $NET_IF -s $LOOPBACK -j DROP129echo " "+ Spoofing Attack : [OK]130}131 132function logging()133{134## LOGGING135# Any udp not already allowed is logged and then dropped.136$IPTABLE -A INPUT -i $NET_IF -p udp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES UDP-IN: "137# $IPTABLE -A INPUT -i $NET_IF -p udp -m limit --limit 6/h --limit-burst 5138$IPTABLE -A INPUT -i $NET_IF -p udp -j DROP139 140$IPTABLE -A OUTPUT -o $NET_IF -p udp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES UDP-OUT: "141# $IPTABLE -A OUTPUT -o $NET_IF -p udp -m limit --limit 6/h --limit-burst 5142$IPTABLE -A OUTPUT -o $NET_IF -p udp -j DROP143 144# Any icmp not already allowed is logged and then dropped.145$IPTABLE -A INPUT -i $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES ICMP-IN: "146# $IPTABLE -A INPUT -i $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5147$IPTABLE -A INPUT -i $NET_IF -p icmp -j DROP148 149$IPTABLE -A OUTPUT -o $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES ICMP-OUT: "150# $IPTABLE -A OUTPUT -o $NET_IF -p icmp -m limit --limit 6/h --limit-burst 5151$IPTABLE -A OUTPUT -o $NET_IF -p icmp -j DROP152 153# Any tcp not already allowed is logged and then dropped.154$IPTABLE -A INPUT -i $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES TCP-IN: "155# $IPTABLE -A INPUT -i $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5156$IPTABLE -A INPUT -i $NET_IF -p tcp -j DROP157 158$IPTABLE -A OUTPUT -o $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES TCP-OUT: "159# $IPTABLE -A OUTPUT -o $NET_IF -p tcp -m limit --limit 6/h --limit-burst 5160$IPTABLE -A OUTPUT -o $NET_IF -p tcp -j DROP161 162# Anything else not already allowed is logged and then dropped.163# It will be dropped by the default policy anyway ........ but let's be paranoid.164$IPTABLE -A INPUT -i $NET_IF -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES PROTOCOL-X-IN: "165# $IPTABLE -A INPUT -i $NET_IF -m limit --limit 6/h --limit-burst 5166$IPTABLE -A INPUT -i $NET_IF -j DROP167 168$IPTABLE -A OUTPUT -o $NET_IF -m limit --limit 6/h --limit-burst 5 -j LOG --log-prefix "IPTABLES PROTOCOL-X-OUT: "169# $IPTABLE -A OUTPUT -o $NET_IF -m limit --limit 6/h --limit-burst 5170$IPTABLE -A OUTPUT -o $NET_IF -j DROP171 172echo " "+ LOG BURST 5 : [OK]173}174 175#####176# on accepte tout de et pour "lo" local177#####178 179function loopback()180{181$IPTABLE -A INPUT -i lo -j ACCEPT182$IPTABLE -A FORWARD -i lo -j ACCEPT183$IPTABLE -A FORWARD -o lo -j ACCEPT184$IPTABLE -A OUTPUT -o lo -j ACCEPT185 186echo " "+ On accepte la loop : [OK]187}188 189#####190# on fixe les regles general (DROP||ACCEPT)191#####192 193function policy()194{195$IPTABLE -P INPUT $1196$IPTABLE -P FORWARD $1197$IPTABLE -P OUTPUT $1198 199echo " "+ On fixe les portes : $1200}201 202#####203# on accepte tout ce qui sort et on fait du tracking204#####205 206function generique()207{208for ip in $IPS209do210# Permettre à une connexion ouverte de recevoir du trafic en entrée.211$IPTABLE -A INPUT -d $ip -m state --state ESTABLISHED,RELATED -j ACCEPT212# Accepter le ping213$IPTABLE -A INPUT -d $ip -p icmp -m limit --limit 5/s --limit-burst 4 -j ACCEPT214 215$IPTABLE -A OUTPUT -s $ip -m state ! --state INVALID -j ACCEPT216 217done218219# Limiter un ping par seconde par adresse IPv4220$IPTABLE -I INPUT -p icmp -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 32 -j DROP221222echo " "+ Retour REQ : [OK]223echo " "+ Ping Limit 5/s Burst 4 : [OK]224}225 226#####227# ouverture des acces SSH a certaines IP228#####229 230function ssh_ok()231{232# On autorise les IPv4 à accéder au SSH233for host in $SSH_IP_OK234do235$IPTABLE -A INPUT -i $NET_IF -s $host -p tcp --dport $PORT_SSH -j ACCEPT236done237 238# On autorise les autres à accéder au SSH avec une limite de 3 connexions / minute239$IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m state --state NEW -m recent --set --name SSH240$IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP241$IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -j ACCEPT242243echo " "+ SSH : [OK]244}245 246#####247# ouverture des ports tcp et upd248#####249 250function tcp_ok()251{252for port in $TCP_OK253do254$IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT255$IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT256done257258echo " "+ TCP : [OK]259}260 261function udp_ok()262{263for port in $UDP_OK264do265$IPTABLE -A INPUT -p udp --dport $port -j ACCEPT266$IPTABLE -A OUTPUT -p udp --sport $port -j ACCEPT267done268269echo " "+ UDP : [OK]270}271 272#####273# ouverture des acces HTTP(S)274#####275 276function server_http()277{278HTTPX_PORTS="80 443"279 280for port in $HTTPX_PORTS281do282# SOIT le service est sur LHOTE SOIT dans un VServer283$IPTABLE -A INPUT -p tcp --dport $port -m tcp -m state --state NEW -m recent --set --name WEB_$port -j ACCEPT284# $IPTABLE -A INPUT -p tcp --dport $port -m recent --update --seconds 60 --hitcount 1000 --rttl --name WEB_$port -j DROP285$IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT286 287$IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT288 289# SOIT le service est dans un VServer ou AUTRE Machine290$IPTABLE -t nat -A PREROUTING -d $NET_IP -p tcp --dport $port -j DNAT --to-destination $CT_WWW:$port291 292done293 294echo " "+ HTTP(S) : [OK]295}296 297#####298# on route vers&pour les vservers (a peaufinner)299#####300 301function vservers_nat()302{303# On active le forward du noyeau304/bin/echo "1" > /proc/sys/net/ipv4/ip_forward305 306# On active le forward entre les cartes réseaux307for interface in /proc/sys/net/ipv4/conf/*/forwarding; do308/bin/echo "1" > ${interface}309done310311# Acces complet au NET pour le VLAN312$IPTABLE -A FORWARD -i $NET_IF -o $VLAN_IF -j ACCEPT313$IPTABLE -A FORWARD -o $NET_IF -i $VLAN_IF -j ACCEPT314315# On route le CT_WWW à sortir sur Internet avec l'IP publique316$IPTABLE -t nat -A POSTROUTING -o $NET_IF -s $CT_WWW -j MASQUERADE317 318echo " "+ VSERVERS NAT : [OK]319}320 321#####-------------------------- FONCTIONS ----------------------------######322 323#####-------------------------- START / STOP ----------------------------######324 325case "$1" in326 327start|restart)328$0 stop329echo "$0 Starting"330kernel331synflood332spoofing333loopback334generique335 336ssh_ok337 338tcp_ok339udp_ok340 341vservers_nat342 343server_http344345logging346347policy DROP348;;349 350 351stop)352echo "$0 Stop"353$IPTABLE -F354$IPTABLE -t nat -F355$IPTABLE -Z356$IPTABLE -X357policy ACCEPT358;;359 360*)361echo "usage : $0 (start|stop|restart)"362;;363 364esac365 366#####-------------------------- 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
