ホストセキュリティ(1)iptablesの紹介

5169 ワード

インターネット上のシステムについては、どんな状況でもネットワークが安全ではないことを明確にしなければならない.したがって、ファイアウォールを作成することは、システムの100%の安全を保証するものではありませんが、絶対に必要です.Linuxは、netfilter/iptablesという優れたファイアウォールツールを提供しています.完全に無料で、機能が強く、使用が柔軟で、流入と流出の情報を細かく制御でき、低構成の機械でよく動作します.ここではnetfilter/iptablesを用いたファイアウォールの架設やインターネット接続の共有などの応用について簡単に紹介します.
      Netfilter/iptabelsアプリケーションは,Linuxでパケットフィルタリング機能を実現する第4世代アプリケーションと考えられる.Netfilter/iptablesは2.4以降のカーネルに含まれており、ファイアウォール、NAT(ネットワークアドレス翻訳)、パケットの分割などの機能を実現できます.Netfilterはカーネル内で動作し、iptablesはユーザーにルールセットを定義させるテーブル構造である.Netfilter/iptablesは、ipchainsとipwadfm(IPファイアウォール管理)から進化し、より強力な機能を備えています.以下、netfilter/iptabelsをiptablesと総称する.
     Unix、Linux、BSDパーソナルワークステーションにはiptablesを使用してファイアウォールを作成するか、サブネットにファイアウォールを作成して他のシステムプラットフォームを保護できます.iptalesはパケットヘッダのみを読み出し,情報ストリームに負担をかけることなく検証する必要もない.より良いセキュリティを得るには、squidなどのプロキシサーバと組み合わせることができます.
         きほんげんり
   典型的なファイアウォールには、2つのNICが設定されています.1つは流入し、1つは流出します.iptablesは、パケットに流入および流出するヘッダを読み出し、それらをルールセット(Ruleset)と比較して、許容可能なパケットを1つのネットワークカードから別のネットワークカードに転送し、拒否されたパケットに対して、破棄または定義された方法で処理することができる.
       ファイアウォールにソースアドレス、宛先、または特定のプロトコルタイプのパケットに対して何をするかに関する命令を提供することによって、ルールはパケットのフィルタリングを制御する
1,基本文法
iptables [-t table] command [match] [target]
(1)表
テーブル名
さぎょう
filter
INPUT,OUTPUT,FORWARDチェーン
nat
PREROUTING,OUTROUTING,POSTROOUTINGチェーン
MANGLE
PREROUTING,OUTROUTINGチェーン
MANGLEは破壊の意味で、ここではパケットのヘッダ情報が人に破壊された後のパケットです
PREROUTING:ルーティング転送前
POSTROOUTING:ルーティング転送後
FORWARD:転送
INPUT:入力   
OUTPUT:出力
(2)パラメータ
パラメータ
機能の説明
--append  -A
チェーンの最後にポリシーを追加
--delete  -D
ルールを削除するか、指定した番号のルールを削除します.
--policy  -P
チェーンのデフォルトターゲットの設定
--new -N chain
指定した名前で新しいチェーンを作成
--flush   -F
チェーンを指定すると、チェーンのすべてのルールが削除されます.指定されていない場合は、すべてのチェーンのすべてのルールを削除します.
--list    -L
指定されたチェーン内のルールのリスト
--insert  -I
1つのチェーンにルールを挿入し、1つ目のチェーンに配置します.
(3)マッチング
--proto     -p
一般的にプロトコルを検出するために使用されます
tcp udp icmp
--source    -s
ここではパケット内のソースアドレスに基づいて処理する
注:ここはパケットのソースアドレスです.
--destination -d
ここではパケット内の宛先アドレスに基づいて処理する
注:ここはパケットの宛先です
(4)目標
ACCEPT
パケットのターゲットルールが完全にマッチしている場合は、そのまま受け入れます
DROP
パケットのターゲットルールが完全にマッチしている場合は、そのまま捨てる
REJECT
クライアント側とサーバ側にデッドソケットが残されず、エラーメッセージが送信されません.
RETURN
このルールは、チェーンのデフォルトのポリシーを使用して処理されます.
二、基本応用
        iptablesは、ソースアドレスおよび宛先アドレス、ソースポートおよび宛先ポート、およびパケットに流入する順序を検出することができ、すなわち、iptablesは、既存の接続で受信が許可されているパケットを記憶する.これにより、一時的なポートは、必要に応じてのみ開かれ、すべての永続的なポートの占有要求が拒否され、セキュリティが大幅に強化されます.同時に、ヘッダが変更されたパケットは、許可された宛先アドレスとポートが含まれていても検出され、破棄される.また、ステータスのあるファイアウォールは、パケットの送信または受信によって確立された接続のステータスを指定して記憶することができる.ファイアウォールは、パケットの接続追跡状態からこの情報を取得できます.新しいパケットフィルタリングを決定する際に、ファイアウォールで使用されるこれらの状態情報は、効率と速度を増加させることができる.
  (1)増加規則
この例のルールは、管理者によって悪意のある攻撃者が多数活動していると疑われるため、ある特定のIP範囲からのパケットをブロックします.
       # iptables -t filter -A INPUT -s 123.456.789.0/24 -j DROP

攻撃者のIPアドレスに流れるすべてのパケットを簡単に阻止することもでき、このコマンドは少し異なります.
      # iptables -t filter -A OUTPUT -d 123.456.789.0/24 -j DROP

前に説明したように、既存のチェーンにルールを追加する場合に使用するAオプションに注意してください.
(2)ルールの削除
ネットワーク上の悪意のある攻撃者は常に変化しているので,IPを絶えず変更する必要がある.ネット上の攻撃者が新しいIPアドレスに移行し、古いIPアドレスがいくつかの潔白なユーザーに割り当てられていると仮定すると、これらのユーザーのパケットはあなたのネットワークを通過できません.この場合、-Dオプション付きコマンドを使用して、既存のルールを削除できます.
        # iptables -t filter -D OUTPUT -d 123.456.789.0/24 -j DROP

(3)デフォルトのポリシー
柔軟性に優れ、さまざまなインシデントを防ぐルールを作成するには、多くの時間がかかります.時間がない人にとって、最も基本的な原則は「すべてのパケットを拒否してから、必要なものを許可する」ことです.各チェーンにデフォルトのルールを設定します.
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT

このオプション-Pは、3つの組み込みチェーンのみがポリシーを設定するために使用されます.これらのポリシーは、情報を制限なく流出させることができるが、情報の流入は許されない.外部情報を受信する必要がある場合は、次のコマンドを使用します.
   # iptables -t filter -A INPUT -s 123.456.789.0/24 -j ACCEPT
  (4)SYNの使用
すべてのポートを閉じることはできません.また、一部のポートが開いていることだけを指定することはできません.では、一般ユーザーが正常に通過することを許可し、悪意のある攻撃者がネットワークにアクセスすることを阻止するには、どのように有効なルールを設定すればいいのでしょうか.
iptablesを使用し始めたばかりの人はsyn識別子を十分に利用して、許可されていないアクセスを阻止することができます.iptablesはパケットのヘッダのみを検出するが,実際にはiptables以外の多くの有用なパケット解析はヘッダに基づいている.たとえば、Webサーフィンを行うと、PCから他のWebサーバにリクエストが送信され、リクエストに応答してパケットが返され、システム上の一時ポートが得られます.応答要求とは異なり、サーバは転送されたコンテンツに関心を持っていない.この機能を使用して、システムによって許可されていないTCP接続をすべて阻止するルールを設定できます.
# iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP

ここで、-iはNIC、-pはプロトコル、synはsyn IDが設定されたTCPパケットを表す.SYNはTCP接続を初期化するために使用され、自分のマシンでサーバが実行されていない場合、他の人もSYNパケットを送信しません.
   (5)ルールの保存
これまでの例はすべてコマンドラインで行われていた.新しいルールをテストするときは、これは良い方法ですが、テスト結果が満足すれば、スクリプトとして保存できます.iptables-saveコマンドを使用して、次のことを実行できます.
$ iptables-save > iptables-script

パケットフィルタテーブルのすべてのルールは、ファイルiptables-scriptに保存されます.システムを再起動するときは、iptables-restoreコマンドを使用して、スクリプトファイルからパケットフィルタテーブルにルールセットをリカバリできます.リカバリコマンドは次のとおりです.
 
$ iptables-restore iptables-script

システムを起動するたびにルールセットを自動的に復元する場合は、上記で指定したコマンドを任意の初期化シェルスクリプトに配置できます.