`conntrack`と`--protocol`などを混ぜてルールを書き直そうとします。 v4

`conntrack`と`--protocol`などを混ぜてルールを書き直そうとします。 v4

私は今読んだ。iptablesマニュアルページ。モジュールの場合、?をconntrack使用/--ctproto優先する必要があるようです。--protocol

今まで使ったことをもっとよく見せてあげます、いつかは移りますct*。とにかく、ここにあります:

$ cat /etc/iptables/rules.v4 
*filter
:INPUT      DROP      [0:0]
:FORWARD    DROP      [0:0]
:OUTPUT     ACCEPT    [0:0]
--append INPUT --in-interface lo --match comment --comment "Allow loopback" --jump ACCEPT
--append INPUT --match conntrack --ctstate INVALID --match comment --comment "Drop invalid packets" --jump DROP
--append INPUT --match conntrack --ctstate NEW --protocol tcp ! --syn --match comment --comment "Reject new non-syn TCP" --jump REJECT --reject-with tcp-reset
--append INPUT --match conntrack --ctstate NEW,ESTABLISHED --protocol tcp --match tcp --destination-port 22 --source 192.168.0.0/24 --match comment --comment "Allow local SSH on default port" --jump ACCEPT
--append INPUT --protocol icmp --icmp-type echo-request --match limit --limit 2/second --limit-burst 5 --match comment --comment "Allow only ping and within limits" --jump ACCEPT
--append INPUT --match conntrack --ctstate RELATED,ESTABLISHED --match comment --comment "Normal traffic" --jump ACCEPT
COMMIT

だから、次のように書き直してみました。

*filter
:INPUT      DROP      [0:0]
:FORWARD    DROP      [0:0]
:OUTPUT     ACCEPT    [0:0]
--append INPUT --in-interface lo --match comment --comment "Allow loopback" --jump ACCEPT
--append INPUT --match conntrack --ctstate INVALID --match comment --comment "Drop invalid packets" --jump DROP
--append INPUT --match conntrack --ctstate NEW --ctproto tcp ! --syn --match comment --comment "Reject new non-syn TCP" --jump REJECT --reject-with tcp-reset
--append INPUT --match conntrack --ctstate NEW,ESTABLISHED --ctproto tcp --match tcp --destination-port 22 --source 192.168.0.0/24 --match comment --comment "Allow local SSH on default port" --jump ACCEPT
--append INPUT --match conntrack --ctproto icmp --icmp-type echo-request --match limit --limit 2/second --limit-burst 5 --match comment --comment "Allow only ping and within limits" --jump ACCEPT
--append INPUT --match conntrack --ctstate RELATED,ESTABLISHED --match comment --comment "Normal traffic" --jump ACCEPT
COMMIT

別の方法を試してみると、次のエラーが発生し、他のエラーも発生する可能性があります。

# iptables-restore < rules.v4-ct 
iptables-restore v1.8.4 (legacy): unknown option "--syn"
Error occurred at line: 7
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
# iptables-restore < rules.v4-ct 
iptables-restore v1.8.4 (legacy): unknown option "--icmp-type"
Error occurred at line: 9
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
# iptables-restore < rules.v4-ct 
iptables-restore: line 11 failed
# iptables-restore < rules.v4-ct 
Bad argument `COMMIT'
Error occurred at line: 11
Try `iptables-restore -h' or 'iptables-restore --help' for more information.

これについて明らかにしていただきありがとうございます。

ベストアンサー1

いくつかの注意:

  • 人々が最初に使用すべき場所がどこにあるかを知りたいです--ctproto tcp
  • 精密OPのマンページURLリンク10年を超えました。たとえば、この回答の最後にあるコメントに使用されているconntrack一致モジュールは含まれていません。--ctreplsrcport2つのマニュアルページに分割されていません。iptables(基本)とiptables-extensions今日、ほとんどの興味深い文書(一致とターゲット)がここにあります。私は、引数とサブコマンドへのリンクを提供するDebianのマニュアルページを好みます(例:conntrackマッチ) が頻繁に表示されます。

質問について:

  • --protocolは組み込み機能であり、追加のiptablesマッチングモジュールは必要ありません(説明を参照iptables-extensions(8))。一致モジュール引数ではなく、依存関係を複数のモジュールに変更します。

  • モジュールをロードせずにモジュール固有のパラメータを使用すると、機能しません。

    • --synの一部です-m tcpこのモジュールをロードしないと使用できません。

      これにより7号線が失敗します。

    • --icmp-typeの一部です-m icmpこのモジュールをロードしないと使用できません。

      これにより、9号線が失敗します。

  • プロトコル固有のモジュールはプロトコルを指定する必要があります。

    プロトコル(例-p tcp:)を宣言すると、自動的に同じ名前(例-m tcp:)を持つモジュールをロードしようとします。その逆は真実ではありません。これがtcpORicmpモジュールが明示的に書かれることはほとんどありませんが、図のように実際には常に存在する理由ですiptables-save。これは明示的に文書化されていませんが、もしそうなら、文書は次のようになります。厳しく第二に、常に最新の文書を作成し、-p tcp尊重する必要があります。-m tcp

    • 伝送制御プロトコル

      tcp

      --protocol tcp指定した場合、これらの拡張機能を使用できます。 次のオプションを提供します。

      7行が追加されると、-m tcp7行と8行はまだ失敗します(明らかにカーネル検証レベルで)。

    • ICMP

      icmp(IPv4のみ)

      --protocol icmp指定した場合は、この拡張機能を使用できます。 次のオプションを提供します。

      このため、行9は失敗します(明らかにカーネル検証レベルで)。

したがって、使用可能であっても、--ctproto tcp一部ではない機能が必要な場合は-p tcp -m tcp常に必要です。 ICMPも同じだ。より具体的な方法が利用可能な場合は、conntrackそのためにモジュールを使用することはおそらく価値がないでしょう。

また、conntrack検索つながるテーブルは特定の方法よりも費用がかかります(ただし、実際にクエリが完了した場合(prio -200に基づいて)つながる施設)、アイテムへの参照キャッシュステータスはパケットのskbuffでも直接確認できます。

いくつかの注意:

  • nf_conntrack_tcp_loose

    システム(ネットワークネームスペース)レベルでは、このフィルタは次のことを行います。

    -A INPUT -p tcp -m conntrack --ctstate NEW --ctproto tcp -m tcp ! --syn -m comment --comment "Reject new non-syn TCP" -j REJECT --reject-with tcp-reset
    

    最終REJECT目標を除いて、次のように置き換えることができます。

    sysctl -w net.netfilter.nf_conntrack_tcp_loose=0
    

    これらのパケットは無効と分類され、無効なルールチェックによって破棄されます(OPルールで拒否されるのではなく)。デフォルトでは、緩いモードは一時的に中断されたトラフィック(ステートフルルーティングファイアウォールの再起動など)を再開できるように有効になっています。

  • 8号線は実際に完了することができます。いいえ -p tcp -m tcp

    なぜならこの事件のせいで-m conntrack置き換える機能があります。

    nat / PREROUTINGルールは元の宛先ポート(22と異なる場合があります)を変更できるため、--ctreplsrcport 22以下ではより自然なポートが選択されます--ctorigdstport 22

    -A INPUT -s 192.168.0.0/24 -m conntrack --ctstate NEW,ESTABLISHED --ctproto tcp --ctreplsrcport 22 --match comment --comment "Allow local SSH on default port" --jump ACCEPT
    

    でも(まれに使用されるnat / INPUTはフィルタ/入力の後に発生します。一部の文書では別途説明しますが、ソースでは何も変更されず、--ctorigsrc自然に使用できます):

    -A INPUT -m conntrack --ctstate NEW,ESTABLISHED --ctproto tcp --ctreplsrcport 22 --ctorigsrc 192.168.0.0/24 --match comment --comment "Allow local SSH on default port" --jump ACCEPT
    

おすすめ記事