Iptables com o parâmetro -m e -p

8

Eu tenho esta regra no meu iptables:

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

Eu realmente preciso de "-m tcp"? Eu já estou usando "-p tcp", então devo usar "-m tcp" para ser mais seguro?

Samul
fonte

Respostas:

9

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 8081

Disponí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.

Diamante
fonte
muito obrigado, mas gostaria de me dizer com o que o -m corresponderia? Por exemplo, uma conexão TCP normal, -m iria corresponder contra o string que você poderia fornecer agradar um exemplo da corda?
Samul
1
Você é bem vindo. Como você pode ver, a -mopção é realmente usada para carregar, extension modulesque fornece opções extras. Veja minhas respostas atualizadas e o link, por exemplo.
Diamond
Obrigado! :) Um pensamento final: acho que, no meu caso, devo manter o "-m" correto? Veja isto: iptables -A INPUT -p tcp -m tcp --dport 9191 -j DROP Eu uso "--dport" e acho que só é possível usar --ddport se eu usar -m correto?
Samul 6/01/16
@ Samul, na verdade não. Você pode simplesmente usá-lo sem a -m tcpopção --dportfaz parte do módulo tcp e funcionará -p tcpapenas com . Por favor, consulte a minha resposta novamente.
Diamond
Você é muito gentil, obrigado! Mas veja: eu não entendo o que -m corresponde. Qual string? -m tcp corresponde a quê? Ele tenta encontrar a palavra "tcp" onde?
Samul 6/01/16