「iptables ステートフルパケットインスペクション」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「<!-- vim: filetype=mediawiki --> iptables では、 state モジュールを使用し、ステートフルインスペクションの[[ファイアーウォー...」)
 
行13: 行13:
  
 
== 使い方 ==
 
== 使い方 ==
 +
 +
[[iptables]] で[[ステートフルインスペクション]]を使用するには、 [[iptables]] のステートモジュールを使用し、ステートごとにフィルターします。
 +
 +
== ssh のアクセスをステートフルで許可する ==
 +
 +
これは、 [[ssh]] のアクセスを受け付ける例です。
 +
 +
確立しているセッションを ESTABLISHED,RELATED で許可します。
 +
[[SYN]]ビットが立っていて、NEW ステートの接続だけを [[sshd]] へのアクセスを許可します。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
*filter
 
*filter
行24: 行33:
 
COMMIT
 
COMMIT
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
[[SYN]] ビットがたっているかどうかは、 --syn オプションで確認できます。
 +
--syn を指定した場合、[[SYN]] ビットがたっているパケットのみがマッチします。
  
 
== NEW ステートのときに SYN ビットがセットされていないパケット ==
 
== NEW ステートのときに SYN ビットがセットされていないパケット ==
  
 
ステートが NEW であるのに、 SYN ビットがたっていない([[SYNパケット]]ではない)パケットは、不要なパケットです。
 
ステートが NEW であるのに、 SYN ビットがたっていない([[SYNパケット]]ではない)パケットは、不要なパケットです。
 +
 +
[[iptables]] は、 NEW ステートで [[SYN]] ビットのたっていない[[パケット]]であっても[[ファイアーウォール]]を通過させます。
  
 
ログに出力し、 DROP する例です。
 
ログに出力し、 DROP する例です。
行37: 行51:
 
== NEW ステートで SYN/ACK ビットがセットされたパケット ==
 
== NEW ステートで SYN/ACK ビットがセットされたパケット ==
  
[[TCPシーケンス番号予測攻撃]] が使われることがあります。
+
[[TCPシーケンス番号予測攻撃]] (シーケンスナンバー予測、Sequence Number Prediction) が使われることがあります。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
-A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
 
-A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \

2013年9月6日 (金) 22:47時点における版

iptables では、 state モジュールを使用し、ステートフルインスペクションファイアーウォールを実現できます。

読み方

iptables ステートフルパケットインスペクション

概要

接続の状態については、 iptables 接続状態を参照してください。

使い方

iptablesステートフルインスペクションを使用するには、 iptables のステートモジュールを使用し、ステートごとにフィルターします。

ssh のアクセスをステートフルで許可する

これは、 ssh のアクセスを受け付ける例です。

確立しているセッションを ESTABLISHED,RELATED で許可します。 SYNビットが立っていて、NEW ステートの接続だけを sshd へのアクセスを許可します。

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
 
-A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --syn --state NEW --dport ssh -j ACCEPT
COMMIT

SYN ビットがたっているかどうかは、 --syn オプションで確認できます。 --syn を指定した場合、SYN ビットがたっているパケットのみがマッチします。

NEW ステートのときに SYN ビットがセットされていないパケット

ステートが NEW であるのに、 SYN ビットがたっていない(SYNパケットではない)パケットは、不要なパケットです。

iptables は、 NEW ステートで SYN ビットのたっていないパケットであってもファイアーウォールを通過させます。

ログに出力し、 DROP する例です。

-A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "NEW not syn: "
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP

NEW ステートで SYN/ACK ビットがセットされたパケット

TCPシーケンス番号予測攻撃 (シーケンスナンバー予測、Sequence Number Prediction) が使われることがあります。

-A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
	-m state --state NEW -j REJECT --reject-with tcp-reset

関連項目