Règles iptables

Quoiqu’il arrive, pour le protocole TCP, il n’y a aucune possibilité de furtivité / stealth.

En effet :

  • Soit un port est ouvert et donc indiqué “open”.
  • Soit il est fermé (après réception en réponse d’un paquet avec le flag RST) donc “closed”.
  • Soit il ne répond pas et est indiqué par Nmap comme étant “filtered”.

Nan, parce-que en fait, dans ce que tu nous montres, tu as oublié la ligne du genre :
Not shown: 65533 filtered ports

Mais, j’insiste, “filtered” ≠ stealth.

De toutes les manières, le résultat de la commande nmap que tu nous donnes, manifestement, ne concerne pas ta machine. Si c’était bien ta machine, la règle iptables -A INPUT -j REJECT renverrait des paquets ICMP avec l’erreur port-unreachable et Nmap indiquerait les ports en tant que “filtered”.

Cela pourrait s’expliquer si tu étais connecté chez Free avec du SNAT A+P . Il faudrait alors demander une adresse IPv4 fixe dédiée à ton usage propre.

Cela pourrait également s’expliquer si la machine à l’origine du scan avec Nmap était elle aussi dotée d’un pare-feu qui interférerait dans les résultats.


AnonymousCoward

Je pense que c’est le démon SMTP de postfix (serveur de mail).

netstat montre que ta machine écoute aussi sur d’autres ports, mais uniquement sur des adresses de loopback 127.*, donc un scan de l’adresse LAN ne les trouvera pas.

Je t’ai déjà répondu que si tu fais le scan depuis la machine elle-même, les règles iptables, et notamment celle-ci :

# Permettre tout le traffic loopback (lo0) traffic et bloquer tout le traffic vers 127/8 qui n'utilise pas lo0
iptables -A INPUT -i lo -j ACCEPT

laissent passer tous les paquets sur l’interface de loopback envoyés de la machine à elle-même. Les règles précédentent ne bloquent que les paquets invalides de types de scan TCP particuliers, pas les paquets normaux d’un scan TCP de type SYN (type par défaut).

Si tu veux tester l’efficacité de tes règles, il faut le faire depuis une autre machine sur le même réseau local et qui n’a pas de règles iptables.

Par contre, je ne comprends pas pourquoi les ports “closed” ci-dessus sont affichés alors que tous les ports scannés à l’exception du port 25 devraient être “closed”. Aucune règle de ce jeu ne bloque un scan SYN sur l’interface de loopback, donc aucun port ne devrait être “filtered”. Je viens de le tester sur ma machine.

Tiens donc ? Et la différence entre REJECT et DROP ?

C’est ce dernier cas (ce que fait la cible DROP d’iptables) qui correspond à “stealth”. Mais tu as oublié un cas :

  • Soit un pare-feu répond avec un message d’erreur ICMP (ce que fait la cible REJECT d’iptables) et le port est indiqué par nmap comme étant “filtered” aussi.

Pour différencier les différentes causes de l’état “filtered”, on peut ajouter l’option --reason à la commande nmap.

Pas si le scan est effectué depuis la machine elle-même.
En fait tu connaissais ce 4e cas mais tu ne l’as pas listé avec les autres…

Bonsoir,

J’ai remanié le script et il est réglé “normalement” pour se connecter à internet indépendamment, sans réseau local. De serveur, je n’en ai pas. Tout ce que je veux, c’est pouvoir me connecter à internet chez moi (à mon routeur) et à des WiFi gratuits tout en étant bien protégée et invisible sur le réseau.

Voici le script:

    iptables -t filter -F
    iptables -t filter -X
    iptables -t filter -P INPUT DROP
    iptables -t filter -P FORWARD DROP
    iptables -t filter -P OUTPUT DROP
    iptables -t filter -A INPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
    iptables -t filter -A OUPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
    iptables -A OUTPUT -p icmp -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
    #la règle suivante ne fonctionne pas (je n'ai plus de connection internet). Pouvez-vous m'en donner la raison et si vous le voulez bien la modifier?
    iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
###

   ` iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP`
    modprobe ip-conntrack
    iptables -t filter -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
    iptables -t filter -A OUTPUT -m state ! --state INVALID -j ACCEPT
    # ouverture d'un port (ex: 110)
    iptables -t filter -A INPUT -s 192.168.0.0/24 --dport 110 -j ACCEPT
    iptables -t filter -A INPUT -s 192.168.0.0/24 --sport 110 -j ACCEPT
    # log iptables 
    iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
    ## Je ne dois pas mettre les règles suivantes puisque je n'ai pas de serveur. Est-ce exact?

    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    # fLOOD ou déni de service 
    iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT 
    iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT 
    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT 
    #Scan de ports 
    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Que pensez-vous du script?
D’après certaines personnes, on doit créer un chaîne définie, appelée "filter"pour pouvoir utiliser “-t filter”. Quelle chaîne dois-je alors ajouter?
Pourriez-vous m’aider à corriger les problèmes car je suis un peu perdue en lisant toutes les informations contradictoires sur le web?

Merci.

Euhhh, y’a quelqu’un pour lui dire que c’est un “doux rêve” ?!

J’ai le sentiment que vous ne comprenez pas pleinement comment fonctionne les couches réseaux.

Plus simplement :

iptables -t filter -A OUPUT -o lo -j ACCEPT

Mais comme tu l’exprimes …

Il me semble vraiment nécessaire de partir sur des bases saines … et de consulter notre post à-propos d’iptables, publié dans notre forum “Trucs & Astuces”.
Et, @PascalHambourg est bien mieux “placé” pour vous indiquer de la lecture de référence, à-propos des réseaux.

Présent ! (pour la partie “invisible”)

Quand on se connecte à une box ou à un réseau wifi, il y a toujours un réseau local. Le seul cas où on peut dire qu’il n’y a pas de réseau local, c’est avec une connexion de type “dial-up” point à point utilisant le protocole PPP à travers un simple modem.

iptables -t filter -A INPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

Règle invalide : l’option -o (pour spécifier l’interface de sortie) est invalide dans la chaîne INPUT, fort logiquement. Utiliser -i pour spécifier l’interface d’entrée.

#la règle suivante ne fonctionne pas (je n'ai plus de connection internet). Pouvez-vous m'en donner la raison et si vous le voulez bien la modifier?
iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DROP

Elle bloque les paquets TCP entrants qui ont uniquement les drapeaux SYN et ACK activés. Or cette configuration correspond au premier paquet de réponse renvoyé par un serveur pour accepter une demande de connexion. Si on le bloque, on bloque l’établissement de la connexion.
Quel était le but de cette règle ?

iptables -t filter -A INPUT -s 192.168.0.0/24 --dport 110 -j ACCEPT
iptables -t filter -A INPUT -s 192.168.0.0/24 --sport 110 -j ACCEPT

Je croyais qu’il n’y avait pas de réseau local. A quoi servent ces règles alors, puisque ces adresses sont typiquement utilisées sur un réseau local ?

La chaîne FORWARD n’a rien à voir avec le fonctionnement en serveur de la machine mais avec le fonctionnement en routeur. Si ip_forward=0 (fonctionnement non routeur), alors elle n’est pas utilisée et peu importe les règles qu’elle contient.

1 J'aime

J’avais même pas vu, au petit matin … il faut espérer que c’est une faute de doigt !

Exactement !
Je vais chipoter : par tout service, utilisant le protocol TCP, sur toute machine connecté à un réseau. En fait, il vous faut comprendre que c’est là, le fonctionnement du protocol TCP.

La machine, normalement, envoie une première demande de connexion, ayant le drapeau SYN, à un service basé sur le protocole TCP - par exemple, un service web, sur le port 80.
Le service correspondant lui renvoie un drapeau SYN+ACK, pour lui dire qu’il accepte la communication …
Puis, la première machine envoie, en confirmation, un drapeau ACK .
C’est la fameuse “poignée à 3 mains”.

Donc, bloquer SYN/ACK est une inepsie, si on veut pouvoir communiquer sur un réseau.
Puisque la machine doit recevoir en entrée les réponses à ses demandes de communication sur le protocole TCP.


De la raison de la règle “maintenir une connexion établie” que vous avez sur le “tutoriel de base” que nous proposons …

Et, idem, pour la sortie qui en a aussi besoin.

Bonsoir,

Merci de me libérer de mes doux rêves! Les règles ne peuvent être connues que si on nous les apprend. Malheureusement, toutes les explications sont floues sur Internet.

Si je décide quand même de créer des règles iptables spécifiques pour me connecter à mon réseau local personnel, puis-je faire de même pour un réseau local d’un WiFi gratuit? Est-ce un risque de sécurité?

Exemple: ouverture du port 110

Chez moi, j’aurais:

iptables -t filter -A INPUT -s 192.168.0.0/24 --dport 110 -j ACCEPT
iptables -t filter -A INPUT -s 192.168.0.0/24 --sport 110 -j ACCEPT

Pour le WiFi gratuit, est-ce risqué d’avoir ce genre de règles? Ne devrais-je pas plutôt avoir:

iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

Merci.

Avez vous lu notre “tutoriel” ?

Et, floues … avez-vous lu la très bonne documentation de l’inet.

Que veux-tu dire exactement par “me connecter à mon réseau local” ? Accéder à des services sur des machines du réseau local ? Offrir des services à des machines du réseau local ?
Toute règle qui autorise des communications dans un environnement non protégé est potentiellement un risque de sécurité.

La première règle permet aux machines du sous-réseau 192.168.0.0/24 d’accéder à un serveur POP3 qui tourne sur la machine.
La seconde leur permet d’accéder à n’importe quel port TCP de la machine du moment qu’elles utilisent le port source 110. Mauvaise idée.

La règle dans INPUT est encore plus permissive que la précédente puisqu’elle n’est pas limitée au sous-réseau 192.168.0.0/24.
La seconde permet à la machine d’accéder à un serveur POP3 distant, mais elle est redondante puisqu’il y a déjà dans le script une règle qui accepte les paquets sortants qui ont un état de connexion valide :
iptables -t filter -A OUTPUT -m state ! --state INVALID -j ACCEPT

1 J'aime

Bonsoir,

Merci.
Je comprends mieux pour ce qui est du réseau local.

Maintenant je ne veux ni me connecter à des PCs ni que des PCs puissent se connecter à ma machine.
Mais je veux que mon pc puisse utiliser le logiciel bittorrent, je dois ouvrir le port 6881 tcp, non?
Quelle règle dois-je inscrire pour que seul mon pc puisse accéder au port 6881tcp?

Je sais que je ne cesse de poser des questions mais j’ai envie d’apprendre.:slight_smile:

Tu te rends compte que ces deux demandes sont contradictoires ? Je ne connais pas en détail le fonctionnement de BitTorrent ni son utilisation de ce port 6881, mais c’est un logiciel de peer-to-peer, dont le principe est précisément de se connecter à d’autres PC et de recevoir des connexions d’autres PC.

Se poser des question et avoir envie d’apprendre, c’est très bien …
Par contre, permettez-moi d’en douter - de par le fait qu’apparemment vous n’avez lu aucun des liens que je vous ai fournis, n’est-ce pas !?

Personnellement, j’abandonne et vous souhaite bon courage.

@PengouinPdt
Ta réponse reflète la vanité de ton âme. Apprends à aider les autres avec gentillesse pour eux-mêmes et non pour toi. Et tu seras sans doute plus heureux. Apprends… .

Outre les jugements à l’emporte pièce, tu dois comprendre, toi aussi, pourquoi tu te trompes. On essaie ici d’aider beaucoup de monde, avec des niveaux très différents. La seule constante, c’est que si l’aidé n’y met pas du sien et cherche juste à pomper le maximum d’informations à l’aidant, ça ne marchera pas. Des pistes t’ont été données, il n’y a rien de plus naturel que d’espérer que tu les suivras par toi-même, au lieu de t’entêter à poser des questions qui n’ont presque pas de sens.

1 J'aime

Maintenant je ne veux ni me connecter à des PCs ni que des PCs puissent se connecter à ma machine.

Cherche pas plus loin, c’est impossible avec le protocole p2p:

1 J'aime

@seb-ksl
L’orgueilleux, note saint Basile (moine orthodoxe grec), “fait étalage de ce qu’il a et s’efforce de paraître plus qu’il n’est en réalité”. A cette occasion comme en d’autres, il se montre arrogant, infatué et content de soi, plein d’assurance et de confiance en lui-même. A cela s’ajoute souvent la prétention de tout savoir et l’assurance quasi constante d’avoir raison, d’où procèdent la manie de se justifier ainsi que l’esprit de contradiction, mais aussi la volonté d’enseigner et de commander. L’orgueil rend celui qu’il affecte aveugle à ses propres défauts, lui fait refuser à priori toute critique et haïr tout reproche et toute réprimande, et lui rend intolérable d’être commandé et de devoir se soumettre à qui que ce soit. Cette passion se révèle aussi dans une certaine agressivité : c’est parfois l’ironie qui en est l’expression, mais également l’aigreur dans les réponses aux questions d’autrui, le silence gardé en certaines circonstances, une animosité générale, le désir d’outrager le prochain et la facilité à le faire. Cette agressivité se manifeste régulièrement en réponse aux moindres critiques adressés par autrui. (Jean-Claude Larchet, moine orthodoxe français, “Thérapeutique des maladies spirituelles”)

Apprends et soigne toi.

@nestor
Bonjour,

Merci beaucoup.

Très bien, tu comprendras donc que :

  1. Je ne lise pas ta prose, et
  2. je clôture ce sujet qui tourne au règlement de comptes stérile,
  3. le tout assorti d’un avertissement.

Cordialement.

1 J'aime