[HOWTO] 2 connexions internet simultanée

2 connexions internet simultanée [HOWTO] - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 27-08-2003 à 20:26:12    

Salut à tous, je viens de finir la config de ma CCBox 2 pour qu'elle supporte 2 connections Internet simultannées.  
 
J'ai eu beaucoup de soucis pour faire fonctionner mon serveur de manière optimale donc j'espere que ce modeste tutorial permetra a certains de moins galérer  
Ce tutorial est basé sur la distrib CC en version 2 mais peut sans probléme être adapté sur toute machine linux.  
 
J'ai également posté ce message sur Ixus
 
Petit historique :  
------------------  
Etant abonné à Free dégroupé je suis souvent victime de probléme techniques plus ou moins long   c'est pourquoi j'ai decidé de rajouter une deuxiéme ligne téléphonique chez moi ainsi qu'un abonnement ADSL 1024 à Club Internet   J'ai donc desormais 2 connexiosn ADSL qu'il s'agisait d'exploiter à fond...  
 
Solution matérielle alternative :  
-----------------------------------  
Pour ceux qui ne veulent pas se fatiquer à configurer une machine Linux il y a un routeur chez Nexland qui permet de gérer 2 accès WAN le ISB 800 Pro Turbo. Mais d'une part ca vaut + de 400? et d'autre part Nexland a été racheté par Symantec et il n'est pas sur qu'ils continuent à produire ce routeur. (http://www.materiel.net/details_ISB-PRO800T.html)  
 
Matériel minimum nécessaire :  
---------------------------------  
- Un PC qui permet de faire tourner Linux (c pas beaucoup demandé)  
- 3 cartes réseaux reconnues par le penguin  
- 2 modems ADSL Ethernet (ou routeur/modem)  
(PS : la config peut être adaptée aux PPPoE/A via modem USB avec un peut de travail)  
 
Pour info voici ma config :  
- Athlon 1700Xp / 256Mo / 40Go  
- 1 port réseau sur CM  
- 2 cartes réseaux PCI "noname" à 10?  
- Un modem/routeur SMC Bra 7401  
- Un modem Alcatel STH patché en 510v3  
Le SMC est configuré pour ClubInternet et le Alcatel pour Free  
 
Interfaces :  
------------  
On suppose que l'on a 2 interfaces externes : eth1 et eth2  
Le réseau local (LAN) est sur  
 
WORLD                                WORLD  
  |                                            |  
Free                                    Club Internet  
192.168.2.1                     192.168.1.1  
        \\eth1                          eth2/  
    192.168.2.100       192.168.1.100  
                NAT ROUTER  
                    |192.168.0.100  
                ----+-------------------+---  
                        Internal Boxes       192.168.0.XXX  
 
Merci a Julian pour le shéma  
 
Donc :  
-192.168.2.100 est l'adresse IP de la carte réseau connecté au modem STH  
-192.168.2.1 est l'adresse IP du modem STH  
Pareil du côté de SMC  
 
Mise en place :  
---------------  
 
1- Modification du Kernel :  
------------------------------  
 
Avant toutes choses il faut patché et recompiler le Kernel de Linux.  
 
Le but de ce tutorial n'est pas d'apprendre à recompiler un Kernel pour cela allez sur :  
http://lea-linux.org/kernel/  
 
Sous CC vous devez installer l'environnement de developpement ainsi que les sources du kernel. Il y a plein d'explication sur le forum officiel. (de mémoire il faut utiliser apt-get)  
 
Vous devez donc patcher votre Kernel avec le diff de Julian Anastasov sur http://www.ssi.bg/~ja/#routes (ClarkConnect utilise un Kernel 2.4.X)  
 
Pour rappel la commande pour patcher :  
#/usr/src/linux patch -p1 < file.diff  
 
Dans le noyau vous devez activer toutes les options réseaux avancées en particulier le MULTIPATH.  
 
On compile et on intstall.  
 
2- Création d'un fichier de configuration des interfaces réseaux :  
-------------------------------------------------------------------------  
 
Afin de facilier toutes modifs ultérieures et autres changement de configuration on va créer un fichier de paramétre du réseau. Je sais ca existe déjà notament dans /etc/sysconfig/networking-sripts mais bon je trouve ces fichiers compliqués et difficiles d'accés.  
 
on appel le fichier network-settings  
 
A oui désolé pour les non anglophones mais en général je fait tous mes scripts en Anglais...  
 
 
En réponse à:
 
 
 
 
# Network settings for iproute.sh and iptables.sh  
# Author: Cyrille  
 
########################################################  
# LAN / INTERNAL  
########################################################  
 
LANIF="eth0"                  # Interface  
LANIP="192.168.0.100"  # IP Address  
NMI="24"                          # Network Mask  
NWI="192.168.0.0"          # Network Address  
 
#########################################################  
# EXTERNAL 1 : FREE (with STH)  
#########################################################  
EXTIF1="eth1"                  # Interface  
EXTIP1="192.168.2.100"# IP Address  
GWE1="192.168.2.1"          # Gateway  
NME1="24"                          # Network mask in number of bits  
BRD1="192.168.2.255"          # Broadcast Address  
NWE1="192.168.2.0"          # Network Address  
 
########################################################  
# EXTERNAL 2 : CLUB INTERNET  
########################################################  
 
EXTIF2="eth2"                  # Interface  
EXTIP2="192.168.1.100"# IP Address  
GWE2="192.168.1.1"          # Gateway  
NME2="24"                          # Network mask in number of bits  
BRD2="192.168.1.255"          # Broadcast Address  
NWE2="192.168.1.0"          # Network Address  
 
 
 
 
 
Ce fichier sert juste à récapituler vos paramétres réseaux. Remplacez les valeurs par les votres. N'oubliez pas que les adresses de chaque interface doivent être dans le même subnet.  
 
3- Mise en place du fichier iproute.sh :  
------------------------------------------  
Ce fichier sert a regénérer les interfaces réseaux ainsi que la table de routage au démarage de l'ordinateur.  
Ce fichier se place dans /etc/rc.d et on fait un chmod +x dessus.  
 
 
En réponse à:
 
 
 
#!/bin/sh  
#  
# Network and routing table script  
# Author: Cyrille Stepanyk  
#  
 
##########################################################  
# SETTINGS  
##########################################################  
 
# Read Network Settings File  
[ -f /etc/rc.d/network-settings ] && . /etc/rc.d/network-settings  
 
##########################################################  
# NICS SETTINGS  
##########################################################  
 
# local loopback  
ip link set lo up  
ip addr add 127.0.0.1/8 brd + dev lo  
 
# eth0  
ip link set $LANIF up  
ip addr add $LANIP/$NMI brd + dev $LANIF  
 
# eth1  
ip link set $EXTIF1 up  
ip addr add $EXTIP1/$NME1 brd $BRD1 dev $EXTIF1  
ifconfig $EXTIF1 mtu 1472  
 
# eth2  
ip link set $EXTIF2 up  
ip addr add $EXTIP2/$NME2 brd $BRD2 dev $EXTIF2  
ifconfig $EXTIF2 mtu 1472  
 
##########################################################  
# ROUTING TABLE  
##########################################################  
 
# table main  
ip rule add prio 10 table main  
 
# table 20  
ip rule add prio 20 from $NWE1/$NME1 table 20  
ip route append default via $GWE1 dev $EXTIF1 src $EXTIP1 table 20  
 
# table 30  
ip rule add prio 30 from $NWE2/$NME2 table 30  
ip route append default via $GWE2 dev $EXTIF2 src $EXTIP2 table 30  
 
# table 100  
ip rule add prio 100 from $NWI/$NMI table 100  
ip route add default table 100 nexthop via $GWE1 dev $EXTIF1 weight 2 nexthop via $GWE2 dev $EXTIF2 weight 1  
 
# table 200  
ip rule add prio 200 table 200  
ip route append default via $GWE1 dev $EXTIF1 src $EXTIP1 table 200  
ip route append default via $GWE2 dev $EXTIF2 src $EXTIP2 table 200  
 
# Flush existing cache  
echo 1 >/proc/sys/net/ipv4/route/flush  
 
 
 
 
 
3- Modification des régles de firewall de CC :  
--------------------------------------------------  
 
Je me suis permis de modifier un peu le scipt rc.firewall (/etc/rc.d) afin de prendre en compte les 2 interfaces internet.  
Au lieu d'écraser ce fichier j'en ai crée un nouveau appelé iptables.sh et stocké dans /etc/rc.d/  
Pour que le firewall le prenne en compte il faut modifier le fichier /etc/rc.d/init.d/firewall :  
 
 
En réponse à:
 
 
 
IPTABLES_CONFIG=/etc/rc.d/iptables.sh  
 
 
 
 
Le fichier iptables.sh contient :  
 
 
En réponse à:
 
 
 
 
#!/bin/sh  
#  
# Firewall Script  
# Author : Cyrille  
#  
 
##########################################################  
# SETTINGS  
##########################################################  
 
# Path  
PATH=/sbin:/bin:/usr/bin  
 
# Binaries  
IPTABLES="/sbin/iptables"  
LOGGER="/usr/bin/logger -p local6.notice -t firewall"  
SYSCTL="/sbin/sysctl"  
MODPROBE="/sbin/modprobe"  
IPCALC="/bin/ipcalc"  
 
# Set to blank for no debug.  Default to on for now.  
DEBUG="1"  
 
# Shorthand  
ALLIP="0.0.0.0/0"  
 
# Read Network Settings File  
[ -f /etc/rc.d/network-settings ] && . /etc/rc.d/network-settings  
 
##########################################################  
# FUNCTIONS  
##########################################################  
 
# Kernet security settings  
 
SetKernelSettings() {  
        [ $DEBUG ] && $LOGGER "Setting kernel parameters"  
        echo " [Setting kernel parameters]"  
        # Enable IP Forwarding, not really required for standalone mode  
        $SYSCTL -w net.ipv4.ip_forward=1 >/dev/null  
 
        # Enable TCP SYN Cookie protection:  
        $SYSCTL -w net.ipv4.tcp_syncookies=1 >/dev/null  
 
        # Enabling dynamic TCP/IP address hacking.  
        $SYSCTL -w net.ipv4.ip_dynaddr=1 >/dev/null  
 
        # Log spoofed, source-routed, and redirect packets  
        $SYSCTL -w net.ipv4.conf.all.log_martians=0 >/dev/null  
 
        # Disable ICMP Re-directs  
        $SYSCTL -w net.ipv4.conf.all.accept_redirects=0 >/dev/null  
        $SYSCTL -w net.ipv4.conf.all.send_redirects=0 >/dev/null  
 
        # Ensure that source-routed packets are dropped  
        $SYSCTL -w net.ipv4.conf.all.accept_source_route=0 >/dev/null  
 
        # Disable ICMP broadcast echo protection  
        $SYSCTL -w net.ipv4.icmp_echo_ignore_broadcasts=1 >/dev/null  
 
        # Enable bad error message protection  
        $SYSCTL -w net.ipv4.icmp_ignore_bogus_error_responses=1 >/dev/null  
}  
 
# Default policy to accept  
 
SetPolicyToAccept() {  
        $LOGGER "Setting default policy to accept"  
        echo " [Setting default policy to accept]"  
        for TABLE in filter nat mangle; do  
                $IPTABLES -t $TABLE -F     # Flush all previous rules.  
                $IPTABLES -t $TABLE -X     # Delete user-defined chains.  
        done  
 
        $IPTABLES -P INPUT ACCEPT  
        $IPTABLES -P OUTPUT ACCEPT  
        $IPTABLES -P FORWARD ACCEPT  
}  
 
# Default policy to drop  
 
SetPolicyToDrop() {  
        $LOGGER "Setting default policy to drop"  
        echo " [Setting default policy to drop]"  
        for TABLE in filter nat mangle; do  
                $IPTABLES -t $TABLE -F     # Flush all previous rules.  
                $IPTABLES -t $TABLE -X     # Delete user-defined chains.  
        done  
 
        $IPTABLES -P INPUT DROP  
        $IPTABLES -P OUTPUT DROP  
        $IPTABLES -P FORWARD DROP  
}  
 
# Statefull firewall mode  
 
SetConfigurationStatefull() {  
        $LOGGER "Setting firewall to statefull"  
        echo " [Setting firewall to statefull]"  
 
        $IPTABLES -t filter -N keep_state  
        $IPTABLES -t filter -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT  
        $IPTABLES -t filter -A keep_state -j RETURN  
 
        $IPTABLES -t nat -N keep_state  
        $IPTABLES -t nat -A keep_state -m state --state RELATED,ESTABLISHED -j ACCEPT  
        $IPTABLES -t nat -A keep_state -j RETURN  
 
        $IPTABLES -t nat -A PREROUTING -j keep_state  
        $IPTABLES -t nat -A POSTROUTING -j keep_state  
        $IPTABLES -t nat -A OUTPUT -j keep_state  
 
        $IPTABLES -t filter -A INPUT -j keep_state  
        $IPTABLES -t filter -A FORWARD -j keep_state  
        $IPTABLES -t filter -A OUTPUT -j keep_state  
}  
 
##########################################################  
# CHAINS DEFINITION  
##########################################################  
 
DefineChains() {  
        [ $DEBUG ] && $LOGGER "Defining custom chains"  
        echo " [Defining custom chains]"  
 
        # Create a chain for dropping reserved network IPs  
        #-------------------------------------------------  
        $IPTABLES -N drop-reserved  
        $IPTABLES -t filter -A drop-reserved -j LOG --log-prefix "Drop - reserved network: "  
        $IPTABLES -t filter -A drop-reserved -j DROP  
 
        # Create a chain for dropping services that shouldn't leave the LAN  
        #------------------------------------------------------------------  
        $IPTABLES -N drop-lan  
        $IPTABLES -t filter -A drop-lan -j LOG --log-prefix "Drop - LAN only: "  
        $IPTABLES -t filter -A drop-lan -j DROP  
 
        # Create chains for testing  
        #--------------------------  
        $IPTABLES -N drop-log  
        $IPTABLES -t filter -A drop-log -j LOG --log-prefix "Drop with log: "  
        $IPTABLES -t filter -A drop-log -j DROP  
        $IPTABLES -N accept-log  
        $IPTABLES -t filter -A accept-log -j LOG --log-prefix "Accept with log: "  
        $IPTABLES -t filter -A accept-log -j ACCEPT  
}  
 
##########################################################  
# KERNEL MODULES  
##########################################################  
 
LoadKernelModules() {  
        [ $DEBUG ] && $LOGGER "Loading kernel modules"  
        echo " [Loading kernel modules]"  
 
        $MODPROBE ipt_LOG           # Add LOG target.  
        $MODPROBE ipt_REJECT        # Add REJECT target.  
        $MODPROBE ipt_MASQUERADE    # Add MASQUERADE target.  
        $MODPROBE ipt_owner         # Allows you to match for the owner.  
        $MODPROBE ip_conntrack_ftp  # Connection tracking for FTP.  
        $MODPROBE ip_conntrack_irc  # Connection tracking for IRC.  
        $MODPROBE ip_nat_ftp        # Active FTP  
        $MODPROBE ip_nat_irc        # IRC stuff  
         
        # PPTP and dependencies don't always auto-load...  
        # Office Edition only.  
        $MODPROBE ppp_generic > /dev/null 2>&1  
        $MODPROBE ppp_mppe > /dev/null 2>&1  
        $MODPROBE ip_conntrack_proto_gre > /dev/null 2>&1  
        $MODPROBE ip_conntrack_pptp > /dev/null 2>&1  
        $MODPROBE ip_nat_proto_gre > /dev/null 2>&1  
}  
 
##########################################################  
# COMMON RULES (All firewall)  
##########################################################  
 
RunCommonRules() {  
        [ $DEBUG ] && $LOGGER "Running common rules"  
        echo " [Running common rules]"  
 
        # Allow everything on the loopback  
        #---------------------------------  
 
        $IPTABLES -A INPUT -i lo -j ACCEPT  
        $IPTABLES -A OUTPUT -o lo -j ACCEPT  
 
        # Allow everything on LAN network  
        #--------------------------------  
 
        $IPTABLES -A INPUT -i $LANIF -j ACCEPT  
        $IPTABLES -A OUTPUT -o $LANIF -j ACCEPT  
        $IPTABLES -A FORWARD -i $LANIF -j ACCEPT  
 
        # Block IPs that should never show up on our external interface  
        #--------------------------------------------------------------  
 
        $IPTABLES -A INPUT -i $EXTIF1 -s 127.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 1.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 23.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 31.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 96.0.0.0/3 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 128.0.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 128.9.64.26/32 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 128.66.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 191.255.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 197.0.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 201.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 223.255.255.0/24 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 240.0.0.0/5 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 248.0.0.0/5 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF1 -s 192.168.0.0/16 -j DROP  
        $IPTABLES -A INPUT -i $EXTIF1 -s 172.16.0.0/12 -j DROP  
 
        $IPTABLES -A INPUT -i $EXTIF2 -s 127.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 1.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 23.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 31.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 96.0.0.0/3 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 128.0.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 128.9.64.26/32 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 128.66.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 191.255.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 197.0.0.0/16 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 201.0.0.0/8 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 223.255.255.0/24 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 240.0.0.0/5 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 248.0.0.0/5 -j drop-reserved  
        $IPTABLES -A INPUT -i $EXTIF2 -s 172.16.0.0/12 -j DROP  
 
        # Allow some ICMP (ping)  
        #-----------------------  
        # ICMP can be used for attacks.. we allow as little as possible.  
        # The following are necessary ports we *can't* do without:  
        # 0  Needed to ping hosts outside the network.  
        # 3  Needed by all networks.  
        # 11 Needed by the traceroute program.  
 
        $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p icmp --icmp-type 0 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p icmp --icmp-type 3 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p icmp --icmp-type 11 -j ACCEPT  
        # This allows other hosts to ping you.  You should keep this rule.  
        $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p icmp --icmp-type 8 -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF1 -s $EXTIP1 -p icmp -j ACCEPT  
 
        $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p icmp --icmp-type 0 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p icmp --icmp-type 3 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p icmp --icmp-type 11 -j ACCEPT  
        # This allows other hosts to ping you.  You should keep this rule.  
        $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p icmp --icmp-type 8 -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF2 -s $EXTIP2 -p icmp -j ACCEPT  
}  
 
##########################################################  
# INCOMING ALLOWED DEFAULT  
##########################################################  
 
RunIncomingAllowedDefaults() {  
        [ $DEBUG ] && $LOGGER "Running default incoming rules"  
        echo " [Running default incoming rules]"  
 
        # Allow high ports  
        #-----------------  
        $IPTABLES -A OUTPUT -o $EXTIF1 -s $EXTIP1 -p tcp --sport 1024:65535 -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF1 -s $EXTIP1 -p udp --sport 1024:65535 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p udp --dport 1024:65535 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p tcp --dport 1024:65535 \\  
                -m state --state ESTABLISHED,RELATED -j ACCEPT  
                 
        $IPTABLES -A OUTPUT -o $EXTIF2 -s $EXTIP2 -p tcp --sport 1024:65535 -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF2 -s $EXTIP2 -p udp --sport 1024:65535 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p udp --dport 1024:65535 -j ACCEPT  
        $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p tcp --dport 1024:65535 \\  
                -m state --state ESTABLISHED,RELATED -j ACCEPT  
}  
 
##########################################################  
# INCOMING ALLOWED USER  
##########################################################  
 
RunIncomingAllowed() {  
        [ $DEBUG ] && $LOGGER "Running user-defined incoming rules"  
        echo " [Running user-defined incoming rules]"  
 
        # Standard ports and port ranges  
        #-------------------------------  
        for RULE in $INCOMING_ALLOW; do  
                PROTOCOL=`echo $RULE | cut -d '|' -f1`  
                PORT=`echo $RULE | cut -d '|' -f2`  
                $LOGGER "Allowing incoming $PROTOCOL port $PORT"  
                $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p $PROTOCOL --dport $PORT -j ACCEPT  
                $IPTABLES -A OUTPUT -o $EXTIF1 -s $EXTIP1 -p $PROTOCOL --sport $PORT -j ACCEPT  
                $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p $PROTOCOL --dport $PORT -j ACCEPT  
                $IPTABLES -A OUTPUT -o $EXTIF2 -s $EXTIP2 -p $PROTOCOL --sport $PORT -j ACCEPT  
        done  
        for RULE in $INCOMING_ALLOW_RANGE; do  
                PROTOCOL=`echo $RULE | cut -d '|' -f1`  
                RANGE=`echo $RULE | cut -d '|' -f2`  
                $LOGGER "Allowing incoming $PROTOCOL port $RANGE"  
                $IPTABLES -A INPUT -i $EXTIF1 -d $EXTIP1 -p $PROTOCOL --dport $RANGE -j ACCEPT  
                $IPTABLES -A OUTPUT -o $EXTIF1 -s $EXTIP1 -p $PROTOCOL --sport $RANGE -j ACCEPT  
                $IPTABLES -A INPUT -i $EXTIF2 -d $EXTIP2 -p $PROTOCOL --dport $RANGE -j ACCEPT  
                $IPTABLES -A OUTPUT -o $EXTIF1 -s $EXTIP2 -p $PROTOCOL --sport $RANGE -j ACCEPT  
        done  
}  
 
##########################################################  
# INCOMING DENIED DEFAULT  
##########################################################  
 
RunIncomingDeniedDefaults() {  
        echo " [RunIncomingDeniedDefaults]"  
 
        $IPTABLES -A INPUT -i $EXTIF1 -s $ALLIP -d $ALLIP -j DROP  
        $IPTABLES -A OUTPUT -o $EXTIF1 -s $ALLIP -d $ALLIP -j DROP  
        $IPTABLES -A INPUT -i $EXTIF2 -s $ALLIP -d $ALLIP -j DROP  
        $IPTABLES -A OUTPUT -o $EXTIF2 -s $ALLIP -d $ALLIP -j DROP  
}  
 
##########################################################  
# OUTGOING ALLOWED DEFAULT (LAN Network to Internet)  
##########################################################  
 
RunOutgoingAllowed() {  
 
        echo " [RunOutgoingAllowed]"  
 
        #TCP Ports  
        $IPTABLES -A INPUT  -i $EXTIF1 -p tcp -m multiport --sport 20,21,53,80,110,25,443,143,123,119,220  -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF1 -p tcp -m multiport --dport 20,21,53,80,110,25,443,143,123,119,220 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A INPUT  -i $EXTIF2 -p tcp -m multiport --sport 20,21,53,80,110,25,443,143,123,119,220 -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF2 -p tcp -m multiport --dport 20,21,53,80,110,25,443,143,123,119,220 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
 
        #UDP Ports  
        $IPTABLES -A INPUT  -i $EXTIF1 -p udp --sport 53  -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF1 -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A INPUT  -i $EXTIF2 -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF2 -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
         
        #Emule / EDonkey  
        $IPTABLES -A INPUT  -i $EXTIF1 -p tcp --sport 4662 -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF1 -p tcp --dport 4662 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A INPUT  -i $EXTIF2 -p tcp --sport 4662 -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF2 -p tcp --dport 4662 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
         
        $IPTABLES -A INPUT  -i $EXTIF1 -p udp --sport 4672 -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF1 -p udp --dport 4672 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A INPUT  -i $EXTIF2 -p udp --sport 4672 -m state --state ESTABLISHED,RELATED -j ACCEPT  
        $IPTABLES -A OUTPUT -o $EXTIF2 -p udp --dport 4672 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT  
 
}  
 
##########################################################  
# OUTGOING DENIED DEFAULT  
##########################################################  
 
RunOutgoingDeniedDefaults() {  
        [ $DEBUG ] && $LOGGER "Running default block outgoing rules"  
        echo " [Running default block outgoing rules]"  
 
        # Block services from leaving the LAN (low port numbers)  
        # Snort will log suspicious traffic in high port ranges  
        #-------------------------------------------------------  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF1 -p tcp --dport 111     # RPC stuff  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF1 -p udp --dport 111     # RPC stuff  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF1 -p tcp --dport 137:139 # Samba  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF1 -p udp --dport 137:139 # Samba  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF1 -p tcp --dport 635     # Mountd  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF1 -p udp --dport 635     # Mountd  
         
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF2 -p tcp --dport 111     # RPC stuff  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF2 -p udp --dport 111     # RPC stuff  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF2 -p tcp --dport 137:139 # Samba  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF2 -p udp --dport 137:139 # Samba  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF2 -p tcp --dport 635     # Mountd  
        $IPTABLES -A FORWARD -j drop-lan -o $EXTIF2 -p udp --dport 635     # Mountd  
}  
 
##########################################################  
# OUTGOING DENIED USER RULES  
##########################################################  
 
RunOutgoingDenied() {  
        [ $DEBUG ] && $LOGGER "Running user-defined block outgoing rules"  
        echo " [Running user-defined block outgoing rules]"  
 
        for RULE in $OUTGOING_BLOCK; do  
                PROTOCOL=`echo $RULE | cut -d '|' -f1`  
                PORT=`echo $RULE | cut -d '|' -f2`  
                $LOGGER "Blocking outgoing $PROTOCOL port $PORT"  
                $IPTABLES -A FORWARD -s $NWI/$NMI -d 0/0 -p $PROTOCOL --dport $PORT -j DROP  
        done  
        for RULE in $OUTGOING_BLOCK_RANGE; do  
                PROTOCOL=`echo $RULE | cut -d '|' -f1`  
                RANGE=`echo $RULE | cut -d '|' -f2`  
                $LOGGER "Blocking outgoing $PROTOCOL port $PORT"  
                $IPTABLES -A FORWARD -s $NWI/$NMI -d 0/0 -p $PROTOCOL --dport $PORT -j DROP  
        done  
        for HOST in $OUTGOING_BLOCK_DESTS; do  
                $LOGGER "Blocking traffic to $HOST"  
                $IPTABLES -A FORWARD -s $NWI/$NMI -d $HOST -j DROP  
        done  
}  
 
##########################################################  
# PORT FORWARD USER RULES  
##########################################################  
 
RunPortForwardRules() {  
        [ $DEBUG ] && $LOGGER "Running user-defined port forward rules"  
        echo " [Running user-defined port forward rules]"  
 
        for RULE in $FORWARD; do  
                PROTOCOL=`echo $RULE | cut -d '|' -f1`  
                SOURCE=`echo $RULE | cut -d '|' -f3`  
                DEST=`echo $RULE | cut -d '|' -f4`  
                NATTRICK=`echo $DEST | cut -d ':' -f1`  
                $LOGGER "Port forwarding TCP $SOURCE to $DEST"  
                $IPTABLES -t nat -A PREROUTING -d $EXTIP1 -p $PROTOCOL --dport $SOURCE -j DNAT --to $DEST  
                $IPTABLES -t nat -A PREROUTING -d $EXTIP2 -p $PROTOCOL --dport $SOURCE -j DNAT --to $DEST  
                $IPTABLES -t nat -A POSTROUTING -d $NATTRICK -p $PROTOCOL -s $NWI/$NMI --dport $SOURCE -j SNAT --to $LANIP  
        done  
        for RULE in $FORWARD_RANGE; do  
                PROTOCOL=`echo $RULE | cut -d '|' -f1`  
                RANGE=`echo $RULE | cut -d '|' -f3`  
                DEST=`echo $RULE | cut -d '|' -f4`  
                $LOGGER "Port forwarding range $PROTOCOL $RANGE to $DEST"  
                $IPTABLES -t nat -A PREROUTING -d $EXTIP1 -p $PROTOCOL --dport $RANGE -j DNAT --to $DEST  
                $IPTABLES -t nat -A PREROUTING -d $EXTIP2 -p $PROTOCOL --dport $RANGE -j DNAT --to $DEST  
                $IPTABLES -t nat -A POSTROUTING -d $DEST -p $PROTOCOL -s $NWI/$NMI --dport $RANGE -j SNAT --to $LANIP  
        done  
}  
 
##########################################################  
# REMAP PORTS USER DEFINED IF SQUID TRANSPARENT  
##########################################################  
 
RunRemapPorts() {  
        [ $DEBUG ] && $LOGGER "Running user-defined port re-map rules"  
echo " [Running user-defined port re-map rules]"  
 
        if [ "$SQUID_TRANSPARENT" == "on" ]; then  
                # Is a content filter in transparent mode too?  
                if [ ! -z "$SQUID_FILTER_TRANSPARENT" ]; then  
                        $LOGGER "Squid+Filter transparent mode enabled for filter port $SQUID_FILTER_TRANSPARENT"  
                        $IPTABLES -t nat -A PREROUTING -i ! $EXTIF1 -p tcp --dport 80 -j REDIRECT --to-port $SQUID_FILTER_TRANSPARENT  
                        $IPTABLES -t nat -A PREROUTING -i ! $EXTIF2 -p tcp --dport 80 -j REDIRECT --to-port $SQUID_FILTER_TRANSPARENT  
 
                        $LOGGER "Squid+Filter transparent mode is now blocking the regular proxy port 3128"  
                        $IPTABLES -t nat -I PREROUTING -p tcp -s ! 127.0.0.1 --dport 3128 -j DROP  
                else  
                        $LOGGER "Squid transparent mode enabled"  
                        $IPTABLES -t nat -A PREROUTING -i ! $EXTIF1 -p tcp --dport 80 -j REDIRECT --to-port 3128  
                        $IPTABLES -t nat -A PREROUTING -i ! $EXTIF2 -p tcp --dport 80 -j REDIRECT --to-port 3128  
                fi  
        fi  
}  
 
##########################################################  
# ENABLE MASQUERADING  
##########################################################  
 
RunMasquerading() {  
echo " [RunMasquerading]"  
 
#        $IPTABLES -t nat -A POSTROUTING -o $EXTIF1 -s $NWI/$NMI -j SNAT --to $EXTIP1  
#        $IPTABLES -t nat -A POSTROUTING -o $EXTIF2 -s $NWI/$NMI -j SNAT --to $EXTIP2  
        $IPTABLES -t nat -A POSTROUTING -o $EXTIF1 -s $NWI/$NMI -j MASQUERADE  
        $IPTABLES -t nat -A POSTROUTING -o $EXTIF2 -s $NWI/$NMI -j MASQUERADE  
        $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT  
}  
 
##########################################################  
# G A T E W A Y   F I R E W A L L  
##########################################################  
 
gateway() {  
        $LOGGER "Using gateway mode"  
        echo " [Run Gateway]"  
 
        SetKernelSettings  
        SetPolicyToDrop  
        LoadKernelModules  
        DefineChains  
        RunCommonRules  
        SetConfigurationStatefull  
        RunRemapPorts  
        RunIncomingAllowed  
        RunIncomingAllowedDefaults  
        RunIncomingDeniedDefaults  
#        RunOutgoingAllowed  
        RunPortForwardRules  
        RunOutgoingDenied  
        RunOutgoingDeniedDefaults  
        RunMasquerading  
 
        # Log other forwarding  
        #---------------------  
        $IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 \\  
                -j LOG --log-level DEBUG --log-prefix "Stray FORWARD packet: "  
        $IPTABLES -A FORWARD -j ACCEPT  
}  
 
#########################################################  
# M A I N                                                                
#########################################################  
 
$LOGGER "Starting firewall..."  
 
# Read configuration file  
#------------------------  
 
[ -f /etc/firewall ] && . /etc/firewall  
 
DEFAULTMODE="gateway"  
 
if [ "$MODE" == "gateway" ]; then  
        gateway  
elif [ "$MODE" == "trustedgateway" ]; then  
        gateway  
elif [ "$MODE" == "standalone" ]; then  
        gateway  
elif [ "$MODE" == "trustedstandalone" ]; then  
        gateway  
else  
        $LOGGER "Invalid mode in /etc/firewall... using standalone mode"  
        gateway  
fi  
 
 
 
 
 
Ce fichier est loin d'être parfait et il peut être amélioré. J'attends vos suggestions.  
 
On redemare le firewall : service firewall restart  
 
4- Nettoyage  
---------------  
 
Afin que le fichier iproute.sh s'execute dans les meilleurs conditions on va nettoyer un peu avec le fichier flush-iproute.sh  
 
 
En réponse à:
 
 
 
#!/bin/sh  
#    
# Network and routing table flush script  
# Author: Cyrille  
#  
 
##########################################################  
# SETTINGS  
##########################################################  
 
# Read Network Settings File  
[ -f /etc/rc.d/network-settings ] && . /etc/rc.d/network-settings  
 
##########################################################  
# FUNCTIONS  
##########################################################  
 
# Cleaning NICs  
 
ip addr flush dev lo  
ip addr flush dev eth0  
ip addr flush dev eth1  
ip addr flush dev eth2  
 
# Routing table cleaning  
 
ip route del default table main  
ip route flush table main  
ip route flush table 10  
ip route flush table 20  
ip route flush table 30  
ip route flush table 100  
ip route flush table 200  
ip route flush table 201  
ip route flush table 202  
ip route flush table 222  
 
# Rules cleaning  
 
ip rule del prio 50 table main  
ip rule del prio 10 table main  
ip rule del prio 200  
ip rule del from $NWE1/$NME1 table 201  
ip rule del from $NWE2/$NME2 table 202  
ip rule del from $NWE1/$NME1 table 20  
ip rule del from $NWE2/$NME2 table 30  
ip rule del from $NWI/$NMI table 100  
ip rule del prio 222  
 
# Cache cleaning  
ip route flush cache  
 
 
 
 
 
On place ce fichier dans /etc/rc.d et on le rend executable  
 
5- Mise en place de la nouvelle table de routage dans le démarage :  
---------------------------------------------------------------------------  
 
Pour que les modifs apparaissent des le démarage on rajoute a la fin du script /etc/rc.d/rc.local  
 
 
En réponse à:
 
 
 
. /etc/rc.d/flush-iproute.sh  
. /etc/rc.d/iproute.sh  
 
 
 
 
6- Fin:  
------  
 
Normalement tout devrai fonctionner proprement.  
On peut vérifier que les deux connections fonctionent avec la commande tcpdump -i ethX où X est le n° d'interface.  
Sinon bien lire le fichier nano.txt surtout la fin pour faire les tests.  
 
J'espere que cela vous aura aidé. Ce n'est qu'un premier jet pouvant (devant) être améliorer.  
 
Liens  
------  
 
Voici les sites sur lesquels je me suis appuyés pour faire ce HOWTO  
http://www.docum.org/  
http://www.lartc.org/  
http://www.ssi.bg/~ja/  
Et notament  
http://www.ssi.bg/~ja/nano.txt  
http://www.ssi.bg/~ja/dgd-usage.txt  
http://www.linux-france.org/prj/inetdoc/guides/lartc/  
 
A+  
Cyrille

Reply

Marsh Posté le 27-08-2003 à 20:26:12   

Reply

Marsh Posté le 27-08-2003 à 21:07:38    

han drapo !

Reply

Marsh Posté le 28-08-2003 à 13:45:59    

plop

Reply

Marsh Posté le 28-08-2003 à 14:10:55    

[:drapo]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed