У меня в iptables есть это правило:
iptables -A INPUT -p tcp -m tcp --dport 9191 -j DROP
Мне действительно нужен "-m tcp"? Я уже использую «-p tcp», поэтому следует ли использовать «-m tcp» для большей безопасности?
С -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
опцию можно добавить модули расширения, и тогда будут доступны другие варианты соответствия. Например, модуль процессора:
ЦПУ
[!] - номер ЦП
Соответствует процессору, обрабатывающему этот пакет. cpus пронумерованы от 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-extension.
Дополнительный вопрос от OP: Я не понимаю, что соответствует -m. Какая струна? -m tcp соответствует чему? Он пытается найти слово "tcp" где?
Ответ: -m
для соответствия имя модуля а не нить. Используя определенный модуль, вы получаете определенные параметры для соответствия. См. Пример модуля ЦП выше. С -m tcp
модуль tcp загружен. Модуль tcp позволяет использовать определенные параметры: --dport, --sport, --tcp-flags, --syn, --tcp-option
использовать в правилах iptables. Но используя -p tcp
уже включает модуль tcp, поэтому можно использовать эти параметры даже без использования -m tcp
. Надеюсь, это проясняет всю вашу путаницу.