Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[reseau] c'est iptables ou moi? ça doit être moi (résolu)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon May 28, 2007 4:26 pm    Post subject: [reseau] c'est iptables ou moi? ça doit être moi (résolu) Reply with quote

...je comprends rien. J'ai suivis moultes tuto, que dalle rien à faire.

Voilà le problème (vous allez rire: c'est très con comme problème, d'une trivialité éffarante):

J'ai installé serveur-routeur. Un P3-600, 650Mo de ram, 4Go + 160 de dd (le 4go c pour booter car la cm détecte pas le 160go...), et 2 cartes réseaux 3com vortex (anciennces cartes PCI mais qui "devraient" fonctionner au poil). Voilà pour le matos.

L'infrastructure réseau maintenant: j'ai un modem-câble qui se connecte à internet, pour cela je l'ai connecté à l'interface eth1. Celle ci est configurée en dhcp. Normal, rien de particulier donc. L'interface eth0 est elle connectée à un switch qui est celui du LAN. LAN sur lequel j'ai 2-3 machines pour lequel je voudrais partager le net.
Enfin, je voudrais avoir quelques services comme http, ssh de lancés sur le serveur et pouvoir y accéder à partir du net.
Je précise que du LAN toutes les machines doivent pouvoir avoir accès à tout: services du serveur (nfs principalement) et bien entendu au net.

Tout ce qu'il y a de plus classique donc. J'ai suivis, donc, plusieurs tuto pour tomber dernièrement sur celui-ci http://tldp.org/HOWTO/IP-Masquerade-HOWTO/ à partir duquel j'ai fait un script (c'est quasi du copier-coller à ce niveau).

Script que voici:
Code:

#!/bin/bash

INT_IF="eth0"
EXT_IF="eth1"

# Variables valables seulement pour la confiuration complete.
INT_NET="192.168.0.0/24"
INT_GTW="192.168.0.1/32"

EXT_IP=`ifconfig $EXT_IF | awk /$EXT_IF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`

UNIVERSE="0.0.0.0/0"

SSH_PORT=22

echo "   Interface externe:  $EXT_IF"
echo "   Interface interne:  $INT_IF"

echo "   Forwarding..."
echo "1" > /proc/sys/net/ipv4/ip_forward

echo "   DynamicAddr..."
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

echo "   On nettoie les règles actuelles, et on accepte tout..."
iptables --policy INPUT ACCEPT
iptables --flush INPUT
iptables --policy OUTPUT ACCEPT
iptables --flush OUTPUT
iptables --policy FORWARD DROP
iptables --flush FORWARD
iptables --table nat --flush

if [ "$1" == "--complete" ]
then
    echo "Les règles plus complètes vont pêtre appliqués, on entre dans un mode firewall."

    echo "  Reseau interne:               $INT_NET"
    echo "  IP interne (passerelle):      $INT_GTW"

    echo "  On vide les règles et met les compteurs à 0..."
    iptables --delete-chain
    iptables --zero

    echo "  On créer une chaîne de rejet (log) ..."
    iptables --new log-n-reject
    iptables --append log-n-reject --jump LOG --log-level info
    iptables --append log-n-reject --jump REJECT

    echo "On charge les règles en entrée (INPUT)"

    echo "  L'interface loopback peut aller où elle veut..."
    iptables --append INPUT --in-interface lo --source $UNIVERSE --destination $UNIVERSE --jump ACCEPT

    echo "  Les machines locales peuvent aller où elles veulent sur le LAN..."
    iptables --append INPUT --in-interface $INT_IF --source $INT_NET --destination $UNIVERSE --jump ACCEPT

    echo "  Protection contre l'IP-spoofing..."
    iptables --append INPUT --in-interface $EXT_IF --source $INT_NET --destination $UNIVERSE --jump log-n-reject

    iptables --append INPUT --in-interface $EXT_IF --source $UNIVERSE --destination $EXT_IP --match state --state ESTABLISHED,RELATED --jump ACCEPT

    #echo "  Accès externe sur le serveur http local..."
    #iptables --append INPUT --in-interface $EXT_IF --match state --state NEW,ESTABLISHED,RELATED -p tcp --source $UNIVERSE --destination $EXT_IP --dport 80 --jump ACCEPT

    #echo "  Accès externe sur le serveur ssh local..."
    #iptables --append INPUT --in-interface $EXT_IF --match state --state NEW,ESTABLISHED,RELATED -p tcp --source $UNIVERSE --destination $EXT_IP --dport $SSH_PORT --jump ACCEPT
   
    echo "  On rejette et on log tous traffic en entré qui ne suit pas les règles..."
    iptables --append INPUT --source $UNIVERSE --destination $UNIVERSE --jump log-n-reject

    echo "On charge les règles en sortie (OUTPUT)"

    echo "  L'interface loopback peut aller où elle veut..."
    iptables --append OUTPUT --out-interface lo --source $UNIVERSE --destination $UNIVERSE --jump ACCEPT

    echo "  Les machines locales peuvent aller où elles veulent sur le LAN..."
    iptables --append OUTPUT --out-interface $INT_IF --source $EXT_IP --destination $INT_NET --jump ACCEPT
    iptables --append OUTPUT --out-interface $INT_IF --source $INT_GTW --destination $INT_NET --jump ACCEPT

    echo "  On bloque tout ce qui essais de sortir alors que ça doit rester sur le LAN..."
    iptables --append OUTPUT --out-interface $EXT_IF --source $UNIVERSE --destination $INT_NET --jump log-n-reject

    echo " Tout ce qui sort de l'interface de sortie est par contre autorisé..."
    iptables --append OUTPUT --out-interface $EXT_IF --source $EXT_IP --destination $UNIVERSE --jump ACCEPT

    echo "  On rejette et on log tout traffic en sortie qui ne suit pas les règles..."
    iptables --append OUTPUT --source $UNIVERSE --destination $UNIVERSE --jump log-n-reject

fi

echo "   FORWARD: On accepte toute connexion extèrieur et une seule connexion interne liée"
iptables --append FORWARD --in-interface $EXT_IF --out-interface $INT_IF --match state --state ESTABLISHED,RELATED --jump ACCEPT
iptables --append FORWARD --in-interface $INT_IF --out-interface $EXT_IF --jump ACCEPT

echo "   Log du forwarding..."
if [ "$1" == "--complete" ]
then
    iptables --append FORWARD --jump log-n-reject
else
    iptables --append FORWARD --jump LOG
fi

echo "   Masquerading au travers de $EXT_IF"
if [ "$1" == "--complete" ]
then
    iptables --table nat --append POSTROUTING --out-interface $EXT_IF --jump SNAT --to $EXT_IP
else
    iptables --table nat --append POSTROUTING --out-interface $EXT_IF --jump MASQUERADE
fi

echo "Règles iptables mises en place."



Maintenant le soucis c'est lorsque que je lance ce script ./ip_regles --simple (argument bidon pour le moment, pour éviter une erreur vu que je teste la variable $1). Le partage du net ne fonctionne pas, j'ai toujours accès au net à partir du serveur. Les clients peuvent pinger l'ip 192.168.0.1 qui est pour elles la passerelle. Elles peuvent aussi pinger l'addresse de eth1 (celle donnée par dhcp par le modem). Par contre le dns ne fonctionne pas, et lorsque je tente de pinger une ip sur le net j'ai un beau KERNEL PANIC sur le serveur-routeur.

Si par contre je lance ./ip_regles --complete alors là c'est festival: j'ai accès à plus rien du tout, ni côté client ni côté serveur. Ah si: clients et serveur arrivent à se voir, c'est tout.

Bon je me dis que je dois avoir de la merde dans les yeux pour pas voir THE error dans mon script ou je ne sais quoi, ça doit venir de moi c'est sûr: je dois être allergique à iptables.

Amis forumistes, faut m'enlever les oeillères là. Où donc se situe mon problème? Je commence à péter un plomb (un verre en a déjà fait les frais, sans le vouloir, rip)
_________________
membre officieux du SAV Ati GEntoo


Last edited by kwenspc on Tue May 29, 2007 8:28 pm; edited 1 time in total
Back to top
View user's profile Send private message
babykart
Guru
Guru


Joined: 08 Oct 2004
Posts: 415

PostPosted: Mon May 28, 2007 4:41 pm    Post subject: Reply with quote

je suis parti pris mais jette un oeil à ce petit howto: http://www.gentoofr.org/article34.html
_________________
>> Gentoo-FR <<
-----
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon May 28, 2007 4:52 pm    Post subject: Reply with quote

Merci, mais avant de faire confiance à un truc tout fait je veux pouvoir comprendre ce qui se passe. :wink:
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
babykart
Guru
Guru


