さまざまなTCP攻撃をフィルタリングするためにiptablesを使用することは、他の場所や他の場所でフィルタリングされるため、役に立ちませんか?

さまざまなTCP攻撃をフィルタリングするためにiptablesを使用することは、他の場所や他の場所でフィルタリングされるため、役に立ちませんか?

背景

私はDebian 10バスターを使用しています。私の家のIPアドレスからTorリレーの実行を開始しました。完全な専用サーバーは最もエネルギー効率の高い方法ではないかもしれませんが、試してみたいです。ビットコインデーモンの実行を中止してから、使用可能なトラフィックがたくさんあります。つまり、過去の経験では、私たちの問題ではなく、純粋にネットワークの問題があることを知っています。このトピックを扱う姉妹サイト


研究

今朝私は一人の人に会いました。ServerFaultに対する非常に古い回答、気になったので、これらのルールを適用しました。以下の完全なリストをご覧ください。他の場所で見つけたいくつかのルールを追加しました。単純化して素敵な構造を作りました。

次のルールが現在2019カーネルで測定可能な結果を​​もたらすことができるかどうかを尋ねたいと思います4.19.0-2-amd64


iptables「IPv4ファイルから - /etc/iptables/rules.v4

--append INPUT --proto all --fragment                                --jump DROP    --match comment --comment "all fragmented packets"
--append INPUT --proto all --match state --state INVALID             --jump DROP    --match comment --comment "all invalid packets"
--append INPUT --proto icmp --match u32 ! --u32 "0x4&0x3fff=0x0"     --jump DROP    --match comment --comment "icmp fragmented packets"
--append INPUT --proto icmp --match length --length 1492:65535       --jump DROP    --match comment --comment "icmp oversized unfragmented packets"
--append INPUT --proto tcp ! --syn --match state --state NEW         --jump DROP    --match comment --comment "new non-syn packets"
--append INPUT --proto tcp --tcp-flags  ALL  NONE                    --jump DROP    --match comment --comment "NULL scan"
--append INPUT --proto tcp --tcp-flags  ALL  ALL                     --jump DROP    --match comment --comment "Xmas scan"
--append INPUT --proto tcp --tcp-flags  ALL  FIN,URG,PSH             --jump DROP    --match comment --comment "stealth scan"
--append INPUT --proto tcp --tcp-flags  ALL  SYN,RST,ACK,FIN,URG     --jump DROP    --match comment --comment "pscan 1"
--append INPUT --proto tcp --tcp-flags  SYN,FIN  SYN,FIN             --jump DROP    --match comment --comment "pscan 2"
--append INPUT --proto tcp --tcp-flags  FIN,RST  FIN,RST             --jump DROP    --match comment --comment "pscan 3"
--append INPUT --proto tcp --tcp-flags  SYN,RST  SYN,RST             --jump DROP    --match comment --comment "SYN-RST scan"
--append INPUT --proto tcp --tcp-flags  ACK,URG  URG                 --jump DROP    --match comment --comment "URG scans"
--append INPUT --proto tcp --tcp-flags  ALL  SYN,FIN                 --jump DROP    --match comment --comment "SYN-FIN scan"
--append INPUT --proto tcp --tcp-flags  ALL  URG,PSH,FIN             --jump DROP    --match comment --comment "nmap Xmas scan"
--append INPUT --proto tcp --tcp-flags  ALL  FIN                     --jump DROP    --match comment --comment "FIN scan"
--append INPUT --proto tcp --tcp-flags  ALL  URG,PSH,SYN,FIN         --jump DROP    --match comment --comment "nmap-id scan"

これまで、以後0.5日、一部のパケットをキャプチャするためのルール#2と#5のみが表示されます。

2       67 13972 DROP       all  --  any    any     anywhere             anywhere             state INVALID /* all invalid packets */
5      158 81683 DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:!FIN,SYN,RST,ACK/SYN state NEW /* new non-syn packets */

後ろに1.25日、まだ1つのTCPルールと無効なルールのみをキャプチャします。

2      178 26785 DROP       all  --  any    any     anywhere             anywhere             state INVALID /* all invalid packets */
5      467  241K DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:!FIN,SYN,RST,ACK/SYN state NEW /* new non-syn packets */

後ろに7日、まだ1つのTCPルールと無効なルールのみをキャプチャします。 +通常INPUTチェーンでは、以前は気づかなかった多くのDROPを見ることができます。

Chain INPUT (policy DROP 62772 packets, 17M bytes)
2     3475  355K DROP       all  --  any    any     anywhere             anywhere             state INVALID /* all invalid packets */
5     2459 1324K DROP       tcp  --  any    any     anywhere             anywhere             tcp flags:!FIN,SYN,RST,ACK/SYN state NEW /* new non-syn packets */

質問

他のルールは他の場所や他の場所でフィルタリングされるため、使用されなくなったと見なされますか?

ベストアンサー1

@roaimaの返信を完了するには本物すべての小さな詳細が必要なので、以下の2つのルールがほとんどの構成で一致しない理由です。

--append INPUT --proto all --fragment                                --jump DROP

そして

--append INPUT --proto icmp --match u32 ! --u32 "0x4&0x3fff=0x0"     --jump DROP

--match u32 ! --u32 "0x4&0x3fff=0x0"MFフラグを含めることができることを除いて、洗練された低レベルの書き込み方法--fragmentです。フラグメントオフセット(+フラグMF)は次のとおりです。IPパケットのオフセット4のu32ワード0x4)、最も低いビット部分(&0x3fff):null以外の値は、フラグメントを所有するもの(またはより多くのフラグメントを宣言するもの)と同じです。

--match stateただし、(少なくとも)モジュールがロードされるため、nf_conntrackモジュールが必要ですnf_defrag_ipv4。このデフラグはPREROUTINGフックで行われます。優先順位-400したがって、フラグメントを見ることができるものは何も許可せず、新しく再組み立てられたパケットのみを見ることができます。最新のカーネルでは、rawテーブルをより低い優先順位でロードできます。

# modinfo -p iptable_raw
raw_before_defrag:Enable raw table before defrag (bool)

したがって、これらのパケットを見ることは許可されますが、元のテーブルでのみ可能です(明らかにconntrackを使用しません)。

今またなるでしょう本物ip_tables前の例とは異なり、デフォルトではDebianバスターはどのモジュールも使用しませんiptable_*。なぜならiptables、Debianバスターデフォルトで使用 iptables-nftこれはnftablesを介して翻訳されたiptablesですが、まだ時々使用されます。iptables 拡張'xt_*モジュール。

更新:まだu32モジュールを使用して動作できますが、nftを介してルールを変更しようとするのをブロックします(たとえば、保存して復元することはできません。シミュレーションは常にチェーンの優先順位-300を選択しますraw/PREROUTING)。

root@buster-amd64:~# update-alternatives --display iptables|head -3
iptables - auto mode
  link best version is /usr/sbin/iptables-nft
  link currently points to /usr/sbin/iptables-nft


# iptables -A INPUT -p udp --fragment -j DROP
# iptables -A INPUT -p icmp --match u32 ! --u32 "0x4&0x3fff=0x0" -j DROP
# iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -p udp -f -j DROP
-A INPUT -p icmp -m u32 ! --u32 "0x4&0x3fff=0x0" -j DROP
# nft --debug=netlink list ruleset -a
ip filter INPUT 4 
  [ meta load l4proto => reg 1 ]
  [ cmp eq reg 1 0x00000011 ]
  [ payload load 2b @ network header + 6 => reg 1 ]
  [ bitwise reg 1 = (reg=1 & 0x0000ff1f ) ^ 0x00000000 ]
  [ cmp neq reg 1 0x00000000 ]
  [ counter pkts 0 bytes 0 ]
  [ immediate reg 0 drop ]

ip filter INPUT 5 4 
  [ meta load l4proto => reg 1 ]
  [ cmp eq reg 1 0x00000001 ]
  [ match name u32 rev 0 ]
  [ counter pkts 4 bytes 4096 ]
  [ immediate reg 0 drop ]

table ip filter { # handle 5
    chain INPUT { # handle 1
        type filter hook input priority 0; policy accept;
        meta l4proto udp ip frag-off & 8191 != 0 counter packets 0 bytes 0 drop # handle 4
        meta l4proto icmp # u32 ! "0x4&0x3fff=0x0" counter packets 4 bytes 4096 drop # handle 5
    }

    chain FORWARD { # handle 2
        type filter hook forward priority 0; policy accept;
    }

    chain OUTPUT { # handle 3
        type filter hook output priority 0; policy accept;
    }
}

ルールハンドル#5の前にコメントがあることに注意してください。u32うまくいかず、基本では処理できないからですnft。バイトコードダンプは他の場所に保存されている実際のペイロードチェックを表示しませんが、期待どおりに実行され、実際のフラグメントが受信され削除されるとカウンタが増加します。

おすすめ記事