Respostas:
Com a -p tcpopção, o módulo tcp já está carregado e, portanto, é um pouco redundante e não é obrigatório usar a -m tcpopção, e não vejo nenhuma razão para usar essa opção para tornar a regra mais segura.
Consulte a página de manual do iptables para uma melhor compreensão e comparação:
Protocolo -p, --protocol [!]
O protocolo da regra ou do pacote a ser verificado. O protocolo especificado pode ser tcp, udp, icmp ou all, ou pode ser um valor numérico, representando um desses protocolos ou um diferente. Um nome de protocolo de / etc / protocols também é permitido. UMA "!" argumento antes do protocolo inverte o teste. O número zero é equivalente a todos. O protocolo all corresponde a todos os protocolos e é considerado o padrão quando esta opção é omitida.
...
Extensões de correspondência
O iptables pode usar módulos estendidos de correspondência de pacotes. Eles são carregados de duas maneiras: implicitamente, quando -p ou --protocol é especificado, ou com as opções -m ou --match, seguidas pelo nome do módulo correspondente; depois disso, várias opções extras de linha de comando ficam disponíveis, dependendo do módulo específico. Você pode especificar vários módulos de correspondência estendida em uma linha e pode usar as opções -h ou --help após a especificação do módulo para receber ajuda específica para esse módulo.
E para obter uma lista das opções disponíveis, -p tcpconsulte aqui:
http://ipset.netfilter.org/iptables-extensions.man.html#lbCF
Como mencionado acima, com o uso da -mopção é possível adicionar módulos de extensão e mais opções correspondentes são disponibilizadas. Por exemplo, o módulo da CPU :
CPU
[!] - número da CPU
Combine a CPU com este pacote. As cpus são numeradas de 0 a NR_CPUS-1. Podem ser usadas em combinação com RPS (Remote Packet Steering) ou NICs de múltiplas filas para espalhar o tráfego de rede em diferentes filas.
Exemplo:
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 8081Disponível desde o Linux 2.6.36.
Lista completa de extensões de iptables.
Pergunta adicional do OP: Não entendo o que -m corresponde. Qual string? -m tcp corresponde a quê? Ele tenta encontrar a palavra "tcp" onde?
Resposta: -mé para combinar o nome do módulo e não a string. Ao usar um módulo específico, você obtém certas opções para corresponder. Veja o exemplo do módulo da CPU acima. Com o -m tcpmódulo o tcp é carregado. O módulo tcp permite certas opções: --dport, --sport, --tcp-flags, --syn, --tcp-optionpara usar nas regras do iptables. Mas o uso -p tcpjá habilita o módulo tcp, é por isso que ainda é possível usar essas opções mesmo sem o uso -m tcp. Espero que isso limpe toda a sua confusão.
-mopção é realmente usada para carregar, extension modulesque fornece opções extras. Veja minhas respostas atualizadas e o link, por exemplo.
-m tcpopção --dportfaz parte do módulo tcp e funcionará -p tcpapenas com . Por favor, consulte a minha resposta novamente.