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

обходной путь для правила ограничения мультипортов iptables

У меня есть много портов, которые нужно заблокировать, но правило многопортовых iptables имеет ограничение и разрешает не более 15 портов.

severalports="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"
iptables -A INPUT -p tcp -m multiport --dports $severalports -J DROP
iptables v1.4.21: too many ports specified

Я хотел бы знать, есть ли способ создать настраиваемое правило для обхода максимального ограничения в 15 портов (так что мне не нужно разделять правило). Спасибо

PD: Порты 1:16 - это просто для объяснения идеи. Фактические порты расположены не по порядку

Неявный -m tcp, -m udp (и sctp и т. д.) все принимают параметры диапазона портов. Итак, ваш текущий пример можно упростить до простого:

iptables -A INPUT -p tcp -m tcp --dport 1:16 -j DROP # -m tcp is implicitly loaded if omitted anyway

То же самое и для -m multiport кроме диапазона съедает два слота:

multiport

Этот модуль соответствует набору портов источника или назначения. Можно указать до 15 портов. Диапазон портов (порт: порт) считается двумя портами.

Итак, если имеется до 7 диапазонов (+1 один порт), вы можете сделать что-то вроде:

iptables -A INPUT -p tcp -m multiport --dport 1:5,10:50,6666 -j DROP

Если вы планируете произвольно большое количество портов без добавления большого количества правил, вы можете переключиться на использование ipset (что также требует использования ipset инструмент) и set соответствие:

ipset create portlist bitmap:port range 0-65535 #or narrower if known in advance
for i in $(seq 1 1000); do ipset add portlist $i; done

РЕДАКТИРОВАТЬ: на самом деле указанный выше конкретный случай (все значения в одном диапазоне) также можно упростить, используя синтаксис диапазона в ipset (хотя поддержка может зависеть от версии) вместо цикла, если необходимо. Не изменит установленный результат:

ipset add portlist 1-1000

не замужем iptables правило:

iptables -A INPUT -p tcp -m set --match-set portlist dst -j DROP

Растровое изображение должно иметь O (1) lookup: постоянное (и что может иметь значение: очень быстрое) время.

ipset можно динамически изменять во время использования:

ipset del portlist 22

четный из пути пакета если действительно нужно.

Он предлагает множество других типов списков (например, hash:ip,port), большинство из них хешировано. В них можно загружать сотни тысяч записей и при этом вести быстрый поиск, а также использовать простые и общие правила.