OVH Cloud OVH Cloud

iptables : router une adresse:port

14 réponses
Avatar
Gillot
Bonjour a tous.

Tout d'abord, je tiens à préciser que je suis autodidacte en termes de
gestion réseau.

Je vais essayer de faire bref mais concis. Voici la configuration adoptée :


@internet@-----$IPEXT
|
|
$IPFIXE
(ROUTEUR ADSL)
$IPROUTEUR
|
|
$IPFWEXT
eth1
(MACHINE LINUX)
(FIREWALL FILTRANT)
(IPTABLES)
eth0
$IPFWINT
|
|
(SWITCH)
|
|
$IPLOC
(LAN LOCAL)


En bref, je voudrais router ce qui arrive d'internet sur le port 2323 à
partir d'une machine dont l'ip est définie, vers une machine particulière
du réseau : $IPLOC sur le port 23

A savoir que le routeur prends le port entrant 2323 et le "nate" en port
23 à la sortie du routeur(j'espère m'être bien fait comprendre).

Je ne met pas tout le filtrage IP, ce serai un peu long, mais le principe
est : Je bloque tout, puis je laisse passer que ce que je veux. (FORWARD)
(Méthode classique, me semble-t-il)

Je veux juster que ce qui arrive sur eth1 en port 23 soit redirigé vers le
poste $IPLOC en port 23 :

# iptables /sbin/iptables -t nat -A POSTROUTING -p tcp -s $IPEXP --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23

Or, cette règle ne fonctionne pas et je ne comprends pas pourquoi. Si
quelqu'un peut m'expliquer et par la même occasion, me donner la réponse,
je lui en serai trés reconnaissant.

Sachant qu'a l'avenir, je voudrais pouvoir autoriser cet accés à plusieurs
postes distants simultanément (normalement ça devrait être possible)
Comment procèderiez-vous ???

A+ GIllot

10 réponses

1 2
Avatar
shal
Gillot wrote:
Bonjour a tous.

Je veux juster que ce qui arrive sur eth1 en port 23 soit redirigé vers le
poste $IPLOC en port 23 :

# iptables /sbin/iptables -t nat -A POSTROUTING -p tcp -s $IPEXP --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23

Or, cette règle ne fonctionne pas et je ne comprends pas pourquoi. Si
quelqu'un peut m'expliquer et par la même occasion, me donner la réponse,
je lui en serai trés reconnaissant.



extrait du man de iptables :
<<
DNAT
This target is only valid in the nat table, in the PREROUTING
and OUTPUT chains,>>

Donc ca semble mal partit

Avec PREROUTING au lieu de POSTROUTING ca marche.


A+

Avatar
Jean-Marie Delapierre
Le Mon, 09 Feb 2004 18:15:10 +0100, Gillot a écrit :

Bonjour a tous.

Tout d'abord, je tiens à préciser que je suis autodidacte en termes de
gestion réseau.

Je vais essayer de faire bref mais concis. Voici la configuration adoptée :


@$IPEXT
|
|
$IPFIXE
(ROUTEUR ADSL)
$IPROUTEUR
|
|
$IPFWEXT
eth1
(MACHINE LINUX)
(FIREWALL FILTRANT)
(IPTABLES)
eth0
$IPFWINT
|
|
(SWITCH)
|
|
$IPLOC
(LAN LOCAL)


En bref, je voudrais router ce qui arrive d'internet sur le port 2323 à
partir d'une machine dont l'ip est définie, vers une machine particulière
du réseau : $IPLOC sur le port 23

A savoir que le routeur prends le port entrant 2323 et le "nate" en port
23 à la sortie du routeur(j'espère m'être bien fait comprendre).

Je ne met pas tout le filtrage IP, ce serai un peu long, mais le principe
est : Je bloque tout, puis je laisse passer que ce que je veux. (FORWARD)
(Méthode classique, me semble-t-il)

Je veux juster que ce qui arrive sur eth1 en port 23 soit redirigé vers le
poste $IPLOC en port 23 :

# iptables /sbin/iptables -t nat -A POSTROUTING -p tcp -s $IPEXP --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23

Or, cette règle ne fonctionne pas et je ne comprends pas pourquoi. Si
quelqu'un peut m'expliquer et par la même occasion, me donner la réponse,
je lui en serai trés reconnaissant.

Sachant qu'a l'avenir, je voudrais pouvoir autoriser cet accés à plusieurs
postes distants simultanément (normalement ça devrait être possible)
Comment procèderiez-vous ???

A+ GIllot


Bonsoir,

Ca, c'est du routage, rien à voir avec netfilter (iptables) qui est du
firewalling (filtrage).

Cordialement.

Jean-Marie

Avatar
TiChou
Dans l'article news:,
Jean-Marie Delapierre écrivait :

Ca, c'est du routage,


Non, du routage et du natage,

rien à voir avec netfilter (iptables)


Si, puisqu'il faut autoriser le forwarding qui par défaut est bloqué nous
dit Gillot, et faire à priori de la translation d'adresse ($IPFWEXT ->
$IPLOC),

qui est du firewalling (filtrage).


Non, le mécanisme Netfilter n'est pas que du filtrage. Il sert à filtrer, à
nater, à rediriger, à marquer et à faire un tas d'autres choses sur les
paquets qui traversent la couche réseau du système.

Cordialement.


Je vous en prie.

--
TiChou

Avatar
TiChou
Dans l'article news:,
Gillot écrivait :

Bonjour a tous.


Bonsoir,

Tout d'abord, je tiens à préciser que je suis autodidacte en termes de
gestion réseau.

Je vais essayer de faire bref mais concis. Voici la configuration adoptée
:



@$IPEXT
|
|
$IPFIXE
(ROUTEUR ADSL)
$IPROUTEUR
|
|
$IPFWEXT
eth1
(MACHINE LINUX)
(FIREWALL FILTRANT)
(IPTABLES)
eth0
$IPFWINT
|
|
(SWITCH)
|
|
$IPLOC
(LAN LOCAL)


En bref, je voudrais router ce qui arrive d'internet sur le port 2323 à
partir d'une machine dont l'ip est définie, vers une machine particulière
du réseau : $IPLOC sur le port 23


Il manque des informations.
Les paquets de la machine sur le LAN qui a l'IP $IPLOC appartenant au réseau
que je vais appeller $NETINT à destination de $IPEXT arrive dans un premier
temps sur la passerelle Linux.
Mais cette passerelle Linux :
- 1er cas : se contente-t-elle juste de forwarder ces paquets vers le
routeur, ce dernier se chargeant alors de nater $IPLOC en l'IP Internet
$IPFIXE et connaissant la route à prendre pour joindre le réseau $NETINT,
- 2ème cas : ou bien nate-t-elle l'IP source $IPLOC de ces paquets en l'IP
$IPFWEXT appartenant au réseau que je vais appeller $NETEXT, et forwarde
alors ces paquets natés vers le routeur, ce dernier alors renatant ces
paquets qu'ils voient venir de l'IP $IPFWEXT, en l'IP Internet $IPFIXE et
connaissant la route à prendre pour joindre $IPFWEXT vu qu'il appartient au
même réseau $NETEXT.

Cela change pour la suite la façon dont on va forwarder la redirection
$IPFIXE:2323 vers $IPLOC:23.
Mais je prendrais le cas le plus évident pour la suite.

A savoir que le routeur prends le port entrant 2323 et le "nate" en port
23 à la sortie du routeur(j'espère m'être bien fait comprendre).


Il le nate vers quelle IP, $IPFWEXT (3ème cas) ou $IPLOC (4ème cas) ? (voir
$IPFWINT ?)

Je ne met pas tout le filtrage IP, ce serai un peu long, mais le principe
est : Je bloque tout, puis je laisse passer que ce que je veux. (FORWARD)
(Méthode classique, me semble-t-il)


Si on avait eu tout, on aurait déjà une idée du cas qui correspond au votre.
:)

Je veux juster que ce qui arrive sur eth1 en port 23 soit redirigé vers le
poste $IPLOC en port 23 :

# iptables /sbin/iptables -t nat -A POSTROUTING -p tcp -s $IPEXP --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23

Or, cette règle ne fonctionne pas et je ne comprends pas pourquoi. Si
quelqu'un peut m'expliquer et par la même occasion, me donner la réponse,
je lui en serai trés reconnaissant.


Elle ne fonctionne pas car la syntaxe est incorecte, la chaine POSTROUTING
ne correspond pas à ce qu'on doit faire.
On doit d'abord modifier l'adresse de destination avant qu'il soit router,
donc établir une règle de PREROUTING et pas POSTROUTING qui s'effectue après
le routage.

Pour la bonne règle, je vais donc envisager le cas le plus probant au vu de
ce que vous avez tenté avec votre ligne de commande, c'est-à-dire celui qui
combine le cas 2 avec le cas 3. (Si les règles concernant les autres cas
vous intéressent, je vous les donnerai par la suite.)

Je suppose auparavant que l'IP forwarding a été activé sur le système (echo
1 >/proc/sys/net/ipv4/ip_forward
), que comme vous bloquez par défaut le forwarding (iptables -t filter -P
FORWARD DROP), on autorise alors de forwarder toutes les connexions
sortantes venant des machines du LAN (iptables -A FORWARD -i eth0 -o eth1 -s
$NETINT -j ACCEPT).

Pour rediriger les connexions entrantes sur l'interface eth1 à destination
de $IPFWEXT sur le port 23 protocole tcp vers l'interface eth0 à destination
de $IPLOC, on modifie dans un premier temps l'adresse de destination :

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23 -s
$IPEXP -j DNAT --to-destination $IPLOC:23

et on autorise à forwarder cette connexion :

iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23 -s
$IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Sachant qu'a l'avenir, je voudrais pouvoir autoriser cet accés à plusieurs
postes distants simultanément (normalement ça devrait être possible)
Comment procèderiez-vous ???


Une règle par poste distant ou bien une règle commune s'ils appartiennent au
même réseau.

--
TiChou

Avatar
Gillot

Gillot wrote:
Bonjour a tous.

Je veux juster que ce qui arrive sur eth1 en port 23 soit redirigé vers le
poste $IPLOC en port 23 :

# iptables /sbin/iptables -t nat -A POSTROUTING -p tcp -s $IPEXP --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23

Or, cette règle ne fonctionne pas et je ne comprends pas pourquoi. Si
quelqu'un peut m'expliquer et par la même occasion, me donner la réponse,
je lui en serai trés reconnaissant.



extrait du man de iptables :
<<
DNAT
This target is only valid in the nat table, in the PREROUTING
and OUTPUT chains,>>

Donc ca semble mal partit

Avec PREROUTING au lieu de POSTROUTING ca marche.


Oui, effectivement, j'avais essayé avec POSTROUTING pour voir, mais
j'avais un message d'erreur. En fait, j'ai déjà essayé avec PREROUTING, et
ça ne fonctionnait pas.

A+



Avatar
Gillot
Suite ...

Il manque des informations.
Les paquets de la machine sur le LAN qui a l'IP $IPLOC appartenant au réseau
que je vais appeller $NETINT à destination de $IPEXT arrive dans un premier
temps sur la passerelle Linux.
Mais cette passerelle Linux :
- 1er cas : se contente-t-elle juste de forwarder ces paquets vers le
routeur, ce dernier se chargeant alors de nater $IPLOC en l'IP Internet
$IPFIXE et connaissant la route à prendre pour joindre le réseau
$NETINT,


NON

- 2ème cas : ou bien nate-t-elle l'IP source $IPLOC de ces paquets en l'IP
$IPFWEXT appartenant au réseau que je vais appeller $NETEXT, et forwarde
alors ces paquets natés vers le routeur, ce dernier alors renatant ces
paquets qu'ils voient venir de l'IP $IPFWEXT, en l'IP Internet $IPFIXE et
connaissant la route à prendre pour joindre $IPFWEXT vu qu'il appartient au
même réseau $NETEXT.


OUI

A savoir que le routeur prends le port entrant 2323 et le "nate" en port
23 à la sortie du routeur(j'espère m'être bien fait comprendre).


Il le nate vers quelle IP, $IPFWEXT (3ème cas) ou $IPLOC (4ème cas) ? (voir
$IPFWINT ?)


Vers $IPFWEST : le routeur ADSL ne sait pas ce qu'il y a derrière lui.

Si on avait eu tout, on aurait déjà une idée du cas qui correspond au votre.
:)


A la fin du message, j'ai mis tout mon script. Si d'ailleurs vous avez des
suggestions à faire concernant la sécurité ou la pertinance de certaines
règles, je suis toujours preneur de bons conseils, étant donné que
j'apprends sur le tas ...

J'ai modifié les adresses IP par sécurité, mais le principe reste le même.

A savoir que dans cette config, tout ce qui est "standard" (ftp, courrier,
surf etc...) fonctionne parfaitement.


# iptables /sbin/iptables -t nat -A POSTROUTING -p tcp -s $IPEXP --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23

Or, cette règle ne fonctionne pas et je ne comprends pas pourquoi. Si
quelqu'un peut m'expliquer et par la même occasion, me donner la réponse,
je lui en serai trés reconnaissant.


Elle ne fonctionne pas car la syntaxe est incorecte, la chaine POSTROUTING
ne correspond pas à ce qu'on doit faire.


Oui, effectivement, je me suis trompé à la rédaction du message, j'avais
fait cet essai (qui renvoie un message d'erreur, d'ailleurs), mais
initialement j'avais bien établi ma règle avec PREROUTING et ça ne
fonctionnait pas.

Pour la bonne règle, je vais donc envisager le cas le plus probant au vu de
ce que vous avez tenté avec votre ligne de commande, c'est-à-dire celui qui
combine le cas 2 avec le cas 3. (Si les règles concernant les autres cas
vous intéressent, je vous les donnerai par la suite.)

Je suppose auparavant que l'IP forwarding a été activé sur le système


Evident, sinon, internet ne fonctionnerai pas pour le réseau local...

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23 -s
$IPEXP -j DNAT --to-destination $IPLOC:23
iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23 -s
$IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT



Sachant qu'a l'avenir, je voudrais pouvoir autoriser cet accés à plusieurs
postes distants simultanément (normalement ça devrait être possible)
Comment procèderiez-vous ???


Une règle par poste distant ou bien une règle commune s'ils appartiennent au
même réseau.


Bon, donc ça, c'est ok, comme je le pensais.

Merci pour votre précieuse aide.


A+ Gillot ;o)




==================================================================================== /etc/rc.d/rc.firewall
====================================================================================
#!/bin/bash

# Annulation du firewall
echo Arret du firewall

# Je vide les regles qui restent
/sbin/iptables -F
/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
/sbin/iptables -F FORWARD
/sbin/iptables -F -t nat
/sbin/iptables -X
/sbin/iptables -t nat -X

# Je remet les regles par déaut
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT

# Polices par defaut
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT

# Insertion des modules de gestion réseau, tunneling etc...
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe ip_gre
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_pptp

