Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1557 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7
Auteur Sujet :

un script iptables spécial serveur.

n°724273
duch
Posté le 02-09-2005 à 11:12:31  profilanswer
 

Reprise du message précédent :
mouais, cruel dilemme?
 
D'un côté grace à conntrack, la plupart des règles utiles ne sont matchées que la première fois à l'ouverture de connexion.
Mais bon en même temps l'ouverture de connexion c'est important.
Et si on considère que le but d'un serveur web, c'est de servir le plus rapidement possible les pages il vaut peut-être mieux mettre l'accent sur les règles utiles.
 
MAIS, je ne peux pas les mettre à la fin, car le paquet invalide risquerait d'être accepté avant par une de mes règles utile.
 
 
EDIT : grillé par l0ky


Message édité par duch le 02-09-2005 à 11:14:38
mood
Publicité
Posté le 02-09-2005 à 11:12:31  profilanswer
 

n°724277
l0ky
Posté le 02-09-2005 à 11:15:16  profilanswer
 

duch a écrit :

Mais bon en même temps l'ouverture de connexion c'est important.
Et si on considère que le but d'un serveur web, c'est de servir le plus rapidement possible les pages il vaut peut-être mieux mettre l'accent sur les règles utiles.


 
Le traitement n'est pas si lourd pour 1 paquet dans une connexion. La chaine que j'utilise ne contient pas non plus des milliers de règles.

n°724280
duch
Posté le 02-09-2005 à 11:17:54  profilanswer
 

On est d'accord, de toute façon si je les mets à la fin elles ne servent vraiement à rien.
et tu veux pas la faire péter ta chaine? ;)
 
y'a un truc que je capte pas avec les chaines, en gros c'est une sorte de fonction, et donc même si la chaine est définie après les chaines principale, elle est qd même appellée avant (puisque tu l'appelle juste après les règles sur les paquets ESTABLISHED).
 
C'est juste une manière de faire un script plus propre alors?
 
 
 
EDIT : l'interêt c'est que tu peux y faire passer que certains paquets, genre uniquement les paquets en INPUT sur l'interface $INTERNET?


Message édité par duch le 02-09-2005 à 11:19:55
n°724282
l0ky
Posté le 02-09-2005 à 11:22:25  profilanswer
 

mes scripts sont chez moi [:pingouino]
je suis au boulot et je n'ai pas accès à mon Firewall depuis ici. Tu pourras les avoir que dimanche soir si tu es patient jusqu'à la [:mrbrelle]

n°724283
duch
Posté le 02-09-2005 à 11:25:02  profilanswer
 

je suis patient, mais c'est plus maarant d'essayer de les refaire en confrontant nos idées. Le but de ce topic (enfin c'est comme ça que je le vois), c'est de créer un script iptables nickel pour un serveur, et aussi de servir de tuto, car toutes les questions que j'ai posé je dois pas être le seul à me les poser...

n°724284
l0ky
Posté le 02-09-2005 à 11:25:36  profilanswer
 

duch a écrit :

y'a un truc que je capte pas avec les chaines, en gros c'est une sorte de fonction, et donc même si la chaine est définie après les chaines principale, elle est qd même appellée avant (puisque tu l'appelle juste après les règles sur les paquets ESTABLISHED).


Les chaines tu les crées au moment ou tu exécute ton scripts. Il faut voir iptables comme un outils de configuration de netfilter. Lorsque tu crées une chaine via iptables -N toto la chaine est crée tout de suite durant l'exécution de ton script.
 
Ensuite tu lui envois les paquets avec -j

duch a écrit :


EDIT : l'interêt c'est que tu peux y faire passer que certains paquets, genre uniquement les paquets en INPUT sur l'interface $INTERNET?


:jap: du moins ca permet d'effctuer un traitement que sur des paquets prédéterminer.


Message édité par l0ky le 02-09-2005 à 11:26:45
n°724285
duch
Posté le 02-09-2005 à 11:28:05  profilanswer
 

ok, en même temps dans mon cas, et vu les règles que j'ai, je vais y faire tout passer (même le traffic du réseau local) sauf les règles OUTPUT et les connexions déjà établies, c'est vraiment interessant niveau perfs?
 
 
 
EDIT : le but étant de faire un truc propre, je vais modifier mon script en ce sens :jap:


Message édité par duch le 02-09-2005 à 11:31:04
n°724290
duch
Posté le 02-09-2005 à 11:39:06  profilanswer
 

c'est fait, j'ai crée une chaine CHECK_VALID qui n'est appellée que pour les paquets en INPUT et je l'appelle après les règles sur l'interface loopback, ça me semble cohérent.

n°724292
l0ky
Posté le 02-09-2005 à 11:42:50  profilanswer
 

mets ta règle -N CHECK_VALID au moment de l'initialisation (au tout début, avant les policy)


Message édité par l0ky le 02-09-2005 à 11:43:57
n°724294
duch
Posté le 02-09-2005 à 11:44:25  profilanswer
 

ok, mais pourquoi? j'ai vu des scripts où elle était initialisée au moment de l'utilisation, c'est juste pour que ce soit plus lisible?

mood
Publicité
Posté le 02-09-2005 à 11:44:25  profilanswer
 

n°724296
l0ky
Posté le 02-09-2005 à 11:45:59  profilanswer
 

bah si tu vais un -j CHECK_VALID sans qu'il y ait de chaine CHECK_VALID  dans la table il va pas aimer [:pingouino]
au pire tu le mets juste avant le -j CHECK_VALID. Pour moi ca fait partit de l'initialisation de netfilter [:klem3i1]


Message édité par l0ky le 02-09-2005 à 11:47:04
n°724300
duch
Posté le 02-09-2005 à 11:48:13  profilanswer
 

tu l'as pas vu mais je l'ai déjà mis, à la ligne 73.
 
J'essaie juste de comprendre si ça a une importance autre que la lisibilité.

n°724301
l0ky
Posté le 02-09-2005 à 11:49:35  profilanswer
 

tu fais un -j à la ligne 23 et un -N à la ligne 73.
à la ligne 23 ta chaine n'est pas encore créer, il va t'envoyer chier :o

n°724304
duch
Posté le 02-09-2005 à 11:50:55  profilanswer
 

ok, je change ça et je le mets au début, je vais en profiter pour mettre les règles sur les prétendues connexions du réseau locales dans une chaine aussi...

n°724314
duch
Posté le 02-09-2005 à 11:59:18  profilanswer
 

voilà, c'est fait :
 
- les déclarations sont aux lignes 18 et 19 (après les policy car je trouve ça + logique)
- les appels se font aux lignes 30 à 35 (RESERVED_NET_CHECK est appellée 2 fois ce qui m'a permis de diviser le nombre de lignes dans la chaine par 2)
- les chaines sont définies à la fin


Message édité par duch le 02-09-2005 à 11:59:42
n°724330
duch
Posté le 02-09-2005 à 12:57:05  profilanswer
 

bah alors, y'a plus personne?
 
me dites pas qu'il n'y a pas de connerie qd même ;)
 
Il manque bien quelque chose...

n°724333
l0ky
Posté le 02-09-2005 à 13:01:07  profilanswer
 

En même temps il y a des gens qui mangent à midi [:pingouino]

n°724334
duch
Posté le 02-09-2005 à 13:02:12  profilanswer
 

ah oui c'est vrai, j'avais oublié ;)
 
bon j'vais aller chercher à manger aussi :jap:

n°724405
duch
Posté le 02-09-2005 à 15:18:26  profilanswer
 

j'ai ajouté une variante pour le ftp qui n'autorise que le trafic sortant vers un serveur de mises à jours (security.debian.org dans mon exemple).
 
j'ai ajouté des commandes non relatives à iptables à la fin pour activer des protections réseau
 
 
J'ai constaté que sur le guide de sécurisation debian, les règles pour les ouvertures de ports ne contenaient pas -m state --state NEW, pourtant ils utilisent bien la règle suivante en début de script :

Code :
  1. /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


 
 
je me demande si ce flag est vraiment nécessaire...


Message édité par duch le 02-09-2005 à 15:19:01
n°724409
Je@nb
Kindly give dime
Posté le 02-09-2005 à 15:23:19  profilanswer
 

Si tu fais un script au sens script, tu pourrais utiliser les variables et les boucles pour générer les lignes à executer. Par exemple PORT_SERVER="25 80 110 143" ou regarde le contenu de Arno ya des bonnes options qui servent aussi pour les serveurs

n°724411
l0ky
Posté le 02-09-2005 à 15:26:17  profilanswer
 

duch a écrit :

j'ai ajouté une variante pour le ftp qui n'autorise que le trafic sortant vers un serveur de mises à jours (security.debian.org dans mon exemple).
 
j'ai ajouté des commandes non relatives à iptables à la fin pour activer des protections réseau
 
 
J'ai constaté que sur le guide de sécurisation debian, les règles pour les ouvertures de ports ne contenaient pas -m state --state NEW, pourtant ils utilisent bien la règle suivante en début de script :

Code :
  1. /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


 
 
je me demande si ce flag est vraiment nécessaire...


 
Sans le flag ca marchera mais bon...

n°724413
duch
Posté le 02-09-2005 à 15:26:42  profilanswer
 

Oui je le ferais si tout les services utilisaient les mêmes règles, mais ce n'est pas le cas.
Regarde bien, les règles pour ssh, http et ftp sont différentes par exemple.
 
En le faisant service par service, je garde le contrôle et si je veux changer quelques chose pour tel port sur telle interface je peux le faire.
 
J'avais regardé le script d'Arno, et c'est pour ça que j'ai décidé de ne pas l'utiliser, pas assez souple...

n°724416
duch
Posté le 02-09-2005 à 15:28:35  profilanswer
 

Citation :

Sans le flag ca marchera mais bon...


 
mais bon, c'est pas beau c'est ça?
C'est vrai qu'on ferais moins le lien entre les premières lignes ESTABLISHED et les lignes NEW, dans l'optique d'un truc didactique c'est mieux avec le flag, mais je me demandais simplement si ça marcherait ;)

n°724422
Je@nb
Kindly give dime
Posté le 02-09-2005 à 15:37:03  profilanswer
 

duch a écrit :

Oui je le ferais si tout les services utilisaient les mêmes règles, mais ce n'est pas le cas.
Regarde bien, les règles pour ssh, http et ftp sont différentes par exemple.
 
En le faisant service par service, je garde le contrôle et si je veux changer quelques chose pour tel port sur telle interface je peux le faire.
 
J'avais regardé le script d'Arno, et c'est pour ça que j'ai décidé de ne pas l'utiliser, pas assez souple...


Ben ça dépend des services mais c'est obligé que quand tu fasses un serveur (cad qq de disponible à tous) les règles soient identiques à la différence des ports.
Après tu peux faire des règles spécifique (ou des modèles de règles spécifique) pour ouvrir un port qu'à une ip ou sous réseau ou if.
Par exemple un serveur http, mail (smtp, pop, imap), ssh, dns tu pourrais faire:
 
PORT_OUVERT="80 25 110 143" et PORT_SPEC_OUVERT="eth1>22 192.168.0.0/24>53"
 
 
Sinon on oublie souvent quelque chose dans la sécurité : ne pas faire écouter ses daemons n'importe où. Par exemple si le serveur ftp doit être local ben on va pas lui faire écouter sur son interface publique mais uniquement sur l'interface LAN. Là du coup ya même pas de risque.

n°724435
duch
Posté le 02-09-2005 à 15:55:39  profilanswer
 

y'a encore moins de risque à ne pas avoir de serveur ftp ;)
 
En tout cas faire en sorte que les serveurs n'écoutent que sur l'interface dont ils ont besoin, je le fais déjà, et c'est ce que j'essaie de transposer dans ce script aussi.

n°724440
Je@nb
Kindly give dime
Posté le 02-09-2005 à 16:01:22  profilanswer
 

ce n'est pas la question c'est juste un exemple, j'aurais pu dire dns si tu préfères on s'en fou

n°724441
Je@nb
Kindly give dime
Posté le 02-09-2005 à 16:01:44  profilanswer
 

ya encore moins de risque en débranchant l'alimentation aussi

n°724448
duch
Posté le 02-09-2005 à 16:08:26  profilanswer
 

ce n'était qu'un exemple, d'où le smiley :hello:
 
Sans débrancher l'alim, on peut débrancher le cable réseau c'est moins radical :lol:

n°724450
sebchap
Share the knowledge
Posté le 02-09-2005 à 16:25:32  profilanswer
 

duch a écrit :


Code :
  1. [...]
  2. ### Autorise tout le trafic appartenant à des connections existantes. (nécesite le module ip_conntrack) ###
  3. $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  4. $IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  5. $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  6. [...]
  7. echo 0 > /proc/sys/net/ipv4/ip_forward




Si tu n'utilise pas la chaine FORWARD, tu peux laisser la regles par defaut (DROP).
 
Tu peux aussi rajouter des regles de log avec ULOG


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
n°724454
duch
Posté le 02-09-2005 à 16:29:26  profilanswer
 

oui effectivement, je n'utilise pas FORWARD, mais je me demande, dans quel cas l'utiliser?
 
Genre si je dois contrôler le trafic qui rentre sur l'interface locale puis sort sur l'interface internet? Sur un serveur ça ne doit pas être très utile.
 
 
 
En ce qui concerne les logs, comme chacun fait à sa sauce, je ne vais pas les mettre dans ce script.


Message édité par duch le 02-09-2005 à 16:30:16
n°724457
l0ky
Posté le 02-09-2005 à 16:35:30  profilanswer
 

duch a écrit :

oui effectivement, je n'utilise pas FORWARD, mais je me demande, dans quel cas l'utiliser?
 
Genre si je dois contrôler le trafic qui rentre sur l'interface locale puis sort sur l'interface internet? Sur un serveur ça ne doit pas être très utile.
 
En ce qui concerne les logs, comme chacun fait à sa sauce, je ne vais pas les mettre dans ce script.


 
Normalement un serveur ne devrait pas router de trafic.
Normalement le firewall ne devrait pas se trouver sur le serveur.

n°724458
sebchap
Share the knowledge
Posté le 02-09-2005 à 16:36:04  profilanswer
 

La chaine FORWARD peut servir a partager la connexion, rediriger certains ports pour des services tournant derriere le firewall. Je ne pense pas que tu ai a t'en servir mais ca peut être necessaire si tu fais ecouter un de tes services sur l'interface local mais que tu veux y acceder aussi par l'interface web (ce n'est qu'un exemple, ca n'a pas d'interet AMHA)


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
n°724459
Je@nb
Kindly give dime
Posté le 02-09-2005 à 16:36:19  profilanswer
 

Pourtant c'est plus utile :)
Au moins LOG :)

n°724461
duch
Posté le 02-09-2005 à 16:37:49  profilanswer
 

l0ky a écrit :

Normalement un serveur ne devrait pas router de trafic.
Normalement le firewall ne devrait pas se trouver sur le serveur.


 
Donc ok avec sebchap pour virer les règles FORWARD, je vais par contre laisser echo 0 > /proc/sys/net/ipv4/ip_forward car ça désactive explicitement le forwarding.
 
En ce qui concerne le fait que le firewall soit sur le serveur, l'explication est donnée au premier post, c'est une 2è ligne de défense.

n°724462
Je@nb
Kindly give dime
Posté le 02-09-2005 à 16:38:30  profilanswer
 

sebchap a écrit :

La chaine FORWARD peut servir a partager la connexion, rediriger certains ports pour des services tournant derriere le firewall. Je ne pense pas que tu ai a t'en servir mais ca peut être necessaire si tu fais ecouter un de tes services sur l'interface local mais que tu veux y acceder aussi par l'interface web (ce n'est qu'un exemple, ca n'a pas d'interet AMHA)


 
 
Non ça c'est la table nat, la chaine forward dans la table filter sert à autoriser ou pas au moment du routage les paquet à transiter.
par exemple iptables -I FORWARD -p tcp --dport 80 -i eth1 -j ACCEPT (et la chaine inverse) pour autoriser les machines de eth1 à envoyer des paquets vers le port 80 à l'extérieur du réseau.

n°724465
duch
Posté le 02-09-2005 à 16:41:51  profilanswer
 

y'a pas un commande magique pour LOGger tous les paquets DROPped?

n°724466
sebchap
Share the knowledge
Posté le 02-09-2005 à 16:43:00  profilanswer
 

Je@nb a écrit :

Non ça c'est la table nat, la chaine forward dans la table filter sert à autoriser ou pas au moment du routage les paquet à transiter.
par exemple iptables -I FORWARD -p tcp --dport 80 -i eth1 -j ACCEPT (et la chaine inverse) pour autoriser les machines de eth1 à envoyer des paquets vers le port 80 à l'extérieur du réseau.


 :jap: je confonds a chaque fois. Decidemment, j'ai bien fais de participer a ce topic, ca va me remettre les idées au clair :D


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
n°724467
l0ky
Posté le 02-09-2005 à 16:43:49  profilanswer
 

tu rajoute en derniere position une commande pour logguer tout ce qui est droppé (à la fin de la chaine OUTPUT et INPUT)
mais regarde du coté de -m limit pour pas que tes log explosent.

n°724469
l0ky
Posté le 02-09-2005 à 16:45:16  profilanswer
 



iptables -A OUTPUT -j ULOG --ulog-prefix Dropped
iptables -A INPUT -j ULOG --ulog-prefix Dopped


Message édité par l0ky le 02-09-2005 à 16:45:28
n°724470
duch
Posté le 02-09-2005 à 16:45:32  profilanswer
 

on peut logger et dropper dans la même règle? Tout les scripts que j'ai vu nécessitaient 2 règles :crazy:

n°724471
Je@nb
Kindly give dime
Posté le 02-09-2005 à 16:46:23  profilanswer
 

Ils n'avaient pas un -m limite par hasard ?

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7

Aller à :
Ajouter une réponse
 

Sujets relatifs
[script] séparer des chiffresAntivirus client(win$$) / serveur(debian)
fonctionnalités du serveur asterisk[script] faire une addition avec le flux d'entrée
Comment créer un sous domaine avec un script ?Acceder à un serveur de fichiers sous novell
pb d'affichage de script entre namo 5.5 et firefox 1.0.3[iptables?] Plusieurs passerelles
[iptables] Rediriger certaines ip du port 80 vers ailleursProblème Debian et HLDS (serveur CS) 50% idle
Plus de sujets relatifs à : un script iptables spécial serveur.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR