Iptables с параметрами -m и -p

8

У меня есть это правило в моих iptables:

iptables -A INPUT -p tcp -m tcp --dport 9191 -j DROP

Мне действительно нужен "-m tcp"? Я уже использую "-p tcp", поэтому я должен использовать "-m tcp", чтобы быть более безопасным?

Samul
источник

Ответы:

9

С -p tcpопцией модуль tcp уже загружен, и поэтому он несколько избыточен и не обязателен для использования -m tcpопции, и я не вижу никакой причины, почему использование этой опции сделало бы правило более безопасным.

Пожалуйста, смотрите справочную страницу iptables для лучшего понимания и сравнения:

-p, --protocol [!] протокол

Протокол правила или пакета для проверки. Указанный протокол может быть одним из tcp, udp, icmp или all или может быть числовым значением, представляющим один из этих протоколов или другой. Имя протокола из / etc / protocol также разрешено. "!" аргумент перед протоколом инвертирует тест. Число ноль эквивалентно всем. Протокол all будет совпадать со всеми протоколами и используется по умолчанию, если эта опция не указана.

...

Расширения матча

iptables может использовать расширенные модули сопоставления пакетов. Они загружаются двумя способами: неявно, когда заданы -p или --protocol или с параметрами -m или --match, за которыми следует соответствующее имя модуля; после этого становятся доступными различные дополнительные параметры командной строки, в зависимости от конкретного модуля. Вы можете указать несколько модулей расширенного соответствия в одной строке и использовать параметры -h или --help после того, как модуль был указан, для получения справки, относящейся к этому модулю.

А список доступных опций -p tcpсмотрите здесь:

http://ipset.netfilter.org/iptables-extensions.man.html#lbCF

Как указано выше, с помощью -mопции можно добавлять модули расширения, и тогда доступны дополнительные опции соответствия. Например, модуль процессора :

ЦПУ

[!] - номер процессора

Подходим процессор, обрабатывающий этот пакет. Процессоры пронумерованы от 0 до NR_CPUS-1. Может использоваться в сочетании с RPS (удаленным управлением пакетами) или сетевыми картами с несколькими очередями для распределения сетевого трафика по разным очередям.

Пример:

iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-port 8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 1 -j REDIRECT --to-port 8081

Доступно с Linux 2.6.36.

Полный список iptables-расширений.


Дополнительный вопрос от OP: я не понимаю, что соответствует -m. Какая строка? -m tcp соответствует чему? Он пытается найти слово "tcp", где?

Ответ: -mдля соответствующего имени модуля, а не строки. Используя определенный модуль, вы получаете определенные опции для соответствия. См. Пример модуля процессора выше. С -m tcpмодулем загружается tcp. Модуль tcp предоставляет определенные возможности: --dport, --sport, --tcp-flags, --syn, --tcp-optionиспользовать в правилах iptables. Но использование -p tcpуже включает модуль tcp, поэтому можно использовать эти опции даже без использования -m tcp. Надеюсь, это очистит все ваше замешательство.

ромб
источник
Большое спасибо, но не могли бы вы сказать мне, с чем -m подойдет? Например, обычное TCP-соединение, -m будет сопоставляться с какой строкой? Не могли бы вы привести пример строки
Самул
1
Добро пожаловать. Как видите, -mопция фактически используется для загрузки, extension modulesкоторая предоставляет дополнительные опции. Смотрите мой обновленный ответ и ссылку для примера.
Даймонд
Спасибо! :) Одна заключительная мысль: я думаю, что в моем случае я должен держать "-m" правильно? Посмотрите это: iptables -A INPUT -p tcp -m tcp --dport 9191 -j DROP Я использую "--dport", и я думаю, что использовать --ddport возможно только, если я использую -m правильно?
Самул
@ Самуль, не совсем. Вы можете просто использовать его без -m tcpопции. --dportявляется частью модуля tcp и будет работать -p tcpтолько с. Пожалуйста, обратитесь к моему ответу еще раз.
Даймонд
Вы очень добры, спасибо! Но смотрите: я не понимаю, что соответствует -m. Какая строка? -m tcp соответствует чему? Он пытается найти слово "tcp", где?
Самул