iptables: --protocol tcp 対 --match tcp、どのような説明がありますか?

iptables: --protocol tcp 対 --match tcp、どのような説明がありますか?

次のようにフィルタリングされる投稿がたくさんありますiptables

-A INPUT -p tcp -m tcp --dport xxxxx -j ACCEPT

これは私の行と同じでなければなりません。

--append INPUT --protocol tcp --match tcp --destination-port xxxxx --jump ACCEPT

この行に関する私の質問は--TCPマッチ私たちのようにしなければならないすでに合意を知っているTCPです、それともこれがもっと起こるのでしょうか?私はこの文脈でそれが何を意味するのか理解していません。

答え1

以下の説明では、モジュールは以下を意味します。ユーザーモード iptables コマンドカーネルモジュールではなく、モジュールです(もちろん関連していますが、説明は必要ありません)。

iptablesIPv4が関連しています。すべてIPv4パケット一つある規約大地。--protocol tcp組み込み機能を使用iptablesコードはこれを与えられた値と比較します。ベースiptablesコマンド自体は、基本的なIPv4層についてあまり知りません。特定のTCPポートを確認するなど、別途必要がない場合iptablesもうありません。たとえば、

iptables -A INPUT -p tcp -j ACCEPT

モジュールはロードされません。伝送制御プロトコル。そして私たちは彼をもう一度見ることができないでしょう-m tcp

ベースiptablesコマンドはポートを知りません。プロトコルテスト後に不明なオプションを指定する際の配慮で、iptablesプロトコル名を持つモジュールを自動的にロードするのが-mこのオプションの役割です。したがって、バックグラウンドでオプションがiptables -A INPUT -p tcp --dport 5555見つからない場合、--dportそのオプションは自動的に前に-m tcp挿入されます。ここで--dportオプションをもう一度確認してください。伝送制御プロトコルモジュールとモジュールは--dportオプションについて知り、それを処理します。そのため、次のことを行うとき:

iptables -A INPUT -p tcp --dport 5555

ルールをダンプすると、iptables-save結果に以下が表示されます。

-A INPUT -p tcp -m tcp --dport 5555

多くの場合、人々は入力せずに-m tcpルールダンプから結果をコピーする方が簡単で、コマンドに構文エラーがないことを意味するため、ルールダンプから結果をコピーします。

これを確信したい場合は、以下で何が起こっているのかを見てください。ストレス--dportICMPプロトコルのオプションを指定した-p icmp後にオプションを提供または提供しない例(ポート概念なし):

# strace iptables -A INPUT -p icmp 2>&1 |egrep 'icmp|write'
execve("/usr/sbin/iptables", ["iptables", "-A", "INPUT", "-p", "icmp"], [/* 15 vars */]) = 0

そして

# strace iptables -A INPUT -p icmp --dport 5555 2>&1 |egrep 'icmp|write'
execve("/usr/sbin/iptables", ["iptables", "-A", "INPUT", "-p", "icmp", "--dport", "5555"], [/* 15 vars */]) = 0
stat("/usr/lib/x86_64-linux-gnu/xtables/libipt_icmp.so", {st_mode=S_IFREG|0644, st_size=14464, ...}) = 0
open("/usr/lib/x86_64-linux-gnu/xtables/libipt_icmp.so", O_RDONLY|O_CLOEXEC) = 3
getsockopt(3, SOL_IP, IPT_SO_GET_REVISION_MATCH, "icmp\0\177\0\0\207\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!\0\0\0\0\0", [30]) = 0
write(2, "iptables v1.8.3 (legacy): ", 26iptables v1.8.3 (legacy): ) = 26
write(2, "unknown option \"--dport\"", 24unknown option "--dport") = 24
write(2, "\n", 1
write(2, "Try `iptables -h' or 'iptables -"..., 61Try `iptables -h' or 'iptables --help' for more information.

不明なiptablesオプションが存在し、モジュールのロードがトリガーされました。ICMP(文書libipt_icmp.so)契約のためICMP任命される。モジュールはそのオプションも処理でき--dportません。iptablesコマンドが失敗しました。

関連情報