Ответы:
С -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опция фактически используется для загрузки, extension modulesкоторая предоставляет дополнительные опции. Смотрите мой обновленный ответ и ссылку для примера.
-m tcpопции. --dportявляется частью модуля tcp и будет работать -p tcpтолько с. Пожалуйста, обратитесь к моему ответу еще раз.