Назад | Перейти на главную страницу

Iptables и условные операторы. Является ли это возможным?

Я попытался выполнить поиск, но мне это не удалось, в случае, если я прошу прощения, я буду признателен за перенаправление.

У меня была такая проблема: компьютер с MAC-адресом M отправляет пакеты через маршрутизатор openwrt (или систему на базе Linux), и я хотел бы, просто чтобы попробовать возможность, пропустить пакет из M но пакет сразу после этого должен быть отброшен, затем снова принят, затем отброшен и так далее.

Так что если компьютер с Mac M отправляет 20 пакетов, только 10 пройдут, остальные 10 будут отброшены. Подробно желаемый результат: accept, drop, accept, drop, accept, drop, accept, drop и т. Д.

Объяснение псевдокода

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
    }
  }
}

Является ли это возможным? После поиска в Google кажется, что iptables не поддерживает никаких условных операторов или сценариев.

И если это возможно, как насчет общего условия «отбрасывать X последовательных пакетов после Y последовательных приемов»?

дополнение1: Вопрос вообще такой "управление потоком" не разрешено в iptables? или лучше, поскольку условные решения основаны на состоянии (состояние в псевдокоде), как мы можем сохранить состояние, связанное с определенным условием, в iptables и сделать что-нибудь для проверки этого состояния?

дополнение2: В комментариях предлагаются дополнительные инструменты (tc) для управления потоком (я имею в виду операторы if, циклы и т. Д.), Не стесняйтесь предлагать комбинации (возможно, с небольшими пояснениями). Спасибо!

Для ваших нужд iptables statistic расширение может работать. Установите режим на nth, every к 2 и прикрепите это к своему DROP правило. Так что может быть что-то вроде

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

должно сработать.

Страница руководства iptables-extensions говорит о модуле статистики так:

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.