Firewall & QoS

Forum sur la sécurité des réseaux, la configuration des firewalls, la mise en place de protections contre les attaques, de DMZ, de systèmes anti-intrusion ...

Modérateur: modos Ixus

Firewall & QoS

Messagepar lu6fer » 05 Jan 2007 13:39

Bonjours a tous, voila je vien de metre en place un firewall iptables et des regle de qualité de service sur mon routeur (Mandriva 2007).
j'aurai souhaiter avoir des recomendation sur mes deux scripts, mais le probleme est que les scripts reunis font environ 200 lignes donc je ne sait pas si je peut le coller dans le forum ou trouver un autre moyen.

je vais tout de meme prendre un peu d'avance :

Image

ce que je veux faire (ce que j'ai fait d'ailleur) :

etablir un firewall sur le routeur afin de securiser le reseau local.
metre en place des regles de QoS afin de diviser la bande passante de la connexion adsl (8M max) equitablement entre les 8 utilisateurs.

dites moi si je peu coller mes script ou si vous avez une autre solution.
merci d'avance
lu6fer
Second Maître
Second Maître
 
Messages: 36
Inscrit le: 18 Nov 2005 22:26

Messagepar Geceo » 05 Jan 2007 17:33

Salut!

Peut-être que 200 lignes c'est pas énorme mais bon, je ne suis pas administrateur du forum. Ne peux-tu pas résumer le genre de règles que tu as utilisées? Comme j'imagine que les huit utilisateurs sont équivalents pour ton pare-feu, en postant la configuration pour l'un d'eux, on comprendra tout aussi bien et ça divisera par huit la taille de la config... Enfin je dis peut-être une idiotie, j'ai pas vu ton fichier...

Geceo
Geceo
Premier-Maître
Premier-Maître
 
Messages: 48
Inscrit le: 07 Juil 2005 10:53

Messagepar lu6fer » 05 Jan 2007 18:31

bon avec un peu de menage dans tous les commentaire pas forcement util et autre affichage et il est vrai en suivant ton coiseil pour que qui est de la qos (ne metre que un utilisateur puisque les lignes sont identique) j'en arrive a une 100 de lignes.
je les poste donc et si un admin/modo trouve cela trop, qu'il m'en excuse et edit mon post tout en me specifian la methode adequate :D

Code: Tout sélectionner
#!/bin/bash
# chkconfig: 345 10 90
# description: FireWall/QoS pour heimdall
#
###########################
#Deffinition des variables#
###########################
INET="ppp0"
ILOC="eth1"
ADDRILOC="192.168.7.254"
NET="192.168.7.0/24"
CONMAX="11904"

#Qualité de service
DOWNLOAD=8000 #en Kbit/s
UPLOAD=1000   #en Kbit/s

##########################################
#Configuration noyau & chargement modules#
##########################################
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo $CONMAX > /proc/sys/net/ipv4/ip_conntrack_max
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then
    for filtre in /proc/sys/net/ipv4/conf/*/rp_filter ;
      do
       echo 1 > $filtre ;
      done
fi
modprobe ip_conntrack
modprobe ip_conntrack_ftp

######################
#Travail Preliminaire#
######################
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -X -t nat
iptables -X -t mangle

iptables       -P INPUT DROP
iptables       -P OUTPUT DROP
iptables       -P FORWARD DROP
iptables -t nat    -P PREROUTING ACCEPT
iptables -t nat    -P POSTROUTING ACCEPT
iptables -t nat    -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

######################
#Regles particulaires#
######################
iptables -N log_drop
iptables -A log_drop -m limit --limit 3/minute -j LOG --log-level info --log-prefix "[IPTABLES] : "
iptables -A log_drop -j DROP

iptables -t nat -A POSTROUTING -o $INET  -s $NET -j MASQUERADE

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o $INET --clamp-mss-to-pmtu

iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

###############
#Chaine OUTPUT#
###############
iptables -A OUTPUT -o $INET -p tcp --dport 21  -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p udp --dport 53  -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p udp --dport 123 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p tcp --dport 80  -m state --state NEW -j ACCEPT

##############
#Chaine INPUT#
##############
iptables -A INPUT -i $INET -p tcp --dport 53   -m state --state NEW -j ACCEPT
iptables -A INPUT -i $INET -p tcp --dport 3122 -m state --state NEW -j ACCEPT
iptables -A INPUT -i $ILOC -s $NET -m state --state NEW -j ACCEPT

################
#Chaine FORWARD#
################
iptables -A FORWARD -i $ILOC -o $INET -s 192.168.7.0/24 -m state --state NEW -j ACCEPT

##############
#Log du reste#
##############
iptables -A INPUT   -j log_drop
iptables -A OUTPUT  -j log_drop
iptables -A FORWARD -j log_drop

#++++++++++++++++++++++++++++#
#           QoS              #
#++++++++++++++++++++++++++++#


#Nettoyage tc qdisc et iptables mangle
for IFACE in ${INET} ${ILOC}
do
   tc qdisc del dev $IFACE root
done
iptables -t mangle -F

if [ "$1" = "stop" ]; then
   exit
fi

########
#Upload#
########
#classe principale

tc qdisc add dev $INET root handle 1: htb default 200
tc class add dev $INET parent 1: classid 1:1 htb rate ${UPLOAD}'kbit'

#une classe/utilisateur sur le reseaux (separation equitables de la bande passante)

#Dorothée
tc class add dev $INET parent 1: classid 1:11 htb rate $((${UPLOAD}/8))'kbit' ceil ${UPLOAD}'kbit' prio 4
tc qdisc add dev $INET parent 1:11 handle 11: sfq perturb 10
tc filter add dev $INET parent 1:0 prio 4 protocol ip handle 11 fw flowid 1:11
iptables -t mangle -A FORWARD -i $ILOC -o $INET -s 192.168.7.1 -j MARK --set-mark 11


##########
#Download#
##########
#classe principale

tc qdisc add dev $ILOC root handle 2: htb default 300
tc class add dev $ILOC parent 2: classid 2:1 htb rate ${DOWNLOAD}'kbit'

#une classe/utilisateur sur le reseaux (separation equitables de la bande passante)

#Dorothée
tc class add dev $ILOC parent 2:   classid 2:11 htb rate $((${DOWNLOAD}/8))'kbit' ceil ${DOWNLOAD}'kbit' prio 4
tc qdisc add dev $ILOC parent 2:11 handle 11:   sfq perturb 10
tc filter add dev $ILOC parent 2:0 prio 4 protocol ip handle 21 fw flowid 2:11
iptables -t mangle -A FORWARD -i $INET -o $ILOC -d 192.168.7.1 -j MARK --set-mark 21

lu6fer
Second Maître
Second Maître
 
Messages: 36
Inscrit le: 18 Nov 2005 22:26

Messagepar Franck78 » 05 Jan 2007 23:54

################
#Chaine FORWARD#
################
iptables -A FORWARD -i $ILOC -o $INET -s 192.168.7.0/24 -m state --state NEW -j ACCEPT


J'en connais qui vont trouver ca trop relaxe.... jdh ;-)

###############
#Chaine OUTPUT#
###############
iptables -A OUTPUT -o $INET -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p udp --dport 123 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p tcp --dport 80 -m state --state NEW -j ACCEPT

Tu as parlé de firewall. Pas de serveur ftp,ntp,http???
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Messagepar lu6fer » 06 Jan 2007 01:11

J'en connais qui vont trouver ca trop relaxe.... jdh Wink

oui je sais, mais je veu pas bloquer les utilisateurs du reseaux du moment ou c'est un partage de connexion privée et non pas un reseau ultra secure avec des données confidentiel.

Tu as parlé de firewall. Pas de serveur ftp,ntp,http???

Alors sans vouloir jouer les monsieur je sais tout, il me semble que c'est lignes ne servent que pour la sortie des données, et quelles ne sont pas repété en INPUT. Elles ne sont la que pour effectuer les mise a jour de facon automatique des paquage mandriva (21,80), mise a jour de l'horloge pour fournir l'heure au reseau local (123), et de faire des requete dns sur le serveur dns de mon FAI (53, plus rapide que de passer par un dns racine sur le reseau local).

sinon qu'en pensser vous que doit-je ameliorer...
lu6fer
Second Maître
Second Maître
 
Messages: 36
Inscrit le: 18 Nov 2005 22:26

Messagepar Franck78 » 06 Jan 2007 01:54

lu6fer a écrit:###############
#Chaine OUTPUT#
###############
sinon qu'en pensser vous que doit-je ameliorer...


Le commentaire ;-) Typiquement, celui la n'apporte rien de bien utile.

Juste une question:
Pourquoi laisser libre la sortie vers internet pour les stations mais la limiter pour le FW :?:
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Messagepar lu6fer » 06 Jan 2007 16:09

Franck78 a écrit:Juste une question:
Pourquoi laisser libre la sortie vers internet pour les stations mais la limiter pour le FW :?:

Heu je vois pas trop ou tu veu en venir :s
je met en place un firewall non pas pour restreindre l'acces des utilisateurs a internet mais pour restreindre l'acces au personnes pas forcement bien intentionner qui voudrai s'introduir dans mon reseaux.
je ne cherche pas un niveau de securiter digne du gouvernement americain, mais juste une protetion suffisante contre les intrus.

Le reseau en question n'est qu'un reseau composer uniquement de particuliais, les données quelle soit sur le firewall ou sur les pc clients ne sont pas d'une importance capitale.

Je ne veu pas non plus passer un temps fou sur ce firewall qui n'est pas dans un cadre profesionnel, mes cours ne me laisse pas trop de temps libres.

je cherche a faire quelque chose qui marche bien (protection suffisante mais pas draconienne) qui puisse etre evolutif (pouvoir faire tourner ce que je veu sur le firewall au detriment de la securiter certe, mais j'ai pas dutout les moyen ni la place de faire touner 1 serveur physique par service souhaiter).

alors vous me dirai ipcop est une solution qui pourai etre bien, moi j'ai pas etait convaincu je l'ai utiliser pendant ~1an, mais je trouve que le fait de pas savoir comment ca a etait fait, et le fait d'etre limiter (trouver la bonne contrib pour ajouter un service) n'est pas dutout de mon gout.

en esperant m'etre fait comprendre sur mes motivation et mes besoins.
lu6fer
Second Maître
Second Maître
 
Messages: 36
Inscrit le: 18 Nov 2005 22:26

Messagepar Geceo » 08 Jan 2007 22:00

lu6fer a écrit:
Franck78 a écrit:Juste une question:
Pourquoi laisser libre la sortie vers internet pour les stations mais la limiter pour le FW :?:

Heu je vois pas trop ou tu veu en venir :s


La règle OUTPUT ne concerne que les paquets qui sortent de la machine qui fait pare-feu. Réciproquement, la règle INPUT ne concerne que les paquets qui sont à destination de la machine qui fait pare-feu (pas vers une machine du réseau privé).

Regarde ce schéma, ça devrait t'aider à y voir plus clair :

Image

En gros, tous les paquets qui transitent par le pare-feu (ceux qui entrent par une carte Ethernet et qui sortent par une autre) ne touchent que la règle FORWARD dans la table "filter" (et bien sûr les règles PREROUTING et POSTROUTING dans la table "nat").

Donc ce qu'a dit Franck78, c'est qu'il ne comprend pas pourquoi tu as configuré ton pare-feu comme si la machine qui fait pare-feu hébergeait des serveurs.

Pour autoriser les utilisateurs du réseau local 192.168.0.0/24 à accéder à Internet, ces deux règles FORWARD suffisent :

Code: Tout sélectionner
iptables --append FORWARD --destination 192.168.0.0/24 --jump ACCEPT
iptables --append FORWARD --source 192.168.0.0/24 --jump ACCEPT


Geceo
Dernière édition par Geceo le 10 Jan 2007 18:31, édité 1 fois au total.
Geceo
Premier-Maître
Premier-Maître
 
Messages: 48
Inscrit le: 07 Juil 2005 10:53

Messagepar lu6fer » 09 Jan 2007 20:38

en fait j'avais pas bien compris le sens de la question.
mais effectivement la question est pertinenante et jusque la sans reponses....
sinon que pensser vous de la partie QoS ???

merci Geceo pour ce petit rapelle du cheminement des paquets dans les tables netfilter :P
lu6fer
Second Maître
Second Maître
 
Messages: 36
Inscrit le: 18 Nov 2005 22:26

Messagepar Geceo » 10 Jan 2007 18:39

Salut lu6fer!

Excusez-moi, j'avais écrit "lu6fer" alors que je voulais dire "Franck78". J'ai corrigé. :)

Honnêtement la partie QoS est au-delà de mes compétences actuelles donc je ne vais pas pouvoir t'aider.

Sinon je n'ai pas compris si tu avis aussi des serveurs dans ta machine qui fait pare-feu (je ne parle pas d'un serveur qui serait dans ton réseau local), et si tu voulais les rendre accessibles de l'extérieur. Si ce n'est pas le cas, tu devrais supprimer toutes ces lignes, qui concernent uniquement le routeur (voir le schéma).

Code: Tout sélectionner
###############
#Chaine OUTPUT#
###############
iptables -A OUTPUT -o $INET -p tcp --dport 21  -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p udp --dport 53  -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p udp --dport 123 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o $INET -p tcp --dport 80  -m state --state NEW -j ACCEPT

##############
#Chaine INPUT#
##############
iptables -A INPUT -i $INET -p tcp --dport 53   -m state --state NEW -j ACCEPT
iptables -A INPUT -i $INET -p tcp --dport 3122 -m state --state NEW -j ACCEPT
iptables -A INPUT -i $ILOC -s $NET -m state --state NEW -j ACCEPT


Geceo
Geceo
Premier-Maître
Premier-Maître
 
Messages: 48
Inscrit le: 07 Juil 2005 10:53

Messagepar lu6fer » 10 Jan 2007 20:50

Alors dites moi si je fait tout faux...
Je n'est donc que des serveurs sur le Firewall/routeur pour mon reseau local (dhcp, dns, ntp)

Code: Tout sélectionner
iptables -A OUTPUT -o $INET -p tcp --dport 21  -m state --state NEW -j ACCEPT

Cette ligne me sert a metre a jour automatiquement mon routeur (1 fois pas semaine) j'autorise donc le ftp a sortir du routeur pour telecharger les eventuelles mises a jour disponible

Code: Tout sélectionner
iptables -A OUTPUT -o $INET -p udp --dport 53  -m state --state NEW -j ACCEPT

Cette ligne me sert a faire des requettes au serveur dns de mon FAI (c'est tout de meme bien plus rapide de la faire comme ca que de passer par un serveur racine..)

Code: Tout sélectionner
iptables -A OUTPUT -o $INET -p udp --dport 123 -m state --state NEW -j ACCEPT

Ici je syncronise mon routeur/firewall sur un serveur ntp afin qu'il soit toujours a jour et qu'il puisse fournir une heure convenable au reseau

Code: Tout sélectionner
iptables -A OUTPUT -o $INET -p tcp --dport 80  -m state --state NEW -j ACCEPT

Celle la a rien a faire la. :? je penssai l'avoir enlever elle etait uniquement pour le test

Code: Tout sélectionner
iptables -A INPUT -i $INET -p tcp --dport 53   -m state --state NEW -j ACCEPT
iptables -A INPUT -i $INET -p tcp --dport 3122 -m state --state NEW -j ACCEPT

ensuite les seuls services accecible de l'internet sont ssh pour le prise en main de routeur, et dns parce que je compte heberger un petit site internet d'ici peu, il faut donc une foi le nom de domaine trouver que le visiteur puisse fair une demande dns pour trouver l'adresse de mon serveur www non ???

Code: Tout sélectionner
iptables -A INPUT -i $ILOC -s $NET -m state --state NEW -j ACCEPT

Cette ligne n'est certe pas tres oppurtune, elle permet juste l'acces du reseau local aux services du routeur/firewall, il est vrai que je devrai faire une selection quand au ports autoriser.

donc comme je vous est dit plus haut si je me trompe completement, je suis preneur de solution plus adapter :)
lu6fer
Second Maître
Second Maître
 
Messages: 36
Inscrit le: 18 Nov 2005 22:26

Messagepar Geceo » 10 Jan 2007 21:43

Re!

J'ai l'impression que tout ce que tu as mis est bon pour la partie "services sur le routeur".

En fait au début je trouvais bizarre d'avoir des règles avec l'état "NEW" et pas de règles correspondantes pour les états "ESTABLISHED" et "RELATED" mais je vois en faut que tu as géré ce cas-là séparément :

Code: Tout sélectionner
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


Bref ça m'a l'air bon.

Geceo
Geceo
Premier-Maître
Premier-Maître
 
Messages: 48
Inscrit le: 07 Juil 2005 10:53

Messagepar lu6fer » 11 Jan 2007 00:51

Oui j'ai fait ca comme une pseudo optimisation,
les communications etablie ou en relation n'ont pas besoin de traverser toutes les regles pour etre prises en compte c'est pour ca que je les ecries en premier.
Je ne suis pas sur que cela change grand chose mais meme si ce ne change pas grand chose n'ayant que 128Mo de ram un petit peu ce n'est pas negligable :D
lu6fer
Second Maître
Second Maître
 
Messages: 36
Inscrit le: 18 Nov 2005 22:26

Messagepar Geceo » 11 Jan 2007 12:33

Salut!

J'ai quand même un truc à dire sur ta configuration : tu ne devrais pas bloquer tous les paquets ICMP. Certains sont très utiles, en particulier ceux qui permettent de détecter les problèmes de MTU.

Donc je te recommande :

    - de DROPer dès le départ les paquets ICMP fragmentés
    - d'autoriser les pings à partir de ton routeur, donc d'autoriser "echo-request" en sortie et "echo-reply" en entrée
    - d'autoriser l'entrée et la sortie d'erreurs "time-exceeded" et "fragmentation-needed"
    - de DROPer tous les autres paquets ICMP, ce qui sera fait automatiquement puisque tu utilises la politique DROP


Cela donne :
Code: Tout sélectionner
# ICMP : les règles qui sont vraiment indispensables
iptables --append INPUT --protocol icmp --fragment --jump DROP
iptables --append OUTPUT --protocol icmp --icmp-type echo-request --jump ACCEPT
iptables --append INPUT --protocol icmp --icmp-type echo-reply --jump ACCEPT
iptables --append INPUT --protocol icmp --icmp-type time-exceeded --jump ACCEPT
iptables --append OUTPUT --protocol icmp --icmp-type time-exceeded --jump ACCEPT
iptables --append INPUT --protocol icmp --icmp-type fragmentation-needed --jump ACCEPT
iptables --append OUTPUT --protocol icmp --icmp-type fragmentation-needed --jump ACCEPT


Geceo
Geceo
Premier-Maître
Premier-Maître
 
Messages: 48
Inscrit le: 07 Juil 2005 10:53

Messagepar Franck78 » 11 Jan 2007 16:46

Geceo a écrit:Salut!

J'ai quand même un truc à dire sur ta configuration : tu ne devrais pas bloquer tous les paquets ICMP. Certains sont très utiles,


Geceo


C'est bien de rapeller cete vérité de temps en temps. ICMP transporte les messages de service de TCP/IP et fait partie du standart. Il n'est pas là que pour se faire plaisir avec ping ;-)
Mais tous n'ont pas besoin de passer le FW, c'est vrai. Trop d'infos interessantes seraient accessibles!
Franck
L'art de poser une question sur ce site afin d'obtenir la réponse
A LIRE
Avatar de l’utilisateur
Franck78
Amiral
Amiral
 
Messages: 5625
Inscrit le: 20 Fév 2004 01:00
Localisation: Paris

Suivant

Retour vers Sécurité et réseaux

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité