通常、IP テーブルを使用すると、トラフィックを破棄または拒否します。 TCPの場合、iptablesはsynを再送信しますが、接続するのを忘れる方法はありますか?
答え1
xtables-addons
目標を持ってTARPIT
(マニュアルページ):
TARPIT は、
着信 TCP 接続をキャプチャして保存するためにローカル接続固有のリソースを使用しません。TARPITはTCPレベルでのみ機能し、完全にアプリケーションに依存しません。モジュールはTCP要求に応答し、リスニングサーバーのように動作しますが、ACKまたはRSTを送信する以外はデータを送信しません。着信パケットは無視され、ドロップされます。
Debian/Ubuntu では、パッケージは次のようになります。xtables-addons-common
。
答え2
RSTパケットを挿入でき、関連ホストに特異的でカスタマイズされたファイアウォール構成がない場合、RSTは接続を閉じることがあります。別のアプローチは、接続を受け入れて、何とか状態項目を削除することです。
...
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --syn -m tcp --dport 22 -j ACCEPT
...
ロギング(ログスキャナを介して動作するなど)または他のモジュールがインストールされている可能性がありますsec.pl
。conntrack-tools
conntrack -D -s 192.0.2.42
192.0.2.42 SSH経由で接続した後、このIPのステータステーブルエントリを削除します。
答え3
Synを再送信しましたが、接続するのを忘れましたか?
これはSYN / ACKを生成しますが、接続を追跡しないことを意味します。
あまりそうではありません。
最初にすべきこと:なぜ?
SYNが閉じたポートに送信されたら、次の操作を行います。
パケットをドロップし、さらなる処理を防止します。
あなたがどんな質問に答えようとしても、攻撃者があなたがそこにいるという答えを受け取ったら、RSTに答えてください。完全に可能で一般的なiptablesの答えは次のとおりです。
iptables -p tcp[...] -j REJECT --reject-with tcp-reset を使用して RST を再送信できます。
SYNが次の場合開いているポートの次:
サーバー(サービス)が適切であると判断された要求を処理できるようにします。
SYNPROXYヘルプサーバーを使用してください。
これは実際にはSYN-ACK Flood DDoS攻撃からサーバーを保護する試みです。これはあなたが要求したものと同じではなく、可能ではありません。両方のエンティティ(サーバーとiptables)が同時に同じパケットに対してSYN / ACKで応答することはできません。どちらかです。
しかし、SYNPROXYはスマートです。動作方法(およびその他):
SYNPROXY を使用すると、クライアントは SYNPROXY に透過的に接続されます。したがって、クライアントとSYNPROXYの間に3方向TCPハンドシェイクが最初に発生します。
クライアントはサーバ A に TCP SYN を送信します。
ファイアウォールからこのパケットが到着すると、UNTRACKEDとしてマークされます。
次に、UNTRACKED TCP SYN パケットを SYNPROXY に提供します。
SYNPROXYはこの情報を取得し(サーバーAとして)TCP SYN + ACK(追跡されません)で応答します。
クライアントは、SYNPROXYにも提供されるTCP ACK(iptablesにINVALIDまたはUNTRACKEDとしてマークされています)で応答します。
クライアントがSYNPROXYに接続すると、SYNPROXYは自動的に物理サーバーとの3方向TCPハンドシェイクを開始してSYNパケットをなりすまし、実際のサーバーが元のクライアントが接続しようとしていることを知ります。
SYNPROXY は TCP SYN を物理サーバー A に送信します。これは、OUTPUTチェーンで発生するiptablesの新しい接続です。パケットの送信元 IP はクライアントの IP です。
物理サーバーAはクライアントにSYN + ACKを応答します。
SYNPROXYはこのメッセージを受信し、ACKでサーバーに応答します。これで、接続がESTABLISHEDとしてマークされました。
接続が確立されると、SYNPROXYはクライアントとサーバー間のトラフィックを残します。
したがって、SYNPROXY はあらゆるタイプの TCP トラフィックに使用できます。コンテンツ自体を妨げないため、暗号化されていないトラフィックと暗号化されたトラフィックの両方に使用できます。
と言った…
サーバーのないポートではSYNPROXYを設定できません(動作しません)。
したがって、閉じたポートの場合はサーバーが必要です。偽のサーバーかもしれませんが、とにかくサーバーです。
Python - Scapy - すべてのポートを開いた状態で表示
関連: