как использовать регулярное выражение с iptables

Я пытаюсь сделать правило маршрутизации к набору субдомены, подобранные регулярным выражением.

iptables -t nat -A PREROUTING -m string --string "/must-[a-z0-9-\.]+gonow[a-z\.]+/g" --algo regex -p tcp -m tcp --dport 12 -j DNAT --to-destination 1.1.1.1:12

получение ошибки - iptables: Никакая цепочка/цель/соответствие тем именем.

0
задан 31 January 2018 в 13:33

2 ответа

Проблема состоит в том, что Вы пытаетесь использовать относительно медленный алгоритм сопоставления с образцом в приложении, которое ДОЛЖНО использовать быстрый алгоритм сопоставления с образцом. Также знайте, что все использование "строкового" фильтра может быть, вычисляют интенсивный, и по этой причине всего несколько лет назад, что модуль не был доступен по умолчанию. Необходимо будет изучить или Boyer-Moore (BM) или Knuth-Pratt-Morris (kmp) быстрые алгоритмы сопоставления строк и использовать одного из тех.

См. также страницы руководства для iptables-расширений. Выборка:

   --algo {bm|kmp}
          Select the pattern matching strategy. (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)
0
ответ дан 31 October 2019 в 02:32

Некоторые мысли, если не решение:

  • Доступные параметры для опции --algo: bm или kmp. "регулярное выражение" не включается, как уже отмечалось.

  • В любом случае я не уверен, может ли команда iptables включать регулярное выражение. Возможно, нет, по замыслу, или, возможно, так, потому что iptables предположительно имеет доступ ко всему синтаксису оболочки / Bash.

  • Чтобы регулярное выражение работало, нужно внимательно следить за цитированием. Например, регулярные выражения часто заключаются в жесткие / одинарные кавычки.

  • Я полагаю, что проблема зависит от различия между командой iptables и правилом iptables. Сама команда не является правилом, а вместо этого указывает iptables на рендеринг правила, которое затем сохраняется в памяти. Команда может принимать регулярное выражение (например,, при указании диапазона, заставляющего iptables отображать дискретное правило для каждого члена или приращения диапазона) просто потому, что оно выполняется в оболочке, которая это разрешает. Однако это другой вопрос, разрешает ли iptables передавать регулярное выражение в правило или оценивать регулярное выражение в правиле. Ответ @Doug предполагает, что нет, или, по крайней мере, существуют лучшие альтернативы. Я ожидаю, что, по крайней мере, для того, чтобы заставить регулярное выражение работать в правиле, потребуются некоторые причудливые и внимательные цитаты.

  • Если вы просто хотите автоматизировать создание правил, возможно, рассмотрите цикл for и включите свое регулярное выражение туда или в определение переменной, например,

 dnsclients () {
местный КЛИЕНТ
для КЛИЕНТА в $ LAN; делать
iptables -A dns-clients -s $ CLIENT -j dns-ports
Выполнено
}
0
ответ дан 20 March 2020 в 23:25

Другие вопросы по тегам:

Похожие вопросы: