Как правильно открыть диапазон портов в iptables

56

Я сталкивался со статьями, советующими для следующего:

iptables -A INPUT -p tcp 1000:2000 -j ACCEPT

И другие утверждают, что вышеупомянутое не будет работать, и iptables поддерживает только несколько объявлений портов с этой --multiportопцией.

Есть ли правильный способ открыть много портов с iptables?

Пол Уолли
источник
Связанный вопрос: iptables и несколько портов
Кристиан Чиупиту

Ответы:

60

Это правильный путь:

iptables -A INPUT -p tcp --match multiport --dports 1024:3000 -j ACCEPT

В качестве примера. Источник здесь .

Натан С
источник
5
Если вы не знаете, состояние набора правил -Iнесколько безопаснее, чем -A.
user9517 поддерживает GoFundMonica
@ Иан, не могли бы вы объяснить причины этого?
Джейхендрен
2
@jayhendren Многие наборы правил будут иметь правило удаления по умолчанию, например, -A INPUT -j REJECT --reject-with icmp-host-prohibitedв конце INPUT и других таблиц. Использование -Aдобавляет правило в конце таблицы, после последнего правила, так что оно никогда не будет рассматриваться, как сетевой фильтр работает при первом совпадении. Использование -Iвставки правила в начале таблицы и как таковое всегда будет учитываться.
user9517 поддерживает GoFundMonica
4
@ Однако, некоторые наборы правил также имеют в начале правила, которые фильтруют или ограничивают скорость пакетов, поэтому стоит отметить, что -Iне всегда безопаснее, если вы не знаете набор правил.
Джейхендрен
3
@jayhendren Я думаю, что вы только что сделали, и заметьте, я сказал, что не всегда .
user9517 поддерживает GoFundMonica
54

То, что вам сказали, правильно, хотя вы написали это неправильно (вы забыли --dport).

iptables -A INPUT -p tcp --dport 1000:2000 откроет входящий трафик на порты TCP от 1000 до 2000 включительно.

-m multiport --dportsнужен только если диапазон вы хотите открыть не является непрерывным, например -m multiport --dports 80,443, который откроет HTTP и HTTPS только - не те , что между ними.

Обратите внимание, что порядок правил важен, и (как упоминает Иэн в своем комментарии в другом месте) ваша задача - убедиться, что любое добавленное вами правило находится в месте, где оно будет эффективным.

Безумный Шляпник
источник
1
Я мог бы упомянуть и здесь, если хотите;)
user9517 поддерживает GoFundMonica
1
Хи хи хи! Продолжайте, тогда сообщение стоит повторить!
MadHatter
2
Это правильный ответ; это более тщательно.
Андрей Козак
10

TL; DR но ...

Чистый диапазон портов без многопортового модуля: iptables -A INPUT -p tcp --dport 1000:2000 -j ACCEPT

Эквивалентный мультипортовый пример: iptables -A INPUT -p tcp -m multiport --dports 1000:2000 -j ACCEPT

... и вариант с несколькими портами с несколькими диапазонами (да, это также возможно): iptables -A INPUT -p tcp -m multiport --dports 1000,1001,1002:1500,1501:2000 -j ACCEPT

... и эквивалентный многопортовый мультидиапазонный пример с отрицанием: iptables -A INPUT -p tcp -m multiport ! --dports 0:999,2001:65535 -j ACCEPT

Имейте phun.

BloodMan
источник