この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)
前回のテンプレート1とテンプレート2では、パケットフィルタリングの条件に「サービスポートの番号」や「送信先IPアドレス」といった定まった値を指定しました。iptablesは、こうした一定の条件に基づいた「静的(スタティック)フィルタリング」だけでなく、状況に応じて設定を適応させる「動的(ダイナミック)フィルタリング」やコネクション追跡機能を使った「ステートフル・パケットインスペクション」にも対応しています。
今回はステートフル・パケットインスペクションをiptablesで実現する方法を解説します。
→Linuxで作るファイアウォール[パケットフィルタリング設定編]
http://www.atmarkit.co.jp/flinux/rensai/security05/security05a.html
→連載記事 「習うより慣れろ! iptablesテンプレート集」
http://www.atmarkit.co.jp/flinux/index/indexfiles/iptablesindex.html
→連載記事 「習うより慣れろ! iptablesテンプレート集 改訂版」
http://www.atmarkit.co.jp/flinux/index/indexfiles/newiptablesindex.html
「ステートフル・パケットインスペクション」とは、パケットの時間的な前後関係まで追跡し、TCP・UDPセッションに基づく正当な手順を踏んだパケットか、手続きを装った不正なものか見極め、不正なパケットの受信を拒否するパケット制限です。
TCPでは、クライアントとサーバ間で「3ウェイハンドシェイク」と呼ばれる手順を使ってセッションを確立します。
3ウェイハンドシェイクでTCPセッションを確立するには、クライアントからサーバに対し「SYNパケット」を送り、それを受け取ったサーバは、そのクライアントとの接続を許可するなら「SYN/ACKパケット」を送信します。SYN/ACKパケットを受け取ったクライアントは、接続開始のために「ACKパケット」を送信しサーバとのセッションを確立します。
初めて通信を行うクライアントならば、SYNパケットをサーバに送信するはずです。初めての通信にもかかわらずSYNパケットでないものは不正パケットと見なし、破棄することができます。
3ウェイハンドシェイクでTCPセッションを確立した後、そのクライアントから送られてくるパケットは、引き続き受信を許可する必要があります。受信したパケットが既存の接続に関連するパケットなのか、新しい接続の最初のパケットなのか、パケットの時間的な前後関係を追跡できるよう、iptablesにはコネクション追跡機能が備わっています。
iptablesのコネクション追跡機能で見ることができるパケットの種類は次のとおりです。
iptablesのコネクション追跡機能を使った「ステートフル・パケットインスペクション」の実例を2例紹介します。
Copyright © ITmedia, Inc. All Rights Reserved.