Joined: 08 Oct 2004
Posts: 415

PostPosted: Mon May 28, 2007 5:10 pm    Post subject: Reply with quote

il te suffit d'ouvrir les fichiers

le fichier de conf:

Code:
# Didier Rebeix : 14 02 2005
# Stephane Malinet : 11 04 2006


### configuration generale
# on autorise tout sur lo
all="lo"
# on autorise le ping sur ces interfaces
ping="eth0 eth1"
# mais plus specifiquement par interface, par protocole et par port
interfaces_TCP="eth0+21+22+25+53+80+123+443+873+993+3632+4080 eth1+22+25+873+993"
interfaces_UDP="eth0+53+68+123"
# a l'exception de tout ce qui vient de ces reseaux
#exceptions="192.168.0.0/24"
#   192.168.1.0/24 \"
# log t'on les packets droppés ?
logdrop="true"      


### configuration passerelle
gateway="true"
# interface externe
extif="eth1"
# interface interne
intif="eth0"


### Dr : exemples interdictions specifiques par IP source (a destination du port 25)
#iptables -A INPUT -p tcp --dport 25 -j LOGDROP -s x.x.x.x
#iptables -A INPUT -p tcp --dport 25 -j LOGDROP -s x.x.x.x/x


### dans le cas d'une passerelle: on veut que les requetes sur le port 80 soit forwardes sur
### une machine du réseau local
#iptables -t nat -A PREROUTING -p TCP --dport 80 -i $extif -j DNAT --to-destination 192.168.129.2:80
#iptables -A FORWARD -i $extif -o $intif -p TCP --dport 80 -j ACCEPT


et le script

Code:
#!/bin/bash


# Didier Rebeix 20050214 + Stephane Malinet 20060411 :  script de gestion iptables simplifié
# Modifié par Stephane Malinet le 20060411 (v2), 20060701 (v2.1)
# necessite un fichier  /etc/netfilter-rules.conf




IPT="/sbin/iptables"


$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F PREROUTING -t nat
$IPT -F PREROUTING -t mangle
$IPT -F POSTROUTING -t nat
$IPT -F POSTROUTING -t mangle
$IPT -F LOGDROP -t filter > /dev/null 2>&1
$IPT -X LOGDROP -t filter > /dev/null 2>&1
$IPT -N LOGDROP

[ ! -f /etc/netfilter-rules.conf ] && {
        echo "/etc/netfilter-rules.conf n'existe pas" 1>&2
        exit 1
}

. /etc/netfilter-rules.conf
$IPT -t filter -A LOGDROP -j LOG --log-prefix "[DROP] "
$IPT -t filter -A LOGDROP -j DROP


OLDIFS=$IFS


# version 2
#[[ $ping == "true" ]] && {
#   $IPT -A INPUT -p ICMP -j ACCEPT
#}


# version 2.1
for int in $ping ; do
    $IPT -A INPUT -p ICMP -i $int -j ACCEPT
done


for except in $exceptions ; do
    $IPT -t filter -A INPUT -s $except -j ACCEPT
done


for int_all in $all ; do
    $IPT -t filter -A INPUT -i $int_all -j ACCEPT
done   


for int_t in $interfaces_TCP ; do
    IFS="+"
    set -- $int_t
   
    int_t=$1
    shift
    nport=$#
    i=0;
    while (( $i < $nport )) ; do
       $IPT -t filter -A INPUT -i $int_t -p TCP --dport $1 -j ACCEPT
       shift
       i=$[$i+1]
    done
   
done


IFS=$OLDIFS


for int_u in $interfaces_UDP ; do
    IFS="+"
    set -- $int_u
   
    int_u=$1
    shift
    nport=$#
    i=0;
    while (( $i < $nport )) ; do
        $IPT -t filter -A INPUT -i $int_u -p UDP --dport $1 -j ACCEPT
        shift
        i=$[$i+1]
    done
   
done


$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


[[ $gateway == "true" ]] && {
    $IPT -t nat -A POSTROUTING -o $extif -j MASQUERADE
    $IPT -A FORWARD -i $intif -o $extif -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    $IPT -A FORWARD -o $intif -i $extif -m state --state ESTABLISHED,RELATED -j ACCEPT
    echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
}


[[ $logdrop == "true" ]] && {
    $IPT -t filter -A INPUT -j LOG --log-prefix "[DROP] "
}


IFS=$OLDIFS


# on fait tout ca à la fin pour eviter de bloquer le script(et le reseau)
# en cas d'affichage (ssh)

$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT


j'utilise ce script en prod et à la maiz' le tout sans soucis et de manière parfaitement transparente lorsque, une fois éxecuté, je vérifie avec la commande "iptables -L -v"... :wink:
par ailleurs si je t'ai donné ce lien c'est juste pour que tu compares avec ton script et le modifie si besoin est...
_________________
>> Gentoo-FR <<
-----
Back to top
View user's profile Send private message
El_Goretto
Moderator
Moderator


Joined: 29 May 2004
Posts: 3110
Location: Paris

PostPosted: Mon May 28, 2007 5:24 pm    Post subject: Reply with quote

net.ipv4.ip_forward = 1 ? (sysctl)
_________________
-FreeNAS: µ-serv Gen8 G1610T, 16Go ECC & µ-serv N40L, 8Go ECC
-FreeBSD 11/Vimage/Jails: DS61, i3 2100T, 16Go
-Réseau: ERL-3 + ESL-24 + GS108Tv2
-NAS: RN312
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Mon May 28, 2007 5:33 pm    Post subject: Reply with quote

El_Goretto wrote:
net.ipv4.ip_forward = 1 ? (sysctl)

Si il y avait que ça :lol:

Bon déjà je vais changer de noyau, j'étais partis sur un hardened (le dernier "stable" en date) mais je vais être un peu plus prudent et revenir à une valeur sûr qui ne m'a jamais donné de kernel panic: gentoo-sources. hop.
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Tue May 29, 2007 5:58 am    Post subject: Reply with quote

Je crois me douter d'où viens le problème, j'ai recompilé un kernel gentoo-sources. Et en regardant de plus près je me suis rendu compte que pas mal d'options à netfilter n'était pas incluses (en module) dans ma config. En fait j'ai eu pas mal de mal à m'y retrouver. Pourquoi ont-ils tout changer dans ce menu du noyau? Il me manquait par exemple les options match, state et pas mal d'autres! Autre soucis: pourquoi iptables n'a pas été foutu de me balancer un message d'erreur au sujet de ces éléments manquant alors même que j'en utilisait certaines propriétés dans les règles? Je ne m'étonne plus d'avoir eu droit à un kernel panic...
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Tue May 29, 2007 8:08 am    Post subject: Reply with quote

j'suis pas un expert en iptables, mais je trouve que c'est bizarre de mettre
Code:
iptables --policy INPUT ACCEPT
et ensuite d'appliquer les règles, habituellement, on met la 'politique' par defaut à DROP ou DENY sur INPUT, puis seulement ensuite on n'autorise ce que l'on veut (traffic RELATED et ESTABLISHED, et aussi NEW en TCP sur les port http, et ssh..)


ensuite, sans doute que ça ira mieu avec ton prochain noyau, que tu dois être en train de préparer à l'instant même du moment présent, mais... plutôt que de nous montrer ton joli script, le mieu, à mon avis, serait de nous montrer le résultat:
Code:
iptatbles-save

_________________
The End of the Internet!
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Tue May 29, 2007 9:13 am    Post subject: Reply with quote

truc wrote:
j'suis pas un expert en iptables, mais je trouve que c'est bizarre de mettre
Code:
iptables --policy INPUT ACCEPT
et ensuite d'appliquer les règles, habituellement, on met la 'politique' par defaut à DROP ou DENY sur INPUT, puis seulement ensuite on n'autorise ce que l'on veut


Je sais, mais dans le howto dont je file le lien, j'ai suivis leur conseil en ne bloquant pas tout dès le départ mais seulement à la fin (option "--complete", elle rejette tout ce qui ne suit pas les règles, c'est aussi ce que fait le script filé par babykart). C'est judicieux car je n'accède à mon serveur que par ssh. Sinon iptables-save ne me donnait (si je me souviens bien) rien d'anormal, alors même qu'iptable essayais d'utiliser des options qui n'était pas présente dans la couche netfilter du noyau.
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Tue May 29, 2007 8:25 pm    Post subject: Reply with quote

C'est résolu, en effet ça venait de la config noyau. J'ai mis de l'ordre. Dommage qu'ils aient trifouillés tout ça, ça m'aurais évité tous ces ennuis (bon ok la prochaine fois j'y regarderais à 2 fois)
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum