<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Snort-Ips on K-Life Hack | 韓国ハイエンド・ライフスタイルガイド</title><link>https://klifehack.com/tags/snort-ips/</link><description>Recent content in Snort-Ips on K-Life Hack | 韓国ハイエンド・ライフスタイルガイド</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Thu, 21 May 2026 01:33:09 +0900</lastBuildDate><atom:link href="https://klifehack.com/tags/snort-ips/index.xml" rel="self" type="application/rss+xml"/><item><title>urllib3 Connection PoolにおけるIPS検知時の再試行制御とNATパケット解析</title><link>https://klifehack.com/p/snort-ips-inline-sqli-detection/</link><pubDate>Thu, 21 May 2026 01:33:09 +0900</pubDate><guid>https://klifehack.com/p/snort-ips-inline-sqli-detection/</guid><description>&lt;h2 id="高負荷マイクロサービスにおけるurllib3コネクションプールの最適化とipsの影響"&gt;高負荷マイクロサービスにおけるurllib3コネクションプールの最適化とIPSの影響
&lt;/h2&gt;&lt;p&gt;高負荷なマイクロサービス環境において、&lt;b&gt;&lt;mark&gt;urllib3 Connection Pool&lt;/mark&gt;&lt;/b&gt;の適切な管理は、システム全体のレイテンシとスループットに直結します。特にIPS（Intrusion Prevention System）がインライン配置されたネットワーク経路では、不正トラフィック検知に伴うパケットドロップがコネクションプールの枯渇を引き起こす主要な要因となります。&lt;/p&gt;
&lt;h2 id="ipsのインライン配置によるパケットドロップの影響"&gt;IPSのインライン配置によるパケットドロップの影響
&lt;/h2&gt;&lt;p&gt;IPSが&lt;code&gt;drop&lt;/code&gt;アクションを実行すると、クライアント側の&lt;code&gt;urllib3&lt;/code&gt;はTCPの再送タイマーに基づき待機状態に入ります。IDS（検知のみ）とは異なり、IPSはパケットを物理的に遮断するため、プール内のコネクションが「ESTABLISHED」状態のままハングするリスクを孕んでいます。以下は、Snortを用いたICMPドロップルールの適用例です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# /etc/snort/rules/local.rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# alertからdropへ変更し、IPSモードを有効化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;drop icmp any any -&amp;amp;gt; 10.10.11.10 any &lt;span style="color:#f92672"&gt;(&lt;/span&gt;msg: &lt;span style="color:#e6db74"&gt;&amp;#34;ICMP ping Request Inline mode&amp;#34;&lt;/span&gt;; sid: 1000001;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Snortの実行（インラインモード）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -Q
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この設定下でクライアントがリクエストを送信した場合、&lt;code&gt;Destination port unreachable&lt;/code&gt;が返されるか、あるいは完全にサイレントドロップされ、&lt;code&gt;urllib3&lt;/code&gt;側では&lt;code&gt;ReadTimeoutError&lt;/code&gt;が発生します。💡 タイムアウト値の適切な設定は、このようなゾンビコネクションによるリソース占有を防ぐために不可欠です。&lt;/p&gt;
&lt;h2 id="nat環境におけるパケット構造とコネクション維持"&gt;NAT環境におけるパケット構造とコネクション維持
&lt;/h2&gt;&lt;p&gt;NAT（Network Address Translation）を経由する通信では、L3およびL4レイヤーでIPアドレスとポート番号の変換が行われます。&lt;code&gt;urllib3&lt;/code&gt;の&lt;code&gt;HTTPConnectionPool&lt;/code&gt;は、変換後の宛先IP（DIP）に対してコネクションを維持しますが、NATテーブルのタイムアウト設定とプールの&lt;code&gt;keep-alive&lt;/code&gt;設定が不整合を起こすと、無効なコネクションがプールに残留し、通信エラーを誘発します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[HTTP Request: 192.168.100.10 -&amp;amp;gt; 10.10.11.10]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Before DNAT: |L3 SIP 192.168.100.1, DIP 192.168.100.10|L4 sport 5000, dport 80|
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;After DNAT: |L3 SIP 192.168.100.1, DIP 10.10.11.10|L4 sport 5000, dport 80|
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[HTTP Response: 10.10.11.10 -&amp;amp;gt; 192.168.100.10]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Before SNAT: |L3 SIP 10.10.11.10, DIP 192.168.100.1|L4 sport 80, dport 5000|
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;After SNAT: |L3 SIP 192.168.100.10, DIP 192.168.100.1|L4 sport 80, dport 5000|
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="sqlインジェクション検知時の再試行戦略の最適化"&gt;SQLインジェクション検知時の再試行戦略の最適化
&lt;/h2&gt;&lt;p&gt;特定のシグネチャ（例：&lt;code&gt;UNION SELECT&lt;/code&gt;）に基づく攻撃が検知された場合、IPSは即座にセッションを遮断します。&lt;code&gt;urllib3&lt;/code&gt;側で無制限な再試行（Retry）を設定していると、遮断されたリクエストが繰り返され、IPSのログを圧迫するだけでなく、アプリケーションスレッドを不必要に占有し続けます。⚠️ 異常検知時のリトライは、指数関数的バックオフを伴う制限的な設計が推奨されます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; urllib3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; urllib3.util.retry &lt;span style="color:#f92672"&gt;import&lt;/span&gt; Retry
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# SQLi検知等による遮断を考慮した再試行ロジック&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;retry_strategy &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Retry(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;total&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;status_forcelist&lt;span style="color:#f92672"&gt;=&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;429&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;500&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;502&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;503&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;504&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;allowed_methods&lt;span style="color:#f92672"&gt;=&lt;/span&gt;[&lt;span style="color:#e6db74"&gt;&amp;#34;HEAD&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;OPTIONS&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;backoff_factor&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http &lt;span style="color:#f92672"&gt;=&lt;/span&gt; urllib3&lt;span style="color:#f92672"&gt;.&lt;/span&gt;PoolManager(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;maxsize&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;retries&lt;span style="color:#f92672"&gt;=&lt;/span&gt;retry_strategy,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;timeout&lt;span style="color:#f92672"&gt;=&lt;/span&gt;urllib3&lt;span style="color:#f92672"&gt;.&lt;/span&gt;Timeout(connect&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2.0&lt;/span&gt;, read&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;5.0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="snortルールによるunion-sqli検知の実装"&gt;SnortルールによるUNION SQLi検知の実装
&lt;/h2&gt;&lt;p&gt;以下のルールは、HTTP URI内の&lt;code&gt;UNION&lt;/code&gt;および&lt;code&gt;SELECT&lt;/code&gt;文字列を検知し、アラートを生成します。インラインモードでは、これを&lt;code&gt;drop&lt;/code&gt;に変更することで、アプリケーション層への到達を未然に防ぎます。🛠️ シグネチャベースの防御は、コネクション管理と密接に連携させる必要があります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# SQLインジェクション検知ルールの定義&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alert tcp any any -&amp;amp;gt; $HOME_NET &lt;span style="color:#ae81ff"&gt;80&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;msg: &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; WEB-Attack SQL injection attempt using UNION SELECT &amp;amp;lt;&amp;amp;lt;&amp;amp;lt;&amp;#34;&lt;/span&gt;; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flow:to_server,established; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;content:&lt;span style="color:#e6db74"&gt;&amp;#34;UNION&amp;#34;&lt;/span&gt;; nocase; http_uri; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;content:&lt;span style="color:#e6db74"&gt;&amp;#34;SELECT&amp;#34;&lt;/span&gt;; nocase; http_uri; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pcre:&lt;span style="color:#e6db74"&gt;&amp;#34;/UNION.+SELECT/Ui&amp;#34;&lt;/span&gt;; &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sid:1000002; rev:1;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;検知時のログ出力例：
&lt;code&gt;06/30-12:33:42.766455 [&lt;b&gt;] [1:1000002:1] &amp;gt;&amp;gt;&amp;gt; WEB-Attack SQL injection attempt using UNION SELECT &amp;lt;&amp;lt;&amp;lt; [&lt;/b&gt;] [Priority: 0] {TCP} 192.168.100.1:2508 -&amp;gt; 10.10.11.10:80&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;インフラ側のIPS挙動とクライアント側の&lt;code&gt;urllib3&lt;/code&gt;コネクション管理を同期させることで、異常トラフィック発生時も安定したシステム稼働が可能となります。技術的な整合性を確保することが、マイクロサービス全体の堅牢性を高める鍵となります。&lt;/p&gt;</description></item></channel></rss>