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

提供: セキュリティ
2014年2月20日 (木) 18:28時点におけるDaemon (トーク | 投稿記録)による版

移動: 案内検索
スポンサーリンク

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

関連項目




スポンサーリンク