# Paramètres IP/ethernet
IPEXT=(Vous croyez pas que je vais mettre l'adresse Internet, non ???)
IPFIXE=(Vous croyez pas que je vais mettre l'adresse Internet, non ???)
IPROUTEUR2.168.100.111
INTEXT=eth1
IPFWEXT2.168.100.1
INTLOC=eth0
IPFWINT2.168.1.112
IPLOC2.168.1.254


if [ "$1" == "on" ]; then

echo Mise en route du firewall

# Pas de spoofing
if [ -e "/proc/sys/net/ipv4/conf/*/rp_filter" ]; then
for filtre in "/proc/sys/net/ipv4/conf/*/rp_filter" ; do
echo 1 > $filtre
done
fi

# Pas de ICMP
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo Je rajoute deux règles pour les logs
# ======================================= /sbin/iptables -N LOG_DROP
/sbin/iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '
/sbin/iptables -A LOG_DROP -j DROP
/sbin/iptables -N LOG_ACCEPT
/sbin/iptables -A LOG_ACCEPT -j LOG --log-prefix '[IPTABLES ACCEPT] : '
/sbin/iptables -A LOG_ACCEPT -j ACCEPT

# Pour un filtrage efficace, d'abord, on refuse tout, et ensuite on laisse
# passer que ce qu'on veut.

echo D'abord, J'interdit tout
# =========================== /sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP

echo J'accepte tout sur le loopback de la machine locale
# ====================================================== /sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

echo J'accepte ce qui se passe sur le reseau local
# ================================================ /sbin/iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
/sbin/iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT

echo J'accepte les résolutions de nom
# =================================== /sbin/iptables -A INPUT -i $INTEXT --protocol udp --source-port 53 -j ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol udp --destination-port 53 -j ACCEPT
/sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 53 -j ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 53 -j ACCEPT

echo J'accepte le traffic Web
# =========================== /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 80 -m state --state ESTABLISHED -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT

echo J'accepte la reception d emails
# ================================== /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 110 -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 110 -j LOG_ACCEPT

echo J'accepte l'envoi d'emails
# ============================= /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 25 -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 25 -j LOG_ACCEPT

echo J'accepte le passage des News
# ================================ /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 119 -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 119 -j LOG_ACCEPT

echo Je redirige le port 23 sur l AS400.
# ======================================= #
# ***************** NE FONCTIONNE PAS ************************************
#
/sbin/iptables -t nat -A PREROUTING -p tcp -s $IPROUTEUR --dport 23 -i $INTEXT -j DNAT --to-destination $IPLOC:23

echo J'accepte le ftp
# =================== /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 21 -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 21 -j LOG_ACCEPT
/sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 20 -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 20 -j LOG_ACCEPT
/sbin/iptables -A INPUT -i $INTEXT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT -p tcp --dport 21 -m state --state NEW -j ACCEPT

echo Je accepte le passage du VPN
# =========================== /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 1723 -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol tcp --destination-port 1723 -j LOG_ACCEPT

echo Je determine un fichier de log des rejets
# ======================================== /sbin/iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] :'
/sbin/iptables -A LOG_DROP -j DROP

echo Autoriser le traffic internet du réseau local vers internet
# ========================================================== /sbin/iptables -A FORWARD -i $INTLOC -o $INTEXT -j ACCEPT
/sbin/iptables -A FORWARD -i $INTEXT -o $INTLOC -j ACCEPT
/sbin/iptables -A INPUT -i $INTLOC -j ACCEPT
/sbin/iptables -A OUTPUT -o $INTLOC -j ACCEPT

echo Tout ce qui n est pas accepté par le firewall est rejeté silencieusement et mis en logs
# ========================================================================================= /sbin/iptables -A FORWARD -j LOG_DROP
/sbin/iptables -A INPUT -j LOG_DROP
/sbin/iptables -A OUTPUT -j LOG_DROP
fi

# Activer le forwarding IP
echo 1 > /proc/sys/net/ipv4/ip_forward

# Activation du masquerading
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 0.0.0.0/0 -o $INTEXT -j MASQUERADE

# A la fin, j'affiche une liste des règles iptables :
/sbin/iptables -L


Avatar
TiChou
Dans l'article news:,
Gillot écrivait :

Je suppose auparavant que l'IP forwarding a été activé sur le système


Evident, sinon, internet ne fonctionnerai pas pour le réseau local...


Dans l'absolu, rien n'indiquait que le réseau local devait accéder à
Internet. :)

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23 -s
$IPEXP -j DNAT --to-destination $IPLOC:23
iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport
23 -s


$IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT



Vous ne nous avez pas dit cela fonctionnait correctement avec ces règles.


=========================================================================== ======== > /etc/rc.d/rc.firewall


=========================================================================== ======== >

#!/bin/bash

# Annulation du firewall
echo Arret du firewall

# Je vide les regles qui restent
/sbin/iptables -F

/sbin/iptables -F INPUT
/sbin/iptables -F OUTPUT
/sbin/iptables -F FORWARD


Les trois dernières lignes sont inutiles, le fait de faire 'iptables -F'
suffit à vider les règles de toutes les chaînes y compris les chaînes
utilisateurs.

/sbin/iptables -F -t nat

/sbin/iptables -X
/sbin/iptables -t nat -X

# Je remet les regles par déaut
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT

# Polices par defaut
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT

# Insertion des modules de gestion réseau, tunneling etc...
/sbin/modprobe ip_tables


L'insertion de ce module à ce stade du script est inutile ou est mal placée.
Effectivement l'utilisation des précédentes règles iptables implique que ce
module soit déjà chargé.
A noter que si le noyau a été compilé avec l'option Kernel Module Loader
(kmod), le fait d'utiliser la commande iptables va charger automatiquement
les modules nécéssaires.

/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc

/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat


Même remarque pour ces deux derniers modules.

/sbin/modprobe ip_gre
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_pptp

# Paramètres IP/ethernet
IPEXT=(Vous croyez pas que je vais mettre l'adresse Internet, non ???)
IPFIXE=(Vous croyez pas que je vais mettre l'adresse Internet, non ???)


Vous n'avez pas confiance en la sécurité de votre système ? :)

IPROUTEUR2.168.100.111
INTEXT=eth1
IPFWEXT2.168.100.1
INTLOC=eth0
IPFWINT2.168.1.112
IPLOC2.168.1.254


if [ "$1" == "on" ]; then

echo Mise en route du firewall

# Pas de spoofing
if [ -e "/proc/sys/net/ipv4/conf/*/rp_filter" ]; then
for filtre in "/proc/sys/net/ipv4/conf/*/rp_filter" ; do
echo 1 > $filtre
done
fi


Ou plus simplement :

[ -r /proc/sys/net/ipv4/conf/all/rp_filter ] &&
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter

# Pas de ICMP
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts


Pas très RFC tout ça et pas très utile non plus. ;)
Je préconise plutôt ça :

iptables -A INPUT -p icmp --icmp-type echo-request
-m length --length 0:92
-m limit --limit 60/minute -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP


echo Je rajoute deux règles pour les logs
# ======================================= > /sbin/iptables -N LOG_DROP
/sbin/iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] :
'

/sbin/iptables -A LOG_DROP -j DROP
/sbin/iptables -N LOG_ACCEPT
/sbin/iptables -A LOG_ACCEPT -j LOG --log-prefix '[IPTABLES
ACCEPT] : '

/sbin/iptables -A LOG_ACCEPT -j ACCEPT

# Pour un filtrage efficace, d'abord, on refuse tout, et ensuite
on laisse

# passer que ce qu'on veut.

echo D'abord, J'interdit tout
# =========================== > /sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP

echo J'accepte tout sur le loopback de la machine locale
# ====================================================== > /sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

echo J'accepte ce qui se passe sur le reseau local
# ================================================ > /sbin/iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
/sbin/iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT


On peut limiter à l'interface du réseau local, -i eth0 -o eth0.

/sbin/iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT


On peut être moins permissif avec :

iptables -A FORWARD -i eth0 -o eth1 -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d 192.168.1.0/24
-m state --state ESTABLISHED,RELATED -j ACCEPT

echo J'accepte les résolutions de nom
# =================================== > /sbin/iptables -A INPUT -i $INTEXT --protocol udp --source-port
53 -j ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
udp --destination-port 53 -j ACCEPT


Ok. Comme ce qui suit après pour le trafic Web, on peut affiner en utilisant
le match state.

/sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
53 -j ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 53 -j ACCEPT


Utile si la passerelle Linux a besoin de récupérer des zones DNS.

echo J'accepte le traffic Web
# =========================== > /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
80 -m state --state ESTABLISHED -j LOG_ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT


echo J'accepte la reception d emails
# ================================== > /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
110 -j LOG_ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 110 -j LOG_ACCEPT


echo J'accepte l'envoi d'emails
# ============================= > /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
25 -j LOG_ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 25 -j LOG_ACCEPT


echo J'accepte le passage des News
# ================================ > /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
119 -j LOG_ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 119 -j LOG_ACCEPT


Ok. Juste une remarque, pourquoi utilisez vous le match state pour le trafic
Web et pas pour vos autres règles de trafic ?

echo Je redirige le port 23 sur l AS400.
# ======================================= > #
# ***************** NE FONCTIONNE PAS ************************************
#
/sbin/iptables -t nat -A PREROUTING -p tcp -s $IPROUTEUR --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23


Je remarque ici que l'IP source de votre règle est celle du routeur (dans
votre post initial la règle était avec l'IP source de la machine qui a
initié la connexion au port 2323) et il me vient une question : votre
routeur forwarde-t-il la connexion sur votre IP fixe sur le port 2323 en
natant l'IP et le port de destination ou bien écoute-t-il sur l'IP fixe et
le port 2323 et redirige-t-il ensuite cette connexion ?
Un 'tcpdump -i eth1 port 23' pourra permettre de vérifier l'IP source
($IPROUTEUR ou $IPEXP).

Sinon, vour en revenir à votre règle, il ne suffit pas d'indiquer au noyau
comment nater cette connexion, il faut aussi l'autoriser à la forwarder, ce
qui n'est pas le cas dans votre script (-P FORWARD DROP et FORWARD -j ACCEPT
uniquement sur -s 192.168.1.0/24).

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23
-s $IPEXP -j DNAT --to-destination $IPLOC:23
iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23
-s $IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

echo J'accepte le ftp
# =================== > /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
21 -j LOG_ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 21 -j LOG_ACCEPT

/sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
20 -j LOG_ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 20 -j LOG_ACCEPT

/sbin/iptables -A INPUT -i $INTEXT -m state --state
ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT -m state --state
ESTABLISHED,RELATED -j ACCEPT


Ok.

/sbin/iptables -A OUTPUT -o $INTEXT -p tcp --dport 21 -m
state --state NEW -j ACCEPT


Cette règle est redondante (et donc inutile) avec :

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 21 -j LOG_ACCEPT


echo Je accepte le passage du VPN
# =========================== > /sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port
1723 -j LOG_ACCEPT

/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port 1723 -j LOG_ACCEPT


Ok.

echo Je determine un fichier de log des rejets
# ======================================== > /sbin/iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] :'
/sbin/iptables -A LOG_DROP -j DROP


Ok.

echo Autoriser le traffic internet du réseau local vers internet
# ========================================================== > /sbin/iptables -A FORWARD -i $INTLOC -o $INTEXT -j ACCEPT
/sbin/iptables -A FORWARD -i $INTEXT -o $INTLOC -j ACCEPT
/sbin/iptables -A INPUT -i $INTLOC -j ACCEPT
/sbin/iptables -A OUTPUT -o $INTLOC -j ACCEPT


De nouveau redondances de règles, voir incohérence car là on accepte tout et
n'importe quoi alors que la politique de départ était de bloquer tout.
De plus, notez que les chaînes INPUT et OUTPUT n'influent en rien sur le
trafic Internet des machines sur le réseau local. Un -A INPUT -j DROP et
un -A OUTPUT -j DROP en gardant les règles de FORWARD sur -j ACCEPT
continuera à laisser passer tout le trafic Internet du réseau local. Ne pas
oublier que les chaînes INPUT et OUTPUT ne concernent que le trafic local de
la machine Linux.

echo Tout ce qui n est pas accepté par le firewall est rejeté
silencieusement et mis en logs

#
=========================================================================== ============= > /sbin/iptables -A FORWARD -j LOG_DROP

/sbin/iptables -A INPUT -j LOG_DROP
/sbin/iptables -A OUTPUT -j LOG_DROP
fi


Ok.

# Activer le forwarding IP
echo 1 > /proc/sys/net/ipv4/ip_forward

# Activation du masquerading
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 0.0.0.0/0 -o
$INTEXT -j MASQUERADE


Il faut préférer le SNAT au MASQUERADE, ce dernier n'étant utile que pour
des connexions en IP dynamique.

iptables -t nat -A POSTROUTING -o $INTEXT -s 192.168.1.0/24 -j SNAT --to
$IPROUTEUR

# A la fin, j'affiche une liste des règles iptables :
/sbin/iptables -L


Notez que seules les règles de la table filter seront affichées. On peut
alors rajouter :

iptables -t nat -L

--
TiChou


Avatar
Gillot
Bien, j'ai eu le temps de m'y pencher un peu dessus.

ça ne fonctionne toujours pas.



Je suppose auparavant que l'IP forwarding a été activé sur le système


Evident, sinon, internet ne fonctionnerai pas pour le réseau local...


Dans l'absolu, rien n'indiquait que le réseau local devait accéder à
Internet. :)


Oui, c'est vrai, désolé, j'ai omis de le préciser.

======== > /etc/rc.d/rc.firewall
========
# Paramètres IP/ethernet
IPEXT=(Vous croyez pas que je vais mettre l'adresse Internet, non ???)
IPFIXE=(Vous croyez pas que je vais mettre l'adresse Internet, non ???)


Vous n'avez pas confiance en la sécurité de votre système ? :)


La meilleure sécurité c'est quand les autres ne savent pas ou vous êtes,
non ???

Merci pour tous vos conseils, j'en ai tenu compte pour optimiser mon
script dans la mesure ou j'arrive à comprendre ce qui se passe. ;o)


Je propose de se focaliser sur le problème initilal : faire passer la
liaison à partir de $IPEXT par le port 2323 depuis le routeur jusqu'au
poste $IPLOC sur le port 23


IPROUTEUR2.168.100.111
INTEXT=eth1
IPFWEXT2.168.100.1
INTLOC=eth0
IPFWINT2.168.1.112
IPLOC2.168.1.254



===========================
Ok. Juste une remarque, pourquoi utilisez vous le match state pour le trafic
Web et pas pour vos autres règles de trafic ?


Euh ... c'est quoi le match state ??? (Aie .. pas les dents...)


echo Je redirige le port 23 sur l AS400.
# ======================================= >> /sbin/iptables -t nat -A PREROUTING -p tcp -s $IPROUTEUR --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23


Je remarque ici que l'IP source de votre règle est celle du routeur (dans
votre post initial la règle était avec l'IP source de la machine qui a
initié la connexion au port 2323) et il me vient une question : votre
routeur forwarde-t-il la connexion sur votre IP fixe sur le port 2323 en
natant l'IP et le port de destination ou bien écoute-t-il sur l'IP fixe et
le port 2323 et redirige-t-il ensuite cette connexion ?


J'avais fait des essais, c'est pour ça que ce n'est pas indentique au post
inital.

En fait, le routeur reçoit bien par le port 2323, et nate en port 23. ça
fonctionne, puisque depuis chez moi, j'accède par internet au serveur
linux grâce à un telnet. (c'est comme ça que je fais des essais...)

En schéma (exemple):

10.158.78.23:2323
|
|
(ROUTEUR ADSL)
|
|
10.158.78.23:23
(Machine Linux)


Sinon, vour en revenir à votre règle, il ne suffit pas d'indiquer au noyau
comment nater cette connexion, il faut aussi l'autoriser à la forwarder, ce
qui n'est pas le cas dans votre script (-P FORWARD DROP et FORWARD -j ACCEPT
uniquement sur -s 192.168.1.0/24).


Donc, si je rajoute :

/sbin/iptables -A FORWARD -s $IPEXT -j ACCEPT

... ça devrait suffire, n'est-ce pas ???

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23
-s $IPEXP -j DNAT --to-destination $IPLOC:23
iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23
-s $IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


Je commence à comprendre ce que vous dites, mais la, j'ai un souci de
syntaxe :

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23
-s $IPEXP -j DNAT --to-destination $IPLOC:23
BAD ARGUMENT 'DNAT'

iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23
-s $IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
BAD ARGUMENT 'state'

Pourtant j'ai jeté un oeil dans le man de iptables, et ça devrait passer !


Bon, il est tard, je vais me coucher, et je regarderai ça plus en détails
demain.

Et merci encore pour votre aide.

A+ gillot ;o)



Avatar
TiChou
Dans l'article news:,
Gillot écrivait :

Je propose de se focaliser sur le problème initilal : faire passer la
liaison à partir de $IPEXT par le port 2323 depuis le routeur jusqu'au
poste $IPLOC sur le port 23


Notez quand même qu'il ne faut pas non plus trop se focaliser trop sur une
règle, car dans la majorité des cas les règles sont dépendantes des
précédentes et des suivantes. Cf ma remarque dans mon précédent post sur les
règles redondantes ou les règles qui en annulaient d'autres.
Si vous voulez vous focaliser sur une règle pour en comprendre bien son
fonctionnement, je vous conseille de l'essayer en ayant supprimer les autres
règles et en ne mettant dans un premier temps une police à ACCEPT puis
ensuite à DROP.

Ok. Juste une remarque, pourquoi utilisez vous le match state pour le
trafic


Web et pas pour vos autres règles de trafic ?


Euh ... c'est quoi le match state ??? (Aie .. pas les dents...)


C'est le match '-m state' que vous avez utilisez dans la règle suivante :

/sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 80
-m state --state ESTABLISHED -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port

80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT


Ce match permet d'appliquer la règle qu'aux paquets dont l'état correspond à
une nouvelle connexion (NEW), une connexion déjà établie (ESTABLISHED), une
connexion suivie par le module conntrack (RELATED).

echo Je redirige le port 23 sur l AS400.
# ======================================= >>> /sbin/iptables -t nat -A PREROUTING -p tcp -s $IPROUTEUR --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23


Je remarque ici que l'IP source de votre règle est celle du routeur (dans
votre post initial la règle était avec l'IP source de la machine qui a
initié la connexion au port 2323) et il me vient une question : votre
routeur forwarde-t-il la connexion sur votre IP fixe sur le port 2323 en
natant l'IP et le port de destination ou bien écoute-t-il sur l'IP fixe
et


le port 2323 et redirige-t-il ensuite cette connexion ?


J'avais fait des essais, c'est pour ça que ce n'est pas indentique au post
inital.

En fait, le routeur reçoit bien par le port 2323, et nate en port 23. ça
fonctionne, puisque depuis chez moi, j'accède par internet au serveur
linux grâce à un telnet. (c'est comme ça que je fais des essais...)


Oui, mais ça ne répond pas exactement à ma question.
Je vous conseille quand même fortement d'utiliser tcpdump pour voir ce qui
se passe sur chacune des interfaces ainsi que comment sont natés les
paquets.

En schéma (exemple):

10.158.78.23:2323
|
|
(ROUTEUR ADSL)
|
|
10.158.78.23:23
(Machine Linux)


Il serait quand même plus simple de donner concrètement les bonnes IP, parce
que là dans votre exemple, on a deux IP qui sont identiques et on ne sait
même plus si c'est normal ou pas. ;)

Sinon, vour en revenir à votre règle, il ne suffit pas d'indiquer au
noyau


comment nater cette connexion, il faut aussi l'autoriser à la forwarder,
ce


qui n'est pas le cas dans votre script (-P FORWARD DROP et FORWARD -j
ACCEPT


uniquement sur -s 192.168.1.0/24).


Donc, si je rajoute :

/sbin/iptables -A FORWARD -s $IPEXT -j ACCEPT

... ça devrait suffire, n'est-ce pas ???


Suffire pour quoi faire exactement ? Et n'oubliez que quand il s'agit de
forwarder une connexion, cela se passe dans les deux sens (machine
interne -> machine Internet et machine interne <- machine Internet) et donc
il faut autoriser ce qu'il faut dans les deux sens.

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23
-s $IPEXP -j DNAT --to-destination $IPLOC:23
iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23



-s $IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


Je commence à comprendre ce que vous dites, mais la, j'ai un souci de
syntaxe :

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23
-s $IPEXP -j DNAT --to-destination $IPLOC:23
BAD ARGUMENT 'DNAT'

iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23


-s $IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
BAD ARGUMENT 'state'

Pourtant j'ai jeté un oeil dans le man de iptables, et ça devrait passer !


Même remarque que précédement, il serait bien avant de mettre tout ça dans
un script, d'effectuer les commandes en ligne de commande et sans variables,
avec directement les adresses IP.
Car là je soupçonne fortement un problème de variable non définit, en
particulier la variable $IPEXP.
En relisant le fil de notre discussion, je remarque qu'un coup vous avez
utilisé la variable $IPEXP et ensuite la variable $IPEXT et dans ma réponse
j'en étais resté avec $IPEXP ce qui semble ne pas être la bonne variable.

Bon courage pour la suite.

--
TiChou



Avatar
Gillot

Dans l'article news:,
Gillot écrivait :

Je propose de se focaliser sur le problème initilal : faire passer la
liaison à partir de $IPEXT par le port 2323 depuis le routeur jusqu'au
poste $IPLOC sur le port 23


Notez quand même qu'il ne faut pas non plus trop se focaliser trop sur une
règle, car dans la majorité des cas les règles sont dépendantes des
précédentes et des suivantes. Cf ma remarque dans mon précédent post sur les
règles redondantes ou les règles qui en annulaient d'autres.
Si vous voulez vous focaliser sur une règle pour en comprendre bien son
fonctionnement, je vous conseille de l'essayer en ayant supprimer les autres
règles et en ne mettant dans un premier temps une police à ACCEPT puis
ensuite à DROP.

Ok. Juste une remarque, pourquoi utilisez vous le match state pour le
trafic


Web et pas pour vos autres règles de trafic ?


Euh ... c'est quoi le match state ??? (Aie .. pas les dents...)


C'est le match '-m state' que vous avez utilisez dans la règle suivante :

/sbin/iptables -A INPUT -i $INTEXT --protocol tcp --source-port 80
-m state --state ESTABLISHED -j LOG_ACCEPT
/sbin/iptables -A OUTPUT -o $INTEXT --protocol
tcp --destination-port

80 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT


Ce match permet d'appliquer la règle qu'aux paquets dont l'état correspond à
une nouvelle connexion (NEW), une connexion déjà établie (ESTABLISHED), une
connexion suivie par le module conntrack (RELATED).

echo Je redirige le port 23 sur l AS400.
# ======================================= >>>> /sbin/iptables -t nat -A PREROUTING -p tcp -s $IPROUTEUR --dport
23 -i $INTEXT -j DNAT --to-destination $IPLOC:23


Je remarque ici que l'IP source de votre règle est celle du routeur (dans
votre post initial la règle était avec l'IP source de la machine qui a
initié la connexion au port 2323) et il me vient une question : votre
routeur forwarde-t-il la connexion sur votre IP fixe sur le port 2323 en
natant l'IP et le port de destination ou bien écoute-t-il sur l'IP fixe
et


le port 2323 et redirige-t-il ensuite cette connexion ?


J'avais fait des essais, c'est pour ça que ce n'est pas indentique au post
inital.

En fait, le routeur reçoit bien par le port 2323, et nate en port 23. ça
fonctionne, puisque depuis chez moi, j'accède par internet au serveur
linux grâce à un telnet. (c'est comme ça que je fais des essais...)


Oui, mais ça ne répond pas exactement à ma question.
Je vous conseille quand même fortement d'utiliser tcpdump pour voir ce qui
se passe sur chacune des interfaces ainsi que comment sont natés les
paquets.

En schéma (exemple):

10.158.78.23:2323
|
|
(ROUTEUR ADSL)
|
|
10.158.78.23:23
(Machine Linux)


Il serait quand même plus simple de donner concrètement les bonnes IP, parce
que là dans votre exemple, on a deux IP qui sont identiques et on ne sait
même plus si c'est normal ou pas. ;)

Sinon, vour en revenir à votre règle, il ne suffit pas d'indiquer au
noyau


comment nater cette connexion, il faut aussi l'autoriser à la forwarder,
ce


qui n'est pas le cas dans votre script (-P FORWARD DROP et FORWARD -j
ACCEPT


uniquement sur -s 192.168.1.0/24).


Donc, si je rajoute :

/sbin/iptables -A FORWARD -s $IPEXT -j ACCEPT

... ça devrait suffire, n'est-ce pas ???


Suffire pour quoi faire exactement ?


Pour autoriser le traffic entrant et sortant vers $IPEXT.
Peut-être qu'il vaut mieux :
/sbin/iptables -A FORWARD -s $IPEXT -d $IPLOC -j ACCEPT

iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23
-s $IPEXP -j DNAT --to-destination $IPLOC:23
BAD ARGUMENT 'DNAT'
iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23


-s $IPEXP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
BAD ARGUMENT 'state'



Bon, alors autant pour moi, il y a eu une confusion entre $IPEXT et $IPEXP
... Plus de problèmes de syntaxe ;o))

Bon, mais ça fonctionne toujours pas.

A propos, je travaille à distance, alors je teste pas au fur et à mesure,
sinon je risque de perdre ma connection et ...
J'ai fait un script de test qui lance mon script de test pendant 30
secondes durant lesquelles j'essaye pour voir si ça marche, et ensuite, ça
reviens à la config de base (qui me permet l'accés !)

J'ai réduit le script, si vous voulez jeter un oeil, car moi je commence à
plus rien y voir !!! Vous tomberez peut-être sur le "bug" :


Merci et A+

Gillot ;o)


#=====================================================
#!/bin/bash

# GESTION FIREWALL IP par Iptables

# Insertion des modules de gestion réseau, tunneling etc...
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_nat
/sbin/modprobe ip_gre
/sbin/modprobe ip_conntrack
#/sbin/modprobe ip_conntrack_pptp

# Annulation du firewall
echo Arret du firewall
/sbin/iptables -F
/sbin/iptables -F -t nat

# Je remet les regles par defaut
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT

# Polices par defaut
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT

# AdresseIP sur le net : Depuis le 20/01/2004, adresse IP Fixe
# -------------------------------------------------------------
# site distant
IPEXT=<adresse IP>
# siege
IPFIXE=<adresse IP>
# Autres parametres
IPROUTEUR2.168.100.111

IPFWEXT2.168.100.1
INTEXT=eth1

IPFWINT2.168.1.112
INTLOC=eth0

IPLOC2.168.1.254

echo On rajoute deux regles pour les logs
/sbin/iptables -N LOG_DROP
/sbin/iptables -A LOG_DROP -j DROP
/sbin/iptables -N LOG_ACCEPT
/sbin/iptables -A LOG_ACCEPT -j ACCEPT

echo On accepte tout sur le loopback de la machine locale
# ====================================================== /sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

echo On accepte ce qui se passe sur le reseau local
# ================================================ /sbin/iptables -A FORWARD -i eth0 -o eth1 -s 192.168.1.0/24 -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -d 192.168.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT

echo On accepte les appels entrants pour l acces AS400
# =================================================== /sbin/iptables -A FORWARD -s $IPEXT -d $IPLOC -j ACCEPT

echo On redirige le port 23 sur l AS400.
# ======================================= /sbin/iptables -t nat -A PREROUTING -p tcp -i eth1 -d $IPFWEXT --dport 23
-s $IPEXT -j DNAT --to-destination $IPLOC:23
/sbin/iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp -d $IPLOC --dport 23
-s $IPEXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

echo Autoriser le traffic internet du reseau local vers internet
# ========================================================== /sbin/iptables -A FORWARD -i $INTLOC -o $INTEXT -j ACCEPT
/sbin/iptables -A FORWARD -i $INTEXT -o $INTLOC -j ACCEPT
/sbin/iptables -A INPUT -i $INTLOC -j ACCEPT
/sbin/iptables -A OUTPUT -o $INTLOC -j ACCEPT

# Le masquerading est actif : Partage de la connection Internet

# Activer le forwarding IP
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -t nat -A POSTROUTING -o $INTEXT -s 192.168.1.0/24 -j SNAT --to $IPROUTEUR




1 2