PDA

Afficher la version complète : [réglé]Règles permanentes avec iptables



sbh
22/04/2010, 13h52
Hello,

Alors, dans le cadre d'une proxy transparent squid, j'aimerai avoir une règle iptables qui me transfert tout ce qui arrive sur le port 80 vers le port 3128 se mon squid.

J'ai donc un règle qui fonctionne très bien qui est la suivante :

<div class='quotetop'>Citation </div>
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128[/b]

Le problème, c'est que "régulièrement", cette règle "tombe". Je ne sais pas ce qui se passe sur le système la nuit ou à certains moments de la journée, mais d'un seul coup, la règle en question n'est plus effective. Dès que le la re-exécute, tout repart. J'ai rien dans mes logs, rien nul part... vraiment aucune idée :(

Par contre, tout ce que je peux dire, c'est que si cette règle tourne et que je vais faire une modif dans mon firewall avec yast, au moment ou il restart le service susefirewall, la règle tombe à nouveau.

Je ne sais pas bien ou chercher. J'ai ajouté la règle dans le fichier "firewall" dans /etc/sysconfig/network/scripts , mais un peu au pif pour être honnête....

Le plus petit indice serait le bienvenu :)

Merci d'avance!
(opensuse 11.2)

jluce
22/04/2010, 14h05
slt

fais voir ton /etc/sysconfig/network/scripts/firewall qu'on jette un oeil

a+

sbh
22/04/2010, 14h42
hello,


#!/bin/bash
#
# SuSEfirewall2 - stateful packetfilter rules generator
# Copyright (C) 2007 SUSE LINUX Products GmbH
#
# Please send feedback via http://www.suse.de/feedback
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#

set -e

unset ${!LC_*} LANUGUAGE
export LANG=POSIX

export PATH=/sbin:/usr/sbin:/usr/bin:/bin

. /etc/sysconfig/network/config

sfw2_active()
{
{ test -e /proc/net/ip_tables_names && iptables -nL reject_func >/dev/null 2>&1; } || return 1
}

case "$0" in
#
# network firewall actions executed via the link
# /etc/sysconfig/network/scripts/firewall
# by /etc/init.d/network and /sbin/ifstatus.
#
# Currently the following actions are available:
# - net-reconfig-init:
# /etc/init.d/network signals a manual restart
# to avoid firewall refresh on "up" and "down"
# of every single interface.
#
# - net-reconfig-done:
# /etc/init.d/network signals a restart end to
# reenable restarting and refresh the rules.
#
# - running:
# reports if the firewall script is running i.e.
# applying rules at the moment.
# Queried by ifstatus if the interface setup is
# still in progress; reports 'in background' then.
#
# - status:
# reports status if the firewall is active
#
# - try-restart:
# restarts the firewall when enabled and active
#
*scripts/firewall)
case $1 in
net-reconfig-init)
[ "$FIREWALL" = 'yes' ] || exit 2
sfw2_active || exit 3
/sbin/SuSEfirewall2 bootlock
;;
net-reconfig-done)
[ "$FIREWALL" = 'yes' ] || exit 2
sfw2_active || exit 3
/sbin/SuSEfirewall2 --bootunlock start
;;
running)
test -f /var/lock/SuSEfirewall2.pid
;;

status)
sfw2_active
;;
try-restart)
if sfw2_active; then
/sbin/SuSEfirewall2 start
fi
;;
esac
;;
#
# ifup /etc/sysconfig/network/if-{up,down}.d/ script part;
# refresh the firewall rules on interface "up" and "down".
#
(*if-up.d*|*if-down.d*)

config="$1"
iface="$2"

. /etc/sysconfig/network/ifcfg-"$config" 2>/dev/null || true

[ "$FIREWALL" = 'yes' ] || exit 0

if sfw2_active; then
/sbin/SuSEfirewall2 -q start
fi
;;
*) echo "don't know what to do" >&2;;
esac


Entre temps, j'ai juste fait un fichier qui backup / restore les règles iptables avec iptables-save et iptables restore, j'ai donc placé :


/usr/sbin/iptables-restore -c < /etc/iptables.rules
/usr/sbin/iptables-save -c > /etc/iptables.rules

dans /etc/NetworkManager/dispatcher.d, mais rien n'y change.

Merci :-)

jluce
22/04/2010, 14h55
re

ca en gros c'est le fichier de lancement du firewall,

ou as tu rajouter tes regles ??

a+

sbh
22/04/2010, 15h53
Ben justement :)
Je tape en ligne de commande : iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Mais forcément, dès que le service du firewall redémarre, cette règle est supprimée.

Dans le même cas de figure, une fois que cette règle est active, si je fais un iptables-save vers un ficher, la règle est bien présente.
Si je fais un iptables-restore, la règle sera active.

Le problème, c'est que si la machine redémarre, si le service du firewall redémarre les règles 'iptables' sont sont pas reprise en compte.
Alors, je ne vois pas ou je pourrais mettre cette règle, ou une commande pour faire un iptables-restore...

Merci :)

*edit*
Ou alors, je cron un .sh avec "/usr/sbin/iptables-restore -c < /etc/iptables.rules" dedans, mais ça fait sale quand même.... y'a bien un moyen... <_<

jluce
22/04/2010, 16h01
Ben justement :)
Je tape en ligne de commande : iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Mais forcément, dès que le service du firewall redémarre, cette règle est supprimée.

Dans le même cas de figure, une fois que cette règle est active, si je fais un iptables-save vers un ficher, la règle est bien présente.
Si je fais un iptables-restore, la règle sera active.

Le problème, c'est que si la machine redémarre, si le service du firewall redémarre les règles 'iptables' sont sont pas reprise en compte.
Alors, je ne vois pas ou je pourrais mettre cette règle, ou une commande pour faire un iptables-restore...

Merci :)[/b]

re

j'ai pas regarder encore le module de firewall de yast

peut être qu'on peux mettre directement une regle.....

en générale je le fais a la main via un script bash que je lance en le mettant dans la partie start de /etc/init.d/network et je disable de firewall SuSE

ce qui fait qu'il est lancé a la fin du démarrage du réseau

regarde le topic de hexoseth c'est ce genre de script

http://www.alionet.org/index.php?showtopic=26343&hl=

si ca peux aider

a+

sbh
24/04/2010, 09h33
J'ai trouvé.

Alors, en fait, c'est pas trop la peine taper les règles iptables en console, puisque de toute facon, ces règles seront chargées en mémoire, et après un reboot, ou un restart du module firewall, la règle est droppée.

Il faut en fait éditer le fichier /etc/sysconfig/SuSEfirewall2 , y'a une directive "REDIRECT" à l'intérieur et c'est là qu'on met la règle. Le fichier est super bien documenté, ca a marché du premier coup... bref, nickel :)

Voilà
Bon week end,
sbh