Я попытался выполнить поиск, но мне это не удалось, в случае, если я прошу прощения, я буду признателен за перенаправление.
У меня была такая проблема: компьютер с 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.