ZW3B :-: API Client * Contents * Docs by LAB3W.ORJ

Translate this page

Name : BETA-TESTERS

Project name : ZW3B-API-BETA-TESTERS

Authorized. - 200 - Client API Name and Origin Wildcard OK

¿Comment? 'Ou' ¿Que faire?, OS GNU/Linux, Réseaux, Configurer un poste Linux pour naviguer sur InterNet

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.

Author : O.Romain.Jaillet-ramey

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 :

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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)
Retirer les numéros de lignes

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
Retirer les numéros de lignes

ou

Script avec 1 ligne

001ip -4 address add 192.168.0.2/24 dev eth0
Retirer les numéros de lignes

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)
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes


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
Retirer les numéros de lignes

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
Retirer les numéros de lignes


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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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)
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

et y ajouter :

Script avec 2 lignes

001auto eth0
002iface eth0 inet dhcp
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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)
Retirer les numéros de lignes

Ajoutons au fichier de conf des interfaces réseau notre carte eth1.

Script avec 1 ligne

001vi /etc/network/interfaces
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

sans oublier d'activer dans le noyeau le forward. à la volé :

Script avec 1 ligne

001echo 1 > /proc/sys/net/ipv4/ip_forward
Retirer les numéros de lignes

en permanant :

Script avec 1 ligne

001vi /etc/network/options 
Retirer les numéros de lignes

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'ici
002iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
003
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

on va tout fermer :

Script avec 4 lignes

001# Fermer les portes
002iptables -P INPUT DROP
003iptables -P OUTPUT DROP
004iptables -P FORWARD DROP
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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
Retirer les numéros de lignes

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 ----------------------------######
Retirer les numéros de lignes

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 :


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
Retirer les numéros de lignes
Restaurer votre configuration firewall :

Script avec 1 ligne

001iptables-restore < /etc/firewall.conf
Retirer les numéros de lignes
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 -vn
002iptables -L INPUT -vn
003iptables -L FORWARD -vn
004iptables -L OUTPUT -vn
Retirer les numéros de lignes

La table NAT (Network Translation Address) :

Script avec 1 ligne

001iptables -L -vn -t nat
Retirer les numéros de lignes



Cordialement,
Romain


<< Howto Proxmox VE : OpenVZ, KVM

C'est l'heure de l'IPv6 ! >>