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

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の1版が非表示)
行1: 行1:
[[iptables]] では、 state モジュールを使用し、[[ステートフルインスペクション]]の[[ファイアーウォール]]を実現できます。
+
[[iptables]] では、 state モジュールを使用し、ステートフルインスペクションの[[ファイアーウォール]]を実現できます。
  
 
'''読み方'''
 
'''読み方'''
行7: 行7:
 
== 概要 ==
 
== 概要 ==
 
接続の状態については、 [[iptables 接続状態]]を参照してください。
 
接続の状態については、 [[iptables 接続状態]]を参照してください。
 
 
== 使い方 ==
 
== 使い方 ==
[[iptables]] で[[ステートフルインスペクション]]を使用するには、 [[iptables]] のステートモジュールを使用し、ステートごとにフィルターします。
+
[[iptables]] でステートフルインスペクションを使用するには、 [[iptables]] のステートモジュールを使用し、ステートごとにフィルターします。
 
+
 
== ssh のアクセスをステートフルで許可する ==
 
== ssh のアクセスをステートフルで許可する ==
 
これは、 [[ssh]] のアクセスを受け付ける例です。
 
これは、 [[ssh]] のアクセスを受け付ける例です。
行30: 行28:
 
[[SYN]] ビットがたっているかどうかは、 --syn オプションで確認できます。
 
[[SYN]] ビットがたっているかどうかは、 --syn オプションで確認できます。
 
--syn を指定した場合、[[SYN]] ビットがたっているパケットのみがマッチします。
 
--syn を指定した場合、[[SYN]] ビットがたっているパケットのみがマッチします。
 
 
== NEW ステートのときに SYN ビットがセットされていないパケット ==
 
== NEW ステートのときに SYN ビットがセットされていないパケット ==
 
ステートが NEW であるのに、 SYN ビットがたっていない([[SYNパケット]]ではない)パケットは、不要なパケットです。
 
ステートが NEW であるのに、 SYN ビットがたっていない([[SYNパケット]]ではない)パケットは、不要なパケットです。
行41: 行38:
 
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
 
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== NEW ステートで SYN/ACK ビットがセットされたパケット ==
 
== NEW ステートで SYN/ACK ビットがセットされたパケット ==
 
[[TCPシーケンス番号予測攻撃]] (シーケンスナンバー予測、Sequence Number Prediction) が使われることがあります。
 
[[TCPシーケンス番号予測攻撃]] (シーケンスナンバー予測、Sequence Number Prediction) が使われることがあります。
行48: 行44:
 
-m state --state NEW -j REJECT --reject-with tcp-reset
 
-m state --state NEW -j REJECT --reject-with tcp-reset
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 関連項目 ==
 
== 関連項目 ==
 +
* [[ssh]]
 
{{iptables}}
 
{{iptables}}
<!-- vim: filetype=mediawiki -->
+
<!-- vim: filetype=mediawiki
 +
-->

2016年1月11日 (月) 21:44時点における最新版

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

関連項目