4 votes

Iptables et déclarations conditionnelles. Est-ce possible ?

J'ai essayé de faire une recherche mais je n'ai pas réussi, dans ce cas je suis désolé et j'apprécierai la redirection.

J'avais ce problème en tête : un ordinateur avec une adresse mac M envoie des paquets à travers un routeur openwrt (ou un système basé sur linux) et je voudrais, juste pour essayer la possibilité, laisser passer un paquet provenant de M mais le paquet qui suit immédiatement doit être abandonné, puis accepté à nouveau, puis abandonné et ainsi de suite.

Donc si l'ordinateur avec mac M envoie 20 paquets, seuls 10 passeront, les 10 autres seront abandonnés. De manière verbeuse, le résultat souhaité est : accept, drop, accept, drop, accept, drop, accept, drop, accept, drop, etc...

Une explication en pseudo-code

condition=ACCEPT
for each packet {
  if ( packet_is_sent_from_adapter_with_mac_M ) {
    if (condition == ACCEPT) {
      accept_packet
      condition=DROP
    }
    else {
      drop_packet
      condition=ACCEPT
    }
  }
}

Est-ce possible ? Après avoir cherché un peu sur Google, il semble qu'iptables ne supporte pas les déclarations conditionnelles ou les scripts.

Et si c'est possible, qu'en est-il d'une condition générale "abandonner X paquets consécutifs après Y acceptations consécutives" ?

ajout1 : La question en général est le "contrôle de flux" n'est pas autorisé dans iptables ? ou mieux, puisque les décisions conditionnelles sont basées sur un état ( condition dans le pseudocode), comment pouvons-nous sauvegarder l'état lié à une certaine condition dans iptables et faire quelque chose en vérifiant cet état ?

addition2 : Dans les commentaires, des outils supplémentaires (tc) sont suggérés pour réaliser le contrôle de flux (je veux dire des instructions if, des boucles, etc.), n'hésitez pas à suggérer une combinaison (peut-être avec un peu d'explication). Merci !

0 votes

Comme le dit Janne, iptables est un bon outil UNIX et peut probablement être torturé pour faire du contrôle de flux. Mais tc est l'outil de création de trafic et est probablement bien meilleur pour cela ! Les deux outils combiné (ex, iptables pour marquer les paquets en fonction de critères de type iptables, alors tc à la forme basée sur le balisage) peut être encore plus puissant.

0 votes

Ah oui, j'ai fait du contrôle Qos avec tc et filtrage. En les combinant, je peux donc obtenir un contrôle de flux ?

0 votes

Cela dépend de ce que vous voulez obtenir. Même la description que vous avez donnée ci-dessus est imprécise : sur ces 20 paquets, un paquet sur deux doit être abandonné. Mais qu'advient-il du 21ème ? Si vous voulez des conseils précis, vous devez formuler votre question avec précision.

4voto

Janne Pikkarainen Points 31244

Pour vos besoins, iptables statistic L'extension pourrait fonctionner. Réglez le mode sur nth , every a 2 et l'attacher à votre DROP règle. Alors peut-être quelque chose comme

iptables -A INPUT -m statistic --mode nth --every 2 -m mac --mac-source xx:xx:xx:xx:xx -j DROP

devrait fonctionner.

La page du manuel iptables-extensions parle de ce module statistique :

statistic
This module matches packets based on some statistic condition. It supports two distinct modes settable with the --mode option.

Supported options:

--mode mode
    Set the matching mode of the matching rule, supported modes are random and nth. 
[!] --probability p
    Set the probability for a packet to be randomly matched. It only works with the random mode. p must be within 0.0 and 1.0. The supported granularity is in 1/2147483648th increments. 
[!] --every n
    Match one packet every nth packet. It works only with the nth mode (see also the --packet option). 
--packet p
    Set the initial counter value (0 <= p <= n-1, default 0) for the nth mode.

0 votes

Sympa, merci ! (je ne peux pas upvoter, désolé) Mais en général, le "contrôle de flux" n'est pas autorisé dans iptables ?

0 votes

J'ai bien peur que non, mais en sautant de chaîne en chaîne de manière créative et en utilisant des extensions, on peut généralement s'en sortir. Mais pas de la manière directe que vous souhaitez. Ou, si je me trompe, je serai très heureux si quelqu'un me montre le chemin de l'illumination ! :)

0 votes

Moi aussi. J'ai vu ça cn.cs.unibas.ch/pub/doc/2010-msthGraf.pdf hier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X