IpTable, explication d'une règle

Salut la communauté !

Voilà je n'arrive pas à bien cerner la règle iptables suivantes :

-A INPUT -i eth0 -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP

Ca veut dire qu'on rejette tout ce qui est NEW sauf si tous les flags sont mis ?

C'est pas clair dans ma tête !

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Mon precedent poste est faux car je n'avais pas regarde la doc d'iptables:

    Voila la partie de "man iptables" pour ca:

    --tcp-flags [!] mask comp
    Match when the TCP flags are as specified. The
    first argument is the flags which we should exam­
    ine, written as a comma-separated list, and the
    second argument is a comma-separated list of flags

    Mar 09, 2002 15

    which must be set. Flags are: SYN ACK FIN RST URG
    PSH ALL NONE. Hence the command
    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
    will only match packets with the SYN flag set, and
    the ACK, FIN and RST flags unset.


    donc:
    --tcp-flags SYN,RST,ACK SYN

    veux dire que le flag SYN doit etre est mis et les deux autres RST,ACK ne doivent pas etre mis!

    Maintenat que veux dire ?
    ! --tcp-flags SYN,RST,ACK SYN

    C'est (en theorie) le contraire logique du precedent, c.-a-d.:
    SYN n'est pas mis ou RST est mis ou ACK est mis.

    Finalement en plus de ca il faut que l'etat = NEW (state=NEW).

    Autrement dit:

    C'est rejete (plutot "jete" pour DROP au lieu de REJECT) si

    l'etat=NEW sauf si [le flag SYN est mis et les deux autres RST,ACK ne sont pas mis].

    Effectivement cette regle avec les flags est logiquement assez subtils, il faut bien faire attention!
    1. Modérateur
      Salut,

      Si tu n'as pas compris la difference entre REJECT et DROP.

      REJECT est utilisé pour renvoyer un paquet erroné en réponse au paquet qui correspond . (donc il y a une trace que tu existesur net)

      DROP signifie que le paquet est laissé de coté. (ici tu es en mode furtif).

      En fait -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP veut dire que tu drop les paquets avec SYN non positionné et avec RST et ACK positionné (plutôt que
      1. Contributeur
        Je crois ca rejete (ou plutot ca "jete")

        si "etat = NEW" (state=NEW)

        et

        si les options SYN,RST,ACK SYN ne sont pas mises

        donc c'est effectivement comme tu dis:
        on rejette tout ce qui est NEW sauf si tous les flags sont mis

        avec la toute petite precision ce n'est pas "rejete" (REJECT) mais "jete" (DROP).