OldGentooWiki:Utilisation de Iptables pour un serveur Web qu'on a loué sur internet

De Gentoo-Quebec.

Go-previous.png Indes des trucs et astuces avancés


Gentoo-quebec+Funtoo-quebec.png

Utilisation de Iptables pour un serveur Web qu'on a loué sur internet


De nos jours, il est de plus abordable de louer un serveur sur le web pour héberger directement nos contenu web.

Voici le script qui va servir d'exemple tout au long de ce wiki.

Enfin, nous allons gérer tous les ports autant en entrée qu'en sortie manuellement.

Cette configuration laisse passer les pages webs(80), serveur ftp(20,21,1024),ssh(6188),rsync(873) ainsi que les requêtes DNS(53) en sortie.

Sommaire

Installation de Iptables

Gnome-dev-computer.png
# emerge -av iptables

Configuration du noyau pour Iptables

Configuration des options nécessaire section Networking

Network Support 
 --> Networking options 
     [*] Network packet filtering framework (Netfilter)  ---> 
        [*]   Advanced netfilter configuration (NEW)  
        Core Netfilter Configuration  --->   
             <M> Netfilter LOG over NFNETLINK interface
             <M> Netfilter connection tracking support         
             <M> Connection mark tracking support 
             [*] Connection tracking events  
             <M>   UDP-Lite protocol connection tracking support    
             <M>   FTP protocol support
             <M>   IRC protocol support
             <M>   Connection tracking netlink interface      
             <M> Netfilter Xtables support (required for ip_tables) 
             <M>   "CONNMARK" target support 
             <M>   "MARK" target support
             <M>   "connmark" connection mark match support
             <M>   "conntrack" connection tracking match support
             <M>   "iprange" address range match support
             <M>   "length" match support
             <M>   "limit" match support     
             <M>   "mark" match support
             <M>   "multiport" Multiple port match support               
             <M>   "pkttype" packet type match support 
             <M>   "recent" match support
             <M>   "state" match support     
             <M>   "string" match support
             <M>   "tcpmss" match support   
        IP: Netfilter Configuration  --->  
             <M> IPv4 connection tracking support (required for NAT)
             [*] proc/sysctl compatibility with old connection tracking (NEW)
             <M> IP tables support (required for filtering/masq/NAT)
                <M>   "addrtype" address type match support
                <M>   "ah" match support
                <M>   "ecn" match support
                <M>   "ttl" match support 
                <M>   Packet filtering
                <M>   REJECT target support 
                <M>   LOG target support 
                <M>   ULOG target support  
                <M>   Full NAT 
                <M>   MASQUERADE target support 
                <M>   NETMAP target support
                <M>   REDIRECT target support 
                <M>   Basic SNMP-ALG support
                <M>   Packet mangling 
                <M>   CLUSTERIP target support (EXPERIMENTAL) 
                <M>   ECN target support 
                <M>   "TTL" target support 
                <M>   raw table support (required for NOTRACK/TRACE) 
                <M>   ARP tables support                               
                <M>   ARP packet filtering 
                <M>   ARP payload mangling            


Configuration de Iptables

script iptables.sh

    #!/bin/bash

    IPT=/sbin/iptables

    IPTS="/sbin/iptables-save"

    IPTR="/sbin/iptables-restore"

    WAN_IFACE="eth0"

    lOOP_IFACE="lo"

    LOOP_IP="127.0.0.1"

    $IPT -P INPUT ACCEPT

    $IPT -P FORWARD ACCEPT

    $IPT -P OUTPUT ACCEPT

    $IPT -t nat -P PREROUTING ACCEPT

    $IPT -t nat -P POSTROUTING ACCEPT

    $IPT -t nat -P OUTPUT ACCEPT

    $IPT -t mangle -P PREROUTING ACCEPT

    $IPT -t mangle -P OUTPUT ACCEPT

    $IPT -F

    $IPT -t nat -F

    $IPT -t mangle -F

    $IPT -X

    $IPT -t nat -X

    $IPT -t mangle -X

    $IPT -P INPUT   DROP

    $IPT -P OUTPUT  DROP

    $IPT -P FORWARD DROP

    $IPT -A INPUT -p ALL -i $lOOP_IFACE -j ACCEPT

    $IPT -A INPUT -i $WAN_IFACE -m state --state INVALID -j DROP

    $IPT -A INPUT -i $WAN_IFACE -p ALL  -m state --state ESTABLISHED,RELATED -j ACCEPT

    $IPT -A INPUT -i $WAN_IFACE -p tcp  -m state --state NEW -m multiport --dports 20,21,80,873,1024,6188  -j ACCEPT

    $IPT -A INPUT -i $WAN_IFACE -p udp  --destination-port 53 -m state --state NEW -j ACCEPT

    $IPT -A OUTPUT -p ALL -s $LOOP_IP -j ACCEPT

    $IPT -A OUTPUT -p ALL -o $WAN_IFACE -j ACCEPT

    $IPT -A OUTPUT -p tcp -o $WAN_IFACE -m state --state NEW -m multiport --dports 20,21,80,873,1024,6188 -j ACCEPT

    $IPT -A OUTPUT -p udp -o $WAN_IFACE -m state --state NEW -m multiport --dports 53 -j ACCEPT


Cheminement par défaut des packets

Cheminement

À l’arrivée d’un paquet (après décision de routage) :

1. Si le paquet est destiné à l’hôte local Alors
2.       il traverse la chaîne INPUT.
3.       Si il n’est pas rejeté Alors
4.            il est transmis au processus impliqué.
5. Sinon
6.       Si le paquet est destiné à un hôte d’un autre réseau Alors
7.                 il traverse la chaîne FORWARD
8.                 Si il n’est pas rejeté Alors
9.                        il poursuit alors sa route
10.                Si le packet a traversé la chaîne FORWARD lors d'un échange LAN --> WAN, celui-ci va passer par la chaîne OUTPUT pour sortir définitivement du firewall et s'en aller vers l'internet.


Enfin, la clause FORWARD est utilisée seulement par le firewall et si celui-ci gère des adresses IP sous lui. De plus, la clause FORWARD est utilisée pour faire transiger le trafic entre le LAN et le WAN.

Pour les autres périphériques, c'est la clause OUTPUT qui est utilisée.

Mise en place du Firewall

Vous devez enregistrer ce fichier dans le répertoire /root

Par la suite, vous devez lancer les commandes suivantes pour activer le firewall :

script iptables.sh

# cd /root
# chmod +x iptables.sh
# ./iptables.sh
# iptables -L -v
# iptables-save
# /etc/init.d/iptables save
# rc-update add iptables default
# /etc/init.d/iptables start



Outils personnels