Name : BETA-TESTERS
Project name : ZW3B-API-BETA-TESTERS
Authorized. - 200 - Client API Name and Origin Wildcard OK
2 tutos en 1 + le firewall : Configurer un ordinateur sous Linux soit en mode routeur (2 cartes réseaux) soit en mode type poste de travail connecté derrière un routeur.
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.
Pour information il existe 3 "grandes" classes d'IPv4 pour notre réseau privé qui sont :
10.0.0.0/8
(plage IPv4 : 10.0.0.0 - 10.255.255.255) qui représente à 16 777 216 adresses IPv4172.16.0.0/12
(plage IPv4 : 172.16.0.0 - 172.31.255.255) qui représente à 1 048 576 adresses IPv4192.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é.
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.1 002nameserver 83.159.31.116 003nameserver 158.69.126.137
83.159.31.116
- 158.69.126.137
(accessible depuis n'importe quel accès Internet)212.27.32.176
- 212.27.32.2
- 212.27.32.175
62.4.16.70
- 62.4.16.80
193.252.19.3
- 193.252.19.4
205.188.146.146
- 202.67.95.0
212.216.172.62
194.6.128.3
- 194.6.128.4
194.117.200.10
- 194.117.200.15
212.30.96.108
- 213.203.124.146
81.220.255.4
- 80.236.0.68
130.244.127.161
- 130.244.127.162
194.149.160.9
- 194.149.160.9
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
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 locale 002 inet adr:127.0.0.1 Masque:255.0.0.0 003 adr inet6: ::1/128 Scope:Hôte 004 UP LOOPBACK RUNNING MTU:16436 Metric:1 005 RX packets:11650 errors:0 dropped:0 overruns:0 frame:0 006 TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0 007 collisions:0 lg file transmission:0 008 RX 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:3E 002 inet adr:192.168.0.2 Bcast:192.168.0.255 Masque:255.255.255.0 003 adr inet6: fe80::2e0:18ff:fedc:943e/64 Scope:Lien 004 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 005 RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0 006 TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0 007 collisions:0 lg file transmission:1000 008 RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB) 009 Interruption:177 Adresse de base:0x2000 010 011lo Lien encap:Boucle locale 012 inet adr:127.0.0.1 Masque:255.0.0.0 013 adr inet6: ::1/128 Scope:Hôte 014 UP LOOPBACK RUNNING MTU:16436 Metric:1 015 RX packets:11650 errors:0 dropped:0 overruns:0 frame:0 016 TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0 017 collisions:0 lg file transmission:0 018 RX 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
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 eth0 002iface eth0 inet static 003 address 192.168.0.2 004 netmask 255.255.255.0 005 network 192.168.0.0 006 broadcast 192.168.0.255 007 gateway 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
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 locale 002 inet adr:127.0.0.1 Masque:255.0.0.0 003 adr inet6: ::1/128 Scope:Hôte 004 UP LOOPBACK RUNNING MTU:16436 Metric:1 005 RX packets:11650 errors:0 dropped:0 overruns:0 frame:0 006 TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0 007 collisions:0 lg file transmission:0 008 RX 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:BE 002 inet adr:1.2.3.4 Bcast:1.2.3.255 Masque:255.255.255.0 003 adr inet6: fe80::5054:5ff:fef5:95bc/64 Scope:Lien 004 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 005 RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0 006 TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0 007 collisions:0 lg file transmission:1000 008 RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB) 009 Interruption:177 Adresse de base:0x2000 010 011lo Lien encap:Boucle locale 012 inet adr:127.0.0.1 Masque:255.0.0.0 013 adr inet6: ::1/128 Scope:Hôte 014 UP LOOPBACK RUNNING MTU:16436 Metric:1 015 RX packets:11650 errors:0 dropped:0 overruns:0 frame:0 016 TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0 017 collisions:0 lg file transmission:0 018 RX 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 eth0 002iface eth0 inet dhcp
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:BE 002 inet adr:1.2.3.4 Bcast:1.2.3.255 Masque:255.255.255.0 003 adr inet6: fe80::5054:5ff:fef5:95bc/64 Scope:Lien 004 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 005 RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0 006 TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0 007 collisions:0 lg file transmission:1000 008 RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB) 009 Interruption:177 Adresse de base:0x2000 010 011eth1 Lien encap:Ethernet HWaddr 00:10:A7:1A:50:65 012 inet adr:192.168.0.1 Bcast:192.168.0.255 Masque:255.255.255.0 013 adr inet6: fe80::2e0:18ff:fedc:943e/64 Scope:Lien 014 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 015 RX packets:8715837 errors:0 dropped:0 overruns:0 frame:0 016 TX packets:9630301 errors:0 dropped:0 overruns:0 carrier:0 017 collisions:0 lg file transmission:1000 018 RX bytes:1323496476 (1.2 GiB) TX bytes:3286670833 (3.0 GiB) 019 Interruption:177 Adresse de base:0x2000 020 021 022lo Lien encap:Boucle locale 023 inet adr:127.0.0.1 Masque:255.0.0.0 024 adr inet6: ::1/128 Scope:Hôte 025 UP LOOPBACK RUNNING MTU:16436 Metric:1 026 RX packets:11650 errors:0 dropped:0 overruns:0 frame:0 027 TX packets:11650 errors:0 dropped:0 overruns:0 carrier:0 028 collisions:0 lg file transmission:0 029 RX 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 eth1 002iface eth1 inet static 003 address 192.168.0.1 004 netmask 255.255.255.0 005 network 192.168.0.0 006 broadcast 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
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'ici 002iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 003
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 local 002iptables -A INPUT -i eth1 -m state --state NEW,ESTABLISHED -p tcp --dport 22 -j ACCEPT 003iptables -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 ACCEPT 003iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT
on va tout fermer :
Script avec 4 lignes
001# Fermer les portes 002iptables -P INPUT DROP 003iptables -P OUTPUT DROP 004iptables -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 Serveur 002iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.5:80 003iptables -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/bash 002### BEGIN INIT INFO 003# Provides: firewall 004# Required-Start: $remote_fs $syslog 005# Required-Stop: $remote_fs $syslog 006# Default-Start: 2 3 4 5 007# Default-Stop: 0 1 6 008# Short-Description: Start daemon at boot time 009# Description: Enable service provided by daemon. 010### END INIT INFO 011 012#####-------------------------- VARIABLES ----------------------------###### 013 014# Chemin commandes 015IPTABLE="/sbin/iptables" 016MODPROBE="/sbin/modprobe" 017 018# interfaces reseaux 019LOOP_IF="lo" 020NET_IF="eth0" 021VLAN_IF="eth1" 022 023# IPv4 du serveur 024NET_IP="1.2.3.4" 025VLAN_IP="10.106.42.254" 026 027# IPv4 des Containers 028CT_WWW="10.106.42.1" 029 030########### 031IPS="$NET_IP $VLAN_IP $CT_WWW" 032########### 033 034# port du service ssh 035PORT_SSH="22" 036 037# ports tcp et udp a ouvrir 038TCP_OK="514" # SYSLOG 039UDP_OK="69 123 161 514 546 547" # TFTP NTP SNMP SYSLOG DHCP 040 041# ip qui ont acces en ssh au serveur 042SSH_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_mangle 052 ip_tables ip_conntrack ip_conntrack_ftp 053 ipt_state ipt_limit ipt_multiport ip_nat_ftp" 054 055#####-------------------------- VARIABLES ----------------------------###### 056 057#####-------------------------- FONCTIONS ----------------------------###### 058 059##### 060# diverses optimisations et protection du noyau 061##### 062 063function kernel() 064{ 065 for a in $MODULES #load Modules 066 do 067 $MODPROBE $a 068 done 069 070 # Enable 8192 Connections to track 071 #/bin/echo "32768" > /proc/sys/net/ipv4/ip_conntrack_max 072 073 # Disable response to ping. 074 /bin/echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all 075 076 # Disable response to broadcasts. 077 /bin/echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 078 079 # Don't accept source routed packets. 080 /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route 081 082 # Disable ICMP redirect acceptance. 083 /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects 084 085 # Enable bad error message protection. 086 /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 087 088 # No spoof 089 for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do 090 /bin/echo "1" > ${interface} 091 done 092 093 /bin/echo "1" > /proc/sys/net/ipv4/tcp_syncookies 094 /bin/echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog 095 #/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter 096 097 098 # Log spoofed packets, source routed packets, redirect packets. 099 /bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians 100 101 # Make sure that IP forwarding is turned on. 102# /bin/echo "1" > /proc/sys/net/ipv4/ip_forward 103 104 echo " "+ Options du kernel : [OK] 105} 106 107function synflood() 108{ 109 ## SYN-FLOODING PROTECTION 110 $IPTABLE -N syn-flood 111 $IPTABLE -A INPUT -i $NET_IF -p tcp --syn -j syn-flood 112 $IPTABLE -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN 113 $IPTABLE -A syn-flood -j DROP 114 ## Make sure NEW tcp connections are SYN packets 115 $IPTABLE -A INPUT -i $NET_IF -p tcp ! --syn -m state --state NEW -j DROP 116 117 echo " "+ Synflood Attack : [OK] 118} 119 120function spoofing() 121{ 122 ## SPOOFING 123 $IPTABLE -A INPUT -i $NET_IF -s $CLASS_A -j DROP 124 $IPTABLE -A INPUT -i $NET_IF -s $CLASS_B -j DROP 125 $IPTABLE -A INPUT -i $NET_IF -s $CLASS_C -j DROP 126 $IPTABLE -A INPUT -i $NET_IF -s $CLASS_D_MULTICAST -j DROP 127 $IPTABLE -A INPUT -i $NET_IF -s $CLASS_E_RESERVED_NET -j DROP 128 $IPTABLE -A INPUT -i $NET_IF -s $LOOPBACK -j DROP 129 echo " "+ Spoofing Attack : [OK] 130} 131 132function logging() 133{ 134 ## LOGGING 135 # 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 5 138 $IPTABLE -A INPUT -i $NET_IF -p udp -j DROP 139 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 5 142 $IPTABLE -A OUTPUT -o $NET_IF -p udp -j DROP 143 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 5 147 $IPTABLE -A INPUT -i $NET_IF -p icmp -j DROP 148 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 5 151 $IPTABLE -A OUTPUT -o $NET_IF -p icmp -j DROP 152 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 5 156 $IPTABLE -A INPUT -i $NET_IF -p tcp -j DROP 157 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 5 160 $IPTABLE -A OUTPUT -o $NET_IF -p tcp -j DROP 161 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 5 166 $IPTABLE -A INPUT -i $NET_IF -j DROP 167 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 5 170 $IPTABLE -A OUTPUT -o $NET_IF -j DROP 171 172 echo " "+ LOG BURST 5 : [OK] 173} 174 175##### 176# on accepte tout de et pour "lo" local 177##### 178 179function loopback() 180{ 181 $IPTABLE -A INPUT -i lo -j ACCEPT 182 $IPTABLE -A FORWARD -i lo -j ACCEPT 183 $IPTABLE -A FORWARD -o lo -j ACCEPT 184 $IPTABLE -A OUTPUT -o lo -j ACCEPT 185 186 echo " "+ 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 $1 196 $IPTABLE -P FORWARD $1 197 $IPTABLE -P OUTPUT $1 198 199 echo " "+ On fixe les portes : $1 200} 201 202##### 203# on accepte tout ce qui sort et on fait du tracking 204##### 205 206function generique() 207{ 208 for ip in $IPS 209 do 210 # Permettre à une connexion ouverte de recevoir du trafic en entrée. 211 $IPTABLE -A INPUT -d $ip -m state --state ESTABLISHED,RELATED -j ACCEPT 212 # Accepter le ping 213 $IPTABLE -A INPUT -d $ip -p icmp -m limit --limit 5/s --limit-burst 4 -j ACCEPT 214 215 $IPTABLE -A OUTPUT -s $ip -m state ! --state INVALID -j ACCEPT 216 217 done 218 219 # Limiter un ping par seconde par adresse IPv4 220 $IPTABLE -I INPUT -p icmp -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 32 -j DROP 221 222 echo " "+ Retour REQ : [OK] 223 echo " "+ Ping Limit 5/s Burst 4 : [OK] 224} 225 226##### 227# ouverture des acces SSH a certaines IP 228##### 229 230function ssh_ok() 231{ 232 # On autorise les IPv4 à accéder au SSH 233 for host in $SSH_IP_OK 234 do 235 $IPTABLE -A INPUT -i $NET_IF -s $host -p tcp --dport $PORT_SSH -j ACCEPT 236 done 237 238 # On autorise les autres à accéder au SSH avec une limite de 3 connexions / minute 239 $IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m state --state NEW -m recent --set --name SSH 240 $IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP 241 $IPTABLE -A INPUT -i $NET_IF -p tcp --dport $PORT_SSH -j ACCEPT 242 243 echo " "+ SSH : [OK] 244} 245 246##### 247# ouverture des ports tcp et upd 248##### 249 250function tcp_ok() 251{ 252 for port in $TCP_OK 253 do 254 $IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT 255 $IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT 256 done 257 258 echo " "+ TCP : [OK] 259} 260 261function udp_ok() 262{ 263 for port in $UDP_OK 264 do 265 $IPTABLE -A INPUT -p udp --dport $port -j ACCEPT 266 $IPTABLE -A OUTPUT -p udp --sport $port -j ACCEPT 267 done 268 269 echo " "+ UDP : [OK] 270} 271 272##### 273# ouverture des acces HTTP(S) 274##### 275 276function server_http() 277{ 278 HTTPX_PORTS="80 443" 279 280 for port in $HTTPX_PORTS 281 do 282 # SOIT le service est sur LHOTE SOIT dans un VServer 283 $IPTABLE -A INPUT -p tcp --dport $port -m tcp -m state --state NEW -m recent --set --name WEB_$port -j ACCEPT 284# $IPTABLE -A INPUT -p tcp --dport $port -m recent --update --seconds 60 --hitcount 1000 --rttl --name WEB_$port -j DROP 285 $IPTABLE -A INPUT -p tcp --dport $port -j ACCEPT 286 287 $IPTABLE -A OUTPUT -p tcp --sport $port -j ACCEPT 288 289 # SOIT le service est dans un VServer ou AUTRE Machine 290 $IPTABLE -t nat -A PREROUTING -d $NET_IP -p tcp --dport $port -j DNAT --to-destination $CT_WWW:$port 291 292 done 293 294 echo " "+ 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 noyeau 304 /bin/echo "1" > /proc/sys/net/ipv4/ip_forward 305 306 # On active le forward entre les cartes réseaux 307 for interface in /proc/sys/net/ipv4/conf/*/forwarding; do 308 /bin/echo "1" > ${interface} 309 done 310 311 # Acces complet au NET pour le VLAN 312 $IPTABLE -A FORWARD -i $NET_IF -o $VLAN_IF -j ACCEPT 313 $IPTABLE -A FORWARD -o $NET_IF -i $VLAN_IF -j ACCEPT 314 315 # On route le CT_WWW à sortir sur Internet avec l'IP publique 316 $IPTABLE -t nat -A POSTROUTING -o $NET_IF -s $CT_WWW -j MASQUERADE 317 318 echo " "+ VSERVERS NAT : [OK] 319} 320 321#####-------------------------- FONCTIONS ----------------------------###### 322 323#####-------------------------- START / STOP ----------------------------###### 324 325case "$1" in 326 327start|restart) 328$0 stop 329echo "$0 Starting" 330 kernel 331 synflood 332 spoofing 333 loopback 334 generique 335 336 ssh_ok 337 338 tcp_ok 339 udp_ok 340 341 vservers_nat 342 343 server_http 344 345 logging 346 347 policy DROP 348;; 349 350 351stop) 352 echo "$0 Stop" 353 $IPTABLE -F 354 $IPTABLE -t nat -F 355 $IPTABLE -Z 356 $IPTABLE -X 357 policy ACCEPT 358 ;; 359 360*) 361echo "usage : $0 (start|stop|restart)" 362;; 363 364esac 365 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 :
ln -s /root/firewall.sh /etc/init.d/firewall
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.
J'ajoute 2 commandes qui peuvent être utile :) et qui peuvent servir pour NuFW .
Script avec 1 ligne
001iptables-save > /etc/firewall.conf
Script avec 1 ligne
001iptables-restore < /etc/firewall.conf
Chain INPUT, FORWARD, OUTPUT.
Script avec 4 lignes
001iptables -L -vn 002iptables -L INPUT -vn 003iptables -L FORWARD -vn 004iptables -L OUTPUT -vn
La table NAT (Network Translation Address) :
Script avec 1 ligne
001iptables -L -vn -t nat
Cordialement,
Romain