Iptables, j'y arrive pas...
Fredish
Messages postés
373
Statut
Membre
-
Fredish Messages postés 373 Statut Membre -
Fredish Messages postés 373 Statut Membre -
Bonsoir à tous.
Suite à l'installation d'une debian sur mon pc, j'ai décidé de me pencher quelque peu sur le formidable firewall qu'est iptables. Donc, après avoir regardé des tutos par-ci, par-là, je crée mes propres règles. Mais malheureusement rien ne marche, je comprends pas. Si ca ne vous dérange pas, je mets mon fichier, pour me dire qu'est-ce qui ne va pas:
J'ai compris que l'ordre des regles est très important; est-ce parce que je bloque tout d'abord? Faut-il mettre les polices après? J'ai déjà essayé, mais ca marche pas. Bref, j'aimerais un avis exterieur. Merci.
P.S.: je précise quand même que la connexion marche bien, le firewall désactivé,je n'ai aucun problème pour surfer.
Suite à l'installation d'une debian sur mon pc, j'ai décidé de me pencher quelque peu sur le formidable firewall qu'est iptables. Donc, après avoir regardé des tutos par-ci, par-là, je crée mes propres règles. Mais malheureusement rien ne marche, je comprends pas. Si ca ne vous dérange pas, je mets mon fichier, pour me dire qu'est-ce qui ne va pas:
# REMISE à ZERO des règles de filtrage iptables -F iptables -X #Tout accepter en local iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT #Connexions entrantes ignorées iptables -P INPUT DROP #Forward ignoré iptables -P FORWARD DROP #Connexions sortantes ignorées iptables -P OUTPUT DROP #Accepter le DNS iptables -A INPUT -s 195.170.0.2 --protocol udp --source-port 53 -j ACCEPT iptables -A INPUT -s 195.170.2.1 --protocol udp --source-port 53 -j ACCEPT iptables -A OUTPUT -s 195.170.0.2 --protocol udp --destination-port 53 -j ACCEPT iptables -A OUTPUT -s 195.170.2.1 --protocol udp --destination-port 53 -j ACCEPT #Accepter le protocole ICMP iptables -N ICMP iptables -A ICMP -p icmp --icmp-type echo-reply -j ACCEPT iptables -A ICMP -p icmp --icmp-type echo-request -j ACCEPT iptables -A ICMP -p icmp --icmp-type source-quench -j ACCEPT iptables -A ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A ICMP -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A ICMP -p icmp --icmp-type parameter-problem -j ACCEPT #Virer le reste iptables -A ICMP -j DROP iptables -A INPUT -p icmp -j ICMP #Ignorer le protocole IGMP iptables -A INPUT -p igmp -j DROP #Ignorer le protocole PIM iptables -A INPUT -p pim -j DROP #http iptables -A INPUT --protocol tcp --source-port 80 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT --protocol tcp --destination-port 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT --protocol tcp -m multiport --sports 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #ftp iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT #Mode passif iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
J'ai compris que l'ordre des regles est très important; est-ce parce que je bloque tout d'abord? Faut-il mettre les polices après? J'ai déjà essayé, mais ca marche pas. Bref, j'aimerais un avis exterieur. Merci.
P.S.: je précise quand même que la connexion marche bien, le firewall désactivé,je n'ai aucun problème pour surfer.
12 réponses
Salut Fredish :)
Bon qu'est ce qui ne fonctionne pas exactement ?
PS: pout le DNS, je pense qu'il y a un soucis, ce qui pourai effectivement faire que rien ne fonctionne :)
195.170.0.2 et 195.170.2.1 sont sont des adresse à toi ?, ou se sont les DNS de ton FAI ?
En tout les cas, il doit y avoir un probleme au niveau des adresses source et destination.
De plus, le protocole pour dns, c'est UDP et TCP :)
Bon qu'est ce qui ne fonctionne pas exactement ?
PS: pout le DNS, je pense qu'il y a un soucis, ce qui pourai effectivement faire que rien ne fonctionne :)
195.170.0.2 et 195.170.2.1 sont sont des adresse à toi ?, ou se sont les DNS de ton FAI ?
En tout les cas, il doit y avoir un probleme au niveau des adresses source et destination.
De plus, le protocole pour dns, c'est UDP et TCP :)
"Si c'est stupide et que ça marche, alors ce n'est pas stupide"
Je ne peux pas acceder au web; quand je demande google, mozilla me dit qu'il ne peut pas le trouver. Suffit de stopper le firewall pour que ca remarche. J'ai pas essayé le ftp.
Les adresses citées plus haut sont bien celles de mon fai. J'avais pas pensé au tcp. Le fait est que sur la mandrake, je l'ai bloqué le dns en tcp, car je crois bien que ce n'est que pour les serveurs. Je vais essayer. Merci bien asevere.
Mais sinon, tout est bon à part ca?
Les adresses citées plus haut sont bien celles de mon fai. J'avais pas pensé au tcp. Le fait est que sur la mandrake, je l'ai bloqué le dns en tcp, car je crois bien que ce n'est que pour les serveurs. Je vais essayer. Merci bien asevere.
Mais sinon, tout est bon à part ca?
essayes ça pour le DNS:
#Accepter le DNS iptables -A INPUT -s 195.170.0.2 --protocol udp --source-port 53 -j ACCEPT iptables -A INPUT -s 195.170.2.1 --protocol udp --source-port 53 -j ACCEPT iptables -A OUTPUT -d 195.170.0.2 --protocol udp --destination-port 53 -j ACCEPT iptables -A OUTPUT -d 195.170.2.1 --protocol udp --destination-port 53 -j ACCEPT "Si c'est stupide et que ça marche, alors ce n'est pas stupide"
Pour http, tu peux suprimmer les deux premiere lignes,
En fait non, tu enleves bien les deux premiere ligne, mais tu conserve le -m multiport dans les suivant, c'est bien deux ports que tu ouvres, pas un interval :)
En fait non, tu enleves bien les deux premiere ligne, mais tu conserve le -m multiport dans les suivant, c'est bien deux ports que tu ouvres, pas un interval :)
"Si c'est stupide et que ça marche, alors ce n'est pas stupide"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon, ben, c'etait bien un soucis de dns, je comprends pas, c'est pourtant bien les adresses de mon fai. Ca évite d'ouvrir des ports un peu à n'importe qui, mais bon. Par contre, je confirme, pas besoin de tcp pour les requetes dns.
J'ai bien viré les deux premieres lignes en http, elles etaient de trop.
Je mets le fichier complet, pour ceux qui s'y essayent aussi; de toute facon, c'est tiré de divers tuto, lea, etc, et puis c'est encore à peaufiner; je veux mettre les serveurs dns de mon fai. et puis d'autres regles, pour le chat notamment:
Par contre, je comprends pas trop comment iptables lit le fichier, de bas en haut ou de haut en bas? Parce que si c'est le cas, il bloquerait tout depuis le début, non?
En tout cas, je te remercie bien asevere; quand est-ce que je pourrais te rendre la pareille moi aussi?
:)
J'ai bien viré les deux premieres lignes en http, elles etaient de trop.
Je mets le fichier complet, pour ceux qui s'y essayent aussi; de toute facon, c'est tiré de divers tuto, lea, etc, et puis c'est encore à peaufiner; je veux mettre les serveurs dns de mon fai. et puis d'autres regles, pour le chat notamment:
# REMISE à ZERO des règles de filtrage iptables -F iptables -X #Tout accepter en local iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT #Connexions entrantes ignorées iptables -P INPUT DROP #Forward ignoré iptables -P FORWARD DROP #Connexions sortantes ignorées iptables -P OUTPUT DROP #Accepter le DNS iptables -A INPUT --protocol udp --source-port 53 -j ACCEPT iptables -A OUTPUT--protocol udp --destination-port 53 -j ACCEPT #Accepter le protocole ICMP iptables -N ICMP iptables -A ICMP -p icmp --icmp-type echo-reply -j ACCEPT iptables -A ICMP -p icmp --icmp-type echo-request -j ACCEPT iptables -A ICMP -p icmp --icmp-type source-quench -j ACCEPT iptables -A ICMP -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A ICMP -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A ICMP -p icmp --icmp-type parameter-problem -j ACCEPT #Virer le reste iptables -A ICMP -j DROP iptables -A INPUT -p icmp -j ICMP #Ignorer le protocole IGMP iptables -A INPUT -p igmp -j DROP #Ignorer le protocole PIM iptables -A INPUT -p pim -j DROP #http iptables -A INPUT --protocol tcp -m multiport --sports 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #ftp iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT #Mode passif iptables -A INPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
Par contre, je comprends pas trop comment iptables lit le fichier, de bas en haut ou de haut en bas? Parce que si c'est le cas, il bloquerait tout depuis le début, non?
En tout cas, je te remercie bien asevere; quand est-ce que je pourrais te rendre la pareille moi aussi?
:)
Salut,
En fait, une fois les tables chargée,
un paquet arrive, il passe par la table INPUT, il passe par toute les chaines, dés qu'il y a corresspondance, il applique la politique corresspondante, et s'il n'y en a aucune, il applique la politique par défaut. :o)
Pour les DNS, tu autorisait bien ce qui venait des serveurs, mais tu bloquai l'envoie de requete de ton PC, vers ces serveurs. Dans les deux chaines OUPUT du DNS, il fallait metre le IP en tant que destination (-d) et non sources (-s)
voii voilou! @++
En fait, une fois les tables chargée,
un paquet arrive, il passe par la table INPUT, il passe par toute les chaines, dés qu'il y a corresspondance, il applique la politique corresspondante, et s'il n'y en a aucune, il applique la politique par défaut. :o)
Pour les DNS, tu autorisait bien ce qui venait des serveurs, mais tu bloquai l'envoie de requete de ton PC, vers ces serveurs. Dans les deux chaines OUPUT du DNS, il fallait metre le IP en tant que destination (-d) et non sources (-s)
voii voilou! @++
"Si c'est stupide et que ça marche, alors ce n'est pas stupide"
Bonjour.
Il faudrait peut-être changer le titre de ce post; maintenant, ce serait plus, "iptables, j'y arrive mais j'ai des questions"...
Bref, j'ai ajouté deux lignes à mon fichier en relation avec les flags tcp:
iptables -A INPUT -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/second -j ACCEPT
et j'aimerais savoir si ca cohabite bien avec les regles d'acceptations normales pour le surf que j'ai mises plus haut, c'est-à-dire:
iptables -A INPUT --protocol tcp -m multiport --sports 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Le fait que je n'ai pas précisé de limites pour le surf est en contradiction avec les deux lignes que j'ai ajoutées, ou ca n'a rien à voir et ajoute une restriction?
J'ai peur de pas être très très clair mais c'est que j'ai un peu de mal avec iptables. Enfin, même si vous n'avez pas compris (ou toi, asevere; parce que c'est bien souvent toi qui m'explique), pouvez-vous me dire au moins si ces deux lignes ont leur utilité... lol.
Il faudrait peut-être changer le titre de ce post; maintenant, ce serait plus, "iptables, j'y arrive mais j'ai des questions"...
Bref, j'ai ajouté deux lignes à mon fichier en relation avec les flags tcp:
iptables -A INPUT -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/second -j ACCEPT
et j'aimerais savoir si ca cohabite bien avec les regles d'acceptations normales pour le surf que j'ai mises plus haut, c'est-à-dire:
iptables -A INPUT --protocol tcp -m multiport --sports 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Le fait que je n'ai pas précisé de limites pour le surf est en contradiction avec les deux lignes que j'ai ajoutées, ou ca n'a rien à voir et ajoute une restriction?
J'ai peur de pas être très très clair mais c'est que j'ai un peu de mal avec iptables. Enfin, même si vous n'avez pas compris (ou toi, asevere; parce que c'est bien souvent toi qui m'explique), pouvez-vous me dire au moins si ces deux lignes ont leur utilité... lol.
Salut Fredish!
Ben ça cohabitte oui...
Enfin, dison que la premiere des novelles regle, tu autorise les conexion a ta machine dans la limite de une connexion par seconde.
La deuxieme, tu autorises les tcp-reset, toujours 1/seconde, la j'ai un doute quand à l'utilitée de la régle, ou du moins de la limite de 'débit' sur la regle.
Etant donné que quand tu surf, c'est toi qui te connecte, et non quelqu'un qui se connecte chez toi, ce n'est pas contradictoire, mais est-ce bien ce que tu veux ?
++
Ben ça cohabitte oui...
Enfin, dison que la premiere des novelles regle, tu autorise les conexion a ta machine dans la limite de une connexion par seconde.
La deuxieme, tu autorises les tcp-reset, toujours 1/seconde, la j'ai un doute quand à l'utilitée de la régle, ou du moins de la limite de 'débit' sur la regle.
Etant donné que quand tu surf, c'est toi qui te connecte, et non quelqu'un qui se connecte chez toi, ce n'est pas contradictoire, mais est-ce bien ce que tu veux ?
++
"Si c'est stupide et que ça marche, alors ce n'est pas stupide"
Salut asevere.
Bon, ben ca va alors, j'ai pas fait trop n'importe quoi :)
En fait, j'aimerais limiter les scans depuis l'internet. C'est bien ce que je me disais, la seconde n'est peut-être pas très utile.
Et si je mets," iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 1/second -j ACCEPT", ce sera exactement la même chose que la premiere règle mais en plus développé, non?
Tiens, je te mets la source de mes interrogations, tu comprendras:
http://forums.ixus.net/viewtopic.php?t=5271
Bon, ben ca va alors, j'ai pas fait trop n'importe quoi :)
En fait, j'aimerais limiter les scans depuis l'internet. C'est bien ce que je me disais, la seconde n'est peut-être pas très utile.
Et si je mets," iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 1/second -j ACCEPT", ce sera exactement la même chose que la premiere règle mais en plus développé, non?
Tiens, je te mets la source de mes interrogations, tu comprendras:
http://forums.ixus.net/viewtopic.php?t=5271
HA ? oui effectivement vu sous cet angle là, la seconde regle peut servir :o)
Sinon, --syn et un raccourcis pour --tcp-flags SYN,ACK,FIN,RST SYN donc les deux on exactement le même effet...
Aprés pour des questions de lisibilité, la premiere forme peut-etre discutable :)
Sinon, --syn et un raccourcis pour --tcp-flags SYN,ACK,FIN,RST SYN donc les deux on exactement le même effet...
Aprés pour des questions de lisibilité, la premiere forme peut-etre discutable :)
"Si c'est stupide et que ça marche, alors ce n'est pas stupide"
Bon, ben ca va, j'ai compris alors.
Une dernière question sur les logs. Voilà, j'ai mis ça, à la fin de mon script:
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES:tout:IGNORE] : '
iptables -A LOG_DROP -j DROP
iptables -A INPUT -p tcp -j LOG_DROP
iptables -A OUTPUT -p tcp -j LOG_DROP
en m'aidant de ce que j'ai trouvé sur le net. Mais je ne suis pas sûr de comprendre les 3 dernières lignes; quoique les deux dernières doivent servir à relier la valeur LOG_DROP à INPUT et OUTPUT. En tout cas, les logs ont l'air de fonctionner. Mais je me demande, parce que les scripts que j'ai pu voir ailleurs ne finissent pas pareil que le mien mais finissent par droper encore une fois les paquets avec un -A(je vois pas trop l'interêt vu que c'est précisé dans la police).
Une dernière question sur les logs. Voilà, j'ai mis ça, à la fin de mon script:
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES:tout:IGNORE] : '
iptables -A LOG_DROP -j DROP
iptables -A INPUT -p tcp -j LOG_DROP
iptables -A OUTPUT -p tcp -j LOG_DROP
en m'aidant de ce que j'ai trouvé sur le net. Mais je ne suis pas sûr de comprendre les 3 dernières lignes; quoique les deux dernières doivent servir à relier la valeur LOG_DROP à INPUT et OUTPUT. En tout cas, les logs ont l'air de fonctionner. Mais je me demande, parce que les scripts que j'ai pu voir ailleurs ne finissent pas pareil que le mien mais finissent par droper encore une fois les paquets avec un -A(je vois pas trop l'interêt vu que c'est précisé dans la police).
Bon, en fait, j'ai compris, enfin je crois.
Le "-j DROP" doit servir à montrer qu'on ne veut loguer que les paquets droppés.
Bon, problème résolu.
Autre question relative aux lignes précédentes. Est-ce que ca:
est pareil à ceci(à part les logs, bien sûr):
? Parce qu'en fait, il n'y a que la deuxième solution qui fonctionne chez moi. Et je comprends pas, parce que ca me semble exactement la même chose. Enfin, bref.
Le "-j DROP" doit servir à montrer qu'on ne veut loguer que les paquets droppés.
Bon, problème résolu.
Autre question relative aux lignes précédentes. Est-ce que ca:
iptables -N SYN iptables -A SYN -p tcp --syn -m limit --limit 1/second -j ACCEPT iptables -A SYN -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/second -j ACCEPT iptables -A SYN -j LOG --log-prefix "IPTABLES:SYN:DROP" iptables -A SYN -j DROP iptables -A INPUT -p tcp -j SYN
est pareil à ceci(à part les logs, bien sûr):
iptables -A INPUT -p tcp --syn -m limit --limit 1/second -j ACCEPT iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/second -j ACCEPT
? Parce qu'en fait, il n'y a que la deuxième solution qui fonctionne chez moi. Et je comprends pas, parce que ca me semble exactement la même chose. Enfin, bref.
Bon, ben, j'ai compris finalement... Pour celui qui s'y connait un tant soit peu en tcp/ip, on voit tout de suite que les ack et tout le tralala ne peuvent pas passer donc, c'etait nul. Quand à la réelle fonction des deux règles dans ce script, ca me laisse perplexe, quand même.; bien que je soupconne une toute petite ouverture qui sert à détecter justement les scans furtifs, sans que cela soit dangereux.
En attendant, je mets mon script complet dans un nouveau sujet pour qu'il soit tout beau, tout propre, et que ca puisse aider ceux qui commence. :)
En attendant, je mets mon script complet dans un nouveau sujet pour qu'il soit tout beau, tout propre, et que ca puisse aider ceux qui commence. :)
Bon, c'est pas tout d'avoir compris, mais encore il faut que ces petites lignes aient une utilité. Car elles n'en ont pas si on ne logue pas ce qui passe par là, vu que c'est pour effectivement détecter les scans furtifs.
Donc, je pose la question à toute personne qui pourrait m'aider: comment loguer ces paquets-là, sans loguer tout les paquets acceptés(parce que ca prend trop de place)?
Donc, je pose la question à toute personne qui pourrait m'aider: comment loguer ces paquets-là, sans loguer tout les paquets acceptés(parce que ca prend trop de place)?