SlideShare a Scribd company logo
Linux女子部 iptables復習編
ver1.1 中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
Linux女子部
iptables復習編
Open Cloud Campus
2
Linux女子部 iptables復習編
自己紹介
 中井悦司(なかいえつじ)
– Twitter @enakai00
 日々の仕事
– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.
企業システムでオープンソースの活用を希望される
お客様を全力でご支援させていただきます。
 昔とった杵柄
– 素粒子論の研究(超弦理論とか)
– 予備校講師(物理担当)
– インフラエンジニア(Unix/Linux専門)
「Linux独習書の新定番」
書きました!
読者の声より ――
「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく 
 なっているのは不幸なことだと思う。そんな中、この本はすごくいい」
「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。
 脳みそに染みこんで来ます」
Open Cloud Campus
3
Linux女子部 iptables復習編
Contents
 iptablesの基礎
 コネクショントラッキング
 補足資料
Linux女子部 iptables復習編
iptablesの基礎
Open Cloud Campus
5
Linux女子部 iptables復習編
iptablesの機能
 iptablesの機能は、大きくは「パケットフィルタリング」と「NAT (Network Address
Translation)」に分かれます。
– パケットフィルタリングは、Linuxにファイアウォール機能を提供するもので、IPパケットの送信、
受信、転送のそれぞれについて、許可条件を設定します。
– NATは、Linuxサーバをルータとして使用する際に利用する機能で、パケットの転送時に、パケット
に含まれる送信元、もしくは宛先IPアドレスを変換します。
• 正確には、DNAT(宛先アドレス変換)、SNAT(送信元アドレス変換)、マスカレード(SNAT
の特別版)の3種類があります。
インターネット
192.168.100.10
プライベートネットワーク
192.168.100.0/24
192.168.100.1
グローバル
IPアドレス
XX.XX.XX.XX
インターネットからの
接続パケットをフィルタリング プライベートネットワークから
インターネットにマスカレード接続
ルータ用
Linuxサーバ
192.168.100.11
外部からの接続パケットを
フィルタリング
iptablesの利用例
Open Cloud Campus
6
Linux女子部 iptables復習編
iptablesの設定方法
 iptablesの有効化/無効化は、iptablesサービスの起動・停止で行います。
– # service iptables start : 設定ファイル「/etc/sysconfig/iptables」をアクティブ化します。
– # service iptables stop : アクティブな設定をすべて無効化します。
 iptablesの設定は、設定ファイルを編集して再アクティブ化する方法と、iptablesコマンド
でアクティブな設定を直接変更する方法があります。
– アクティブな設定を直接変更した場合は、別途、設定ファイルに内容を書き出しておかないと、再
起動後に変更が失われます。
iptablesコマンドで設定
アクティブな設定
設定ファイルに書き出し
# service iptables save
設定ファイルを再アクティブ化
# service iptables restart
/etc/sysconfig/iptables
設定ファイルを編集
iptablesの2種類の設定方法
Open Cloud Campus
7
Linux女子部 iptables復習編
iptablesにおける処理の流れ
 Linuxサーバを通過するパケットは、いくつかの「チェーン」を通過します。
– INPUTチェーン : 受信パケットが通過します。
– OUTPUTチェーン : 送信パケットが通過します。
– PREROUTING、FORWARD、POSTROUTINGチェーン : 転送パケットが通過します。
 通常の利用法では、下図のチェーンとテーブルを覚えておけば十分です。
– filterテーブル : パケットフィルタリングの処理を定義します。
– natテーブル : NATの処理を定義します。
ネットワーク
アプリケーション
プログラム
filterテーブルfilterテーブル
INPUTチェーンOUTPUTチェーン
ネットワーク#2
natテーブルnatテーブル
PREROUTINGチェーンPOSTROUTINGチェーン
ネットワーク#1
filterテーブル
FORWARDチェーン
DNAT処理SNAT/
マスカレード処理
受信パケット
送信パケット
転送パケット
Open Cloud Campus
8
Linux女子部 iptables復習編
パケットフィルタリングの設定例
 パケットフィルタリング設定の基本コマンドは次の通りです。
– 指定条件にマッチするパケットに対するターゲットの定義
• iptables -A <チェーン> <パケット条件> -j <ターゲット>
– デフォルトターゲットの定義
• iptables -P <チェーン> <ターゲット>
– -Aオプションで設定した順にパケット条件の評価が行われて、最初にマッチした条件に対するター
ゲットが実行されます。LOGアクション以外はそこで評価が終了します。
– どの条件にもマッチしなかった場合は、-Pオプションで指定したアクションが実行されます。
– 現在のアクティブな設定は次のコマンドで表示します。
• iptables [-t <テーブル>] [-v][-n] -L <チェーン>
• -vオプションは詳細情報を表示します。-nオプションはIPアドレスやTCP/UDPポート番号を数
値で表示します。(指定しない場合は名前解決を行います。)
ターゲット 説明
ACCEPT パケットの送受信を許可
DROP パケットを破棄する
REJECT パケットの拒否をICMPで通知
LOG パケット情報をSyslogに出力
# service iptables stop
# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -d 192.168.100.10 -p tcp -m tcp --dport 22 -j ACCEPT
# iptables -A INPUT -j LOG -m limit --log-prefix "[INPUT Dropped] "
# iptables -P INPUT DROP
# service iptables save
# service iptables start
受信パケットに対するフィルタリング設定手順の例
コネクショントラッキングの「パケットステータス」
によるフィルタリング(後述)
Open Cloud Campus
9
Linux女子部 iptables復習編
REJECTとDROPの違い
 REJECTの場合は、接続拒否を示す「ICMP unreachable」を返すのでクライアント側は即座
にエラーになります。DROPの場合、クライアント側は応答パケットを待ち続けて、最終的
にタイムアウトします。
– クライアントに対してサーバの存在そのものを隠したい場合は、DROPを使用します。
REJECT
HTTP接続パケット
ICMP unreachable
サーバー内部
DROP
HTTP接続パケット
サーバー内部
返事が無い?
接続失敗
Open Cloud Campus
10
Linux女子部 iptables復習編
NATの設定例 (1)
 NATの設定は、「-t nat」オプションでnatテーブルを指定します。SNAT/マスカレードと
DNATで使用するチェーンが異なります。
– SNAT/マスカレードはPOSTROUTINGチェーンを使用します。マスカレードでは、変換IPアドレスに
は、ルータのNICのIPアドレスが自動的に使用されます。
• iptables -t nat -A POSTROUTING <パケット条件> -j SNAT --to-source <変換IPアドレス>
• iptables -t nat -A POSTROUTING <パケット条件> -j MASQUERADE
– DNATは、PREROUTIGNチェーンを使用します。
• iptables -t nat -A PREROUTING <パケット条件> -j DNAT --to-destination <変換IPアドレス>
 SNAT/マスカレードの設定例
– 変換元と変換先のIPを1対1で指定して、SNAT変換を行います。
– プライベートネットワーク「192.168.100.0/24」から、他のネットワークへの通信をマスカレード
で変換します。
• マスカレード処理では変換先のIPアドレスは指定しません。パケットを送出するNICのIPアドレ
スが自動的に選択されます。
# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 192.168.100.10 -j SNAT --to-source XX.XX.XX.10
# iptables -t nat -A POSTROUTING -s 192.168.100.11 -j SNAT --to-source XX.XX.XX.11
# iptables -t nat -A POSTROUTING -s 192.168.100.12 -j SNAT --to-source XX.XX.XX.12
Open Cloud Campus
11
Linux女子部 iptables復習編
NATの設定例 (2)
 DNATの設定例
– 前ページのSNAT変換表と同じ変換をDNATでも行います。
• SNATだけの場合、プライベートネットワークのサーバからインターネットへの接続はできます
が、インターネットからプライベートネットワークのサーバへの接続はできません。前ページの
SNATと合わせて、DNATを設定することで、プライベートネットワークとインターネットの双方
向通信が可能になります。
– インターネットからグローバルIPアドレス「XX.XX.XX.XX」にHTTPでアクセスすると、プライベー
トネットワークのサーバ「192.168.100.10」に転送して応答を返します。
• 宛先ポートがTCP80番のパケットだけを選択して、「192.168.100.10」のWebサーバに転送し
ています。
# iptables -t nat -A PREROUTING -d XX.XX.XX.XX -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10
# iptables -t nat -A PREROUTING -d XX.XX.XX.10 -j DNAT --to-destination 192.168.100.10
# iptables -t nat -A PREROUTING -d XX.XX.XX.11 -j DNAT --to-destination 192.168.100.11
# iptables -t nat -A PREROUTING -d XX.XX.XX.12 -j DNAT --to-destination 192.168.100.12
インターネット
192.168.100.10
プライベートネットワーク
192.168.100.0/24
192.168.100.1
グローバル
IPアドレス
XX.XX.XX.XX ルータ用
Linuxサーバ
Webサーバ
http://XX.XX.XX.XX
HTTPアクセスのみ転送
Open Cloud Campus
12
Linux女子部 iptables復習編
ユーザ定義チェーンの利用
 デフォルトで用意されたチェーンの他に任意の名前のチェーンを追加で定義することがで
きます。これを「ユーザ定義チェーン」と呼びます。
– -jオプションのターゲット名にユーザ定義チェーンを指定すると、そのパケットは該当のユーザ定
義チェーンに指定した処理が行われます。
• これは「サブルーチン」を呼び出すイメージになります。ユーザ定義チェーン内の評価にマッ
チしなかったパケットは、呼び出し元のチェーンに戻って評価を継続します。
# iptables -N SSH_OK
# iptables -A SSH_OK -p tcp -p tcp -m tcp --dport 22 -j ACCEPT
# iptables -A FORWARD -j SSH_OK
ネットワーク#2
natテーブルnatテーブル
PREROUTINGチェーンPOSTROUTINGチェーン
ネットワーク#1
filterテーブル
FORWARDチェーン
転送パケット
filterテーブル
ユーザ定義チェーン
– 次は、SSH接続を許可する条件を設定した
「SSH_OK」チェーンを定義して、FORWARD
チェーンから呼び出す例です。
Linux女子部 iptables復習編
コネクショントラッキング
Open Cloud Campus
14
Linux女子部 iptables復習編
コネクショントラッキングとは?
 iptablesは、コネクショントラッキング機能により、それぞれのパケットが属する「スト
リーム」を判別します。
– 「ストリーム」とは、クライアント・サーバ間の特定の通信に伴うパケットの流れを表します。
– 例:
• SSH接続における1つのTCPセッション
• DNSサーバによる名前解決時にやりとりする一連のUDPパケット
• pingコマンドにおける一連のecho request/echo replyの繰り返し
 認識されているストリームは、「/proc/net/nf_conntrack」から確認できます。
– 該当ストリームに属するパケットを受信しないと、タイムアウト値が減っていき、0になるとこの
ストリームの情報は削除されます。
# cat /proc/net/nf_conntrack
ipv4 2 icmp 1 23 src=192.168.122.1 dst=192.168.122.101 type=8 code=0 id=4652
src=192.168.122.101 dst=192.168.122.1 type=0 code=0 id=4652 mark=0
secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
ipv4 2 tcp 6 431999 ESTABLISHED src=192.168.122.1 dst=192.168.122.101 sport=46866
dport=22 src=192.168.122.101 dst=192.168.122.1 sport=22 dport=46866 [ASSURED] mark=0
secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2
タイムアウト
送信(受信)側パケットの情報
受信(送信)側パケットの情報
Open Cloud Campus
15
Linux女子部 iptables復習編
パケットステータスによるフィルタリング
 コネクショントラッキングが各パケットが属するストリームを判別する際に、そのパケッ
トのステータスを割り当てます。
 iptablesの「--state」オプションでは、コネクショントラッキングで割り当てられたス
テータスによって、パケットをマッチングすることができます。
– 次は、既存のストリームに属するか、関係するパケットの受信を許可します。
• # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
– この場合、サーバ側から送信したパケットの応答パケットは「ESTABLISHED」と認識されるので、
必ず受信が許可されます。
ステータス 説明
NEW 新しいストリームを開始するパケット
ESTABLISHED 既存のストリームに属するパケット
RELATED 既存のストリームに「関係する」パケット
INVALID 不正なパケット(存在しないストレージに対する応答パケットなど)
Open Cloud Campus
16
Linux女子部 iptables復習編
ヘルパーモジュールの利用
 「RELATED」に分類されるパケットは、コネクショントラッキングが独自のロジックで判
別します。
– 例えば、エラー通知用のICMPパケットは、エラー発生の原因となったストリームに「関係する」パ
ケットと分類されます。
 追加のヘルパーモジュール(カーネルモジュール)をロードすることで、「RELATED」に
分類するロジックを追加することができます。
– 例えば、「nf_conntrack_ftp」をロードすると、FTPにおけるデータセッションをコントロール
セッションに関連するものと分類します。
• 詳細は次ページを参照
– 「nf_conntrack_netbios_ns」をロードすると、NETBIOSのネームサービスによる名前解決の応答
パケットを最初の問い合わせパケットに関連するものと分類します。
• NETBIOSのネームサービスはブロードキャストで問い合わせするので、これがないと、応答パ
ケットがブロードキャストに紐付けられません。
– 使用するヘルパーモジュールは、「/etc/sysconfig/iptables-config」の
「IPTABLES_MODULES=」に指定します。
Open Cloud Campus
17
Linux女子部 iptables復習編
(参考)FTPのコントロールセッションとデータセッション
 FTPでは、「ls/cd」などのコマンド操作を行う「コントロールセッション」と「put/get」
などのデータ転送を行う「データセッション」について、別々のTCPセッションを使用しま
す。
– データセッションは宛先ポートがランダムに決定されるので、フィルタリングの設定が困難になり
ます。
– 「nf_conntrack_ftp」モジュールを使用すると、「RELATED」の条件でデータセッションのパケッ
トを許可することが可能になります。
コントロールセッション(宛先ポート21)
データセッション(宛先ポートランダム)
FTPクライアントFTPサーバ
コントロールセッション(宛先ポート21)
データセッション(宛先ポートランダム)
FTPクライアントFTPサーバ
アクティブモード
パッシブモード
Linux女子部 iptables復習編
補足資料
Open Cloud Campus
19
Linux女子部 iptables復習編
iptablesの全体像
 iptablesには、全体として図のチェーンとテーブルが存在します。
– 次は、あまり使用しない特殊なテーブルです。
• mangleテーブル:TOS/TTL/SECMARKなどのメタ情報でフィルタリングする際に使用します。
• rawテーブル:このテーブルで「NOTRACK」ターゲットが適用されたパケットは、コネクショ
ントラッキングの対象から外れます。
– 全てのチェーン/テーブルに対する設定内容をダンプ出力する際は、iptables-saveコマンドを使用
すると便利です。
(出典)プロのための Linuxシステム・ネットワーク管理技術 
    http://www.amazon.co.jp/dp/4774146757
Open Cloud Campus
20
Linux女子部 iptables復習編
リミットマッチオプションについて (1)
 リミットマッチオプションを使用すると、マッチング条件にパケットをマッチさせる回数
を制限することができます。
– LOGターゲットで情報を記録する際に、大量のログ出力が発生して問題になる場合があります。こ
のような時にログ出力を制限することができます。
– マッチした回数を記録するカウンタによってコントロールします。パケットがマッチすると、カウ
ンタが1づつ増加していき、指定した値に達すると、それ以上はマッチしなくなります。ただし、
一定時間ごとにカウンタの値が1づつ減少します。
– limitモジュールの拡張マッチング機能のため「-m limit」オプションを指定します。
  次の例で説明します。
• -m limit --limit 5/min --limit-burst 10
– カウンタの最大値が10「--limit-burst 10」で、1分間に5回(正確には12秒に1回)カウンタの値
が減少します「--limit 5/min」。その結果、条件にマッチするパケットが連続した場合、最初の10
個はすべてマッチして、その後は12秒に1個の割合でマッチします。
– 「--limit」オプションは、単位時間に何回カウンタを減少するかを指定します。「/sec」(秒)、
「/min」(分)、「/hour」(時間)、「/day」(日)が使用可能です。
Open Cloud Campus
21
Linux女子部 iptables復習編
リミットマッチオプションについて (2)
 LOGターゲット以外でもリミットマッチを使用することができます。
– 次の例では、10回以上連続するpingを受けると、その後は、1時間に6回だけ(正確には10分に1回
だけ)pingに応答します。
 各オプションのデフォルト値は「--limit 3/hour」および「--limit-burst 5」です。
– 「-m limit」のみを指定した場合は、それぞれのデフォルト値が適用されます。
# iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 6/hour --limit-burst 10 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Open Cloud Campus
22
Linux女子部 iptables復習編
SNAT/マスカレードの仕組み
 下図は、SNAT/マスカレードによる送信元IPアドレス変換の例です。
– プライベートネットワークのIPアドレス「192.168.100.10」のサーバからインターネットのIPアド
レス「YY.YY.YY.YY」のサーバにパケットが送信されます(①)。
– ルータ用Linuxは、送信元IPアドレスを自身のグローバルIP「XX.XX.XX.XX」に書き換えて、イン
ターネットにパケットを転送します(②)。
– インターネットから返送されたパケット(③)は、宛先IPアドレスを元の「192.168.100.10」に
逆変換して、プライベートネットワークのサーバに送り返します(④)。
YY.YY.YY.YY
インターネット
192.168.100.10
プライベートネットワーク
192.168.100.0/24
ルータ用
Linuxサーバ
192.168.100.10YY.YY.YY.YY
グローバルIPアドレス
XX.XX.XX.XX
①
XX.XX.XX.XXYY.YY.YY.YY②XX.XX.XX.XX YY.YY.YY.YY ③
192.168.100.10 YY.YY.YY.YY ④
宛先IPアドレス  送信元IPアドレス
宛先IPアドレス  送信元IPアドレス
変換逆変換
Open Cloud Campus
23
Linux女子部 iptables復習編
複数サーバのSNAT処理について
 複数サーバのプライベートIPアドレスを共通のグローバルIPに変換する際は、逆変換の際に
変換先のプライベートIPアドレスを正しく判別する必要があります。
 iptablesは、送信元IPアドレスと送信元ポート番号のペアを記憶しておき、返送パケットの
送信先ポート番号から、逆変換先のIPアドレスを決定します。
 SNAT対象のサーバごとに、個別のグローバルIPアドレスを割り当てて使用することも可能
です。
インターネット
192.168.100.10
プライベートネットワーク
192.168.100.0/24
192.168.100.1
グローバルIPアドレス
XX.XX.XX.XX ルータ用
Linuxサーバ
192.168.100.11 192.168.100.12
送信元IPアドレス 送信元ポート番号
変換後の
送信元ポート番号
192.168.100.10 3021 3021
192.168.100.11 4008 4008
192.168.100.12 3021 9000
SNAT記憶テーブルの例– 複数サーバが同じ送信元ポート番号を使った
場合、SNAT処理において、送信元ポート番号
も変換します。
– ただし、大量のサーバが同時にSNATを利用す
ると、変換先の送信元ポート番号が不足して、
SNAT処理ができなくなる場合があります。
Open Cloud Campus
24
Linux女子部 iptables復習編
DNATの仕組み
 下図は、DNATによる宛先IPアドレス変換の例です。
– インターネットのIPアドレス「YY.YY.YY.YY」のPCからルータ用LinuxサーバのグローバルIPアドレ
ス「XX.XX.XX.XX」にパケットが送信されます(①)。
– ルータ用Linuxは、宛先IPアドレスをプライベートネットワークのサーバのIPアドレス
「192.168.100.10」に書き換えて、パケットを転送します(②)。
– プライベートネットワークのサーバから返送されたパケット(③)は、送信元IPアドレスを
「XX.XX.XX.XX」に逆変換して、インターネットのPCに送り返します(④)。
インターネット
192.168.100.10
ルータ用
Linuxサーバ
192.168.100.10YY.YY.YY.YY
グローバルIPアドレス
XX.XX.XX.XX
③
XX.XX.XX.XXYY.YY.YY.YY④XX.XX.XX.XX YY.YY.YY.YY ①
192.168.100.10 YY.YY.YY.YY ②
宛先IPアドレス  送信元IPアドレス
宛先IPアドレス  送信元IPアドレス
逆変換変換
YY.YY.YY.YY
Open Cloud Campus
25
Linux女子部 iptables復習編
参考資料
 「クラウド基盤構築」講義資料
– 第3回 IPネットワークと認証技術の基礎
– https://sites.google.com/site/cloudlecture/text
 iptablesの徹底理解には、下記の書籍が最適です。
Open Cloud Campus
26
Linux女子部 iptables復習編
QA
Linux女子部 iptables復習編
中井悦司
Twitter @enakai00
オープンクラウド・キャンパス
Linuxでネットワークの基礎を
学びましょう!

More Related Content

Linux女子部 iptables復習編

  • 1. Linux女子部 iptables復習編 ver1.1 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス Linux女子部 iptables復習編
  • 2. Open Cloud Campus 2 Linux女子部 iptables復習編 自己紹介  中井悦司(なかいえつじ) – Twitter @enakai00  日々の仕事 – Senior Solution Architect and Cloud Evangelist at Red Hat K.K. 企業システムでオープンソースの活用を希望される お客様を全力でご支援させていただきます。  昔とった杵柄 – 素粒子論の研究(超弦理論とか) – 予備校講師(物理担当) – インフラエンジニア(Unix/Linux専門) 「Linux独習書の新定番」 書きました! 読者の声より ―― 「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく   なっているのは不幸なことだと思う。そんな中、この本はすごくいい」 「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。  脳みそに染みこんで来ます」
  • 3. Open Cloud Campus 3 Linux女子部 iptables復習編 Contents  iptablesの基礎  コネクショントラッキング  補足資料
  • 5. Open Cloud Campus 5 Linux女子部 iptables復習編 iptablesの機能  iptablesの機能は、大きくは「パケットフィルタリング」と「NAT (Network Address Translation)」に分かれます。 – パケットフィルタリングは、Linuxにファイアウォール機能を提供するもので、IPパケットの送信、 受信、転送のそれぞれについて、許可条件を設定します。 – NATは、Linuxサーバをルータとして使用する際に利用する機能で、パケットの転送時に、パケット に含まれる送信元、もしくは宛先IPアドレスを変換します。 • 正確には、DNAT(宛先アドレス変換)、SNAT(送信元アドレス変換)、マスカレード(SNAT の特別版)の3種類があります。 インターネット 192.168.100.10 プライベートネットワーク 192.168.100.0/24 192.168.100.1 グローバル IPアドレス XX.XX.XX.XX インターネットからの 接続パケットをフィルタリング プライベートネットワークから インターネットにマスカレード接続 ルータ用 Linuxサーバ 192.168.100.11 外部からの接続パケットを フィルタリング iptablesの利用例
  • 6. Open Cloud Campus 6 Linux女子部 iptables復習編 iptablesの設定方法  iptablesの有効化/無効化は、iptablesサービスの起動・停止で行います。 – # service iptables start : 設定ファイル「/etc/sysconfig/iptables」をアクティブ化します。 – # service iptables stop : アクティブな設定をすべて無効化します。  iptablesの設定は、設定ファイルを編集して再アクティブ化する方法と、iptablesコマンド でアクティブな設定を直接変更する方法があります。 – アクティブな設定を直接変更した場合は、別途、設定ファイルに内容を書き出しておかないと、再 起動後に変更が失われます。 iptablesコマンドで設定 アクティブな設定 設定ファイルに書き出し # service iptables save 設定ファイルを再アクティブ化 # service iptables restart /etc/sysconfig/iptables 設定ファイルを編集 iptablesの2種類の設定方法
  • 7. Open Cloud Campus 7 Linux女子部 iptables復習編 iptablesにおける処理の流れ  Linuxサーバを通過するパケットは、いくつかの「チェーン」を通過します。 – INPUTチェーン : 受信パケットが通過します。 – OUTPUTチェーン : 送信パケットが通過します。 – PREROUTING、FORWARD、POSTROUTINGチェーン : 転送パケットが通過します。  通常の利用法では、下図のチェーンとテーブルを覚えておけば十分です。 – filterテーブル : パケットフィルタリングの処理を定義します。 – natテーブル : NATの処理を定義します。 ネットワーク アプリケーション プログラム filterテーブルfilterテーブル INPUTチェーンOUTPUTチェーン ネットワーク#2 natテーブルnatテーブル PREROUTINGチェーンPOSTROUTINGチェーン ネットワーク#1 filterテーブル FORWARDチェーン DNAT処理SNAT/ マスカレード処理 受信パケット 送信パケット 転送パケット
  • 8. Open Cloud Campus 8 Linux女子部 iptables復習編 パケットフィルタリングの設定例  パケットフィルタリング設定の基本コマンドは次の通りです。 – 指定条件にマッチするパケットに対するターゲットの定義 • iptables -A <チェーン> <パケット条件> -j <ターゲット> – デフォルトターゲットの定義 • iptables -P <チェーン> <ターゲット> – -Aオプションで設定した順にパケット条件の評価が行われて、最初にマッチした条件に対するター ゲットが実行されます。LOGアクション以外はそこで評価が終了します。 – どの条件にもマッチしなかった場合は、-Pオプションで指定したアクションが実行されます。 – 現在のアクティブな設定は次のコマンドで表示します。 • iptables [-t <テーブル>] [-v][-n] -L <チェーン> • -vオプションは詳細情報を表示します。-nオプションはIPアドレスやTCP/UDPポート番号を数 値で表示します。(指定しない場合は名前解決を行います。) ターゲット 説明 ACCEPT パケットの送受信を許可 DROP パケットを破棄する REJECT パケットの拒否をICMPで通知 LOG パケット情報をSyslogに出力 # service iptables stop # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # iptables -A INPUT -i lo -j ACCEPT # iptables -A INPUT -d 192.168.100.10 -p tcp -m tcp --dport 22 -j ACCEPT # iptables -A INPUT -j LOG -m limit --log-prefix "[INPUT Dropped] " # iptables -P INPUT DROP # service iptables save # service iptables start 受信パケットに対するフィルタリング設定手順の例 コネクショントラッキングの「パケットステータス」 によるフィルタリング(後述)
  • 9. Open Cloud Campus 9 Linux女子部 iptables復習編 REJECTとDROPの違い  REJECTの場合は、接続拒否を示す「ICMP unreachable」を返すのでクライアント側は即座 にエラーになります。DROPの場合、クライアント側は応答パケットを待ち続けて、最終的 にタイムアウトします。 – クライアントに対してサーバの存在そのものを隠したい場合は、DROPを使用します。 REJECT HTTP接続パケット ICMP unreachable サーバー内部 DROP HTTP接続パケット サーバー内部 返事が無い? 接続失敗
  • 10. Open Cloud Campus 10 Linux女子部 iptables復習編 NATの設定例 (1)  NATの設定は、「-t nat」オプションでnatテーブルを指定します。SNAT/マスカレードと DNATで使用するチェーンが異なります。 – SNAT/マスカレードはPOSTROUTINGチェーンを使用します。マスカレードでは、変換IPアドレスに は、ルータのNICのIPアドレスが自動的に使用されます。 • iptables -t nat -A POSTROUTING <パケット条件> -j SNAT --to-source <変換IPアドレス> • iptables -t nat -A POSTROUTING <パケット条件> -j MASQUERADE – DNATは、PREROUTIGNチェーンを使用します。 • iptables -t nat -A PREROUTING <パケット条件> -j DNAT --to-destination <変換IPアドレス>  SNAT/マスカレードの設定例 – 変換元と変換先のIPを1対1で指定して、SNAT変換を行います。 – プライベートネットワーク「192.168.100.0/24」から、他のネットワークへの通信をマスカレード で変換します。 • マスカレード処理では変換先のIPアドレスは指定しません。パケットを送出するNICのIPアドレ スが自動的に選択されます。 # iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE # iptables -t nat -A POSTROUTING -s 192.168.100.10 -j SNAT --to-source XX.XX.XX.10 # iptables -t nat -A POSTROUTING -s 192.168.100.11 -j SNAT --to-source XX.XX.XX.11 # iptables -t nat -A POSTROUTING -s 192.168.100.12 -j SNAT --to-source XX.XX.XX.12
  • 11. Open Cloud Campus 11 Linux女子部 iptables復習編 NATの設定例 (2)  DNATの設定例 – 前ページのSNAT変換表と同じ変換をDNATでも行います。 • SNATだけの場合、プライベートネットワークのサーバからインターネットへの接続はできます が、インターネットからプライベートネットワークのサーバへの接続はできません。前ページの SNATと合わせて、DNATを設定することで、プライベートネットワークとインターネットの双方 向通信が可能になります。 – インターネットからグローバルIPアドレス「XX.XX.XX.XX」にHTTPでアクセスすると、プライベー トネットワークのサーバ「192.168.100.10」に転送して応答を返します。 • 宛先ポートがTCP80番のパケットだけを選択して、「192.168.100.10」のWebサーバに転送し ています。 # iptables -t nat -A PREROUTING -d XX.XX.XX.XX -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10 # iptables -t nat -A PREROUTING -d XX.XX.XX.10 -j DNAT --to-destination 192.168.100.10 # iptables -t nat -A PREROUTING -d XX.XX.XX.11 -j DNAT --to-destination 192.168.100.11 # iptables -t nat -A PREROUTING -d XX.XX.XX.12 -j DNAT --to-destination 192.168.100.12 インターネット 192.168.100.10 プライベートネットワーク 192.168.100.0/24 192.168.100.1 グローバル IPアドレス XX.XX.XX.XX ルータ用 Linuxサーバ Webサーバ http://XX.XX.XX.XX HTTPアクセスのみ転送
  • 12. Open Cloud Campus 12 Linux女子部 iptables復習編 ユーザ定義チェーンの利用  デフォルトで用意されたチェーンの他に任意の名前のチェーンを追加で定義することがで きます。これを「ユーザ定義チェーン」と呼びます。 – -jオプションのターゲット名にユーザ定義チェーンを指定すると、そのパケットは該当のユーザ定 義チェーンに指定した処理が行われます。 • これは「サブルーチン」を呼び出すイメージになります。ユーザ定義チェーン内の評価にマッ チしなかったパケットは、呼び出し元のチェーンに戻って評価を継続します。 # iptables -N SSH_OK # iptables -A SSH_OK -p tcp -p tcp -m tcp --dport 22 -j ACCEPT # iptables -A FORWARD -j SSH_OK ネットワーク#2 natテーブルnatテーブル PREROUTINGチェーンPOSTROUTINGチェーン ネットワーク#1 filterテーブル FORWARDチェーン 転送パケット filterテーブル ユーザ定義チェーン – 次は、SSH接続を許可する条件を設定した 「SSH_OK」チェーンを定義して、FORWARD チェーンから呼び出す例です。
  • 14. Open Cloud Campus 14 Linux女子部 iptables復習編 コネクショントラッキングとは?  iptablesは、コネクショントラッキング機能により、それぞれのパケットが属する「スト リーム」を判別します。 – 「ストリーム」とは、クライアント・サーバ間の特定の通信に伴うパケットの流れを表します。 – 例: • SSH接続における1つのTCPセッション • DNSサーバによる名前解決時にやりとりする一連のUDPパケット • pingコマンドにおける一連のecho request/echo replyの繰り返し  認識されているストリームは、「/proc/net/nf_conntrack」から確認できます。 – 該当ストリームに属するパケットを受信しないと、タイムアウト値が減っていき、0になるとこの ストリームの情報は削除されます。 # cat /proc/net/nf_conntrack ipv4 2 icmp 1 23 src=192.168.122.1 dst=192.168.122.101 type=8 code=0 id=4652 src=192.168.122.101 dst=192.168.122.1 type=0 code=0 id=4652 mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2 ipv4 2 tcp 6 431999 ESTABLISHED src=192.168.122.1 dst=192.168.122.101 sport=46866 dport=22 src=192.168.122.101 dst=192.168.122.1 sport=22 dport=46866 [ASSURED] mark=0 secctx=system_u:object_r:unlabeled_t:s0 zone=0 use=2 タイムアウト 送信(受信)側パケットの情報 受信(送信)側パケットの情報
  • 15. Open Cloud Campus 15 Linux女子部 iptables復習編 パケットステータスによるフィルタリング  コネクショントラッキングが各パケットが属するストリームを判別する際に、そのパケッ トのステータスを割り当てます。  iptablesの「--state」オプションでは、コネクショントラッキングで割り当てられたス テータスによって、パケットをマッチングすることができます。 – 次は、既存のストリームに属するか、関係するパケットの受信を許可します。 • # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT – この場合、サーバ側から送信したパケットの応答パケットは「ESTABLISHED」と認識されるので、 必ず受信が許可されます。 ステータス 説明 NEW 新しいストリームを開始するパケット ESTABLISHED 既存のストリームに属するパケット RELATED 既存のストリームに「関係する」パケット INVALID 不正なパケット(存在しないストレージに対する応答パケットなど)
  • 16. Open Cloud Campus 16 Linux女子部 iptables復習編 ヘルパーモジュールの利用  「RELATED」に分類されるパケットは、コネクショントラッキングが独自のロジックで判 別します。 – 例えば、エラー通知用のICMPパケットは、エラー発生の原因となったストリームに「関係する」パ ケットと分類されます。  追加のヘルパーモジュール(カーネルモジュール)をロードすることで、「RELATED」に 分類するロジックを追加することができます。 – 例えば、「nf_conntrack_ftp」をロードすると、FTPにおけるデータセッションをコントロール セッションに関連するものと分類します。 • 詳細は次ページを参照 – 「nf_conntrack_netbios_ns」をロードすると、NETBIOSのネームサービスによる名前解決の応答 パケットを最初の問い合わせパケットに関連するものと分類します。 • NETBIOSのネームサービスはブロードキャストで問い合わせするので、これがないと、応答パ ケットがブロードキャストに紐付けられません。 – 使用するヘルパーモジュールは、「/etc/sysconfig/iptables-config」の 「IPTABLES_MODULES=」に指定します。
  • 17. Open Cloud Campus 17 Linux女子部 iptables復習編 (参考)FTPのコントロールセッションとデータセッション  FTPでは、「ls/cd」などのコマンド操作を行う「コントロールセッション」と「put/get」 などのデータ転送を行う「データセッション」について、別々のTCPセッションを使用しま す。 – データセッションは宛先ポートがランダムに決定されるので、フィルタリングの設定が困難になり ます。 – 「nf_conntrack_ftp」モジュールを使用すると、「RELATED」の条件でデータセッションのパケッ トを許可することが可能になります。 コントロールセッション(宛先ポート21) データセッション(宛先ポートランダム) FTPクライアントFTPサーバ コントロールセッション(宛先ポート21) データセッション(宛先ポートランダム) FTPクライアントFTPサーバ アクティブモード パッシブモード
  • 19. Open Cloud Campus 19 Linux女子部 iptables復習編 iptablesの全体像  iptablesには、全体として図のチェーンとテーブルが存在します。 – 次は、あまり使用しない特殊なテーブルです。 • mangleテーブル:TOS/TTL/SECMARKなどのメタ情報でフィルタリングする際に使用します。 • rawテーブル:このテーブルで「NOTRACK」ターゲットが適用されたパケットは、コネクショ ントラッキングの対象から外れます。 – 全てのチェーン/テーブルに対する設定内容をダンプ出力する際は、iptables-saveコマンドを使用 すると便利です。 (出典)プロのための Linuxシステム・ネットワーク管理技術      http://www.amazon.co.jp/dp/4774146757
  • 20. Open Cloud Campus 20 Linux女子部 iptables復習編 リミットマッチオプションについて (1)  リミットマッチオプションを使用すると、マッチング条件にパケットをマッチさせる回数 を制限することができます。 – LOGターゲットで情報を記録する際に、大量のログ出力が発生して問題になる場合があります。こ のような時にログ出力を制限することができます。 – マッチした回数を記録するカウンタによってコントロールします。パケットがマッチすると、カウ ンタが1づつ増加していき、指定した値に達すると、それ以上はマッチしなくなります。ただし、 一定時間ごとにカウンタの値が1づつ減少します。 – limitモジュールの拡張マッチング機能のため「-m limit」オプションを指定します。   次の例で説明します。 • -m limit --limit 5/min --limit-burst 10 – カウンタの最大値が10「--limit-burst 10」で、1分間に5回(正確には12秒に1回)カウンタの値 が減少します「--limit 5/min」。その結果、条件にマッチするパケットが連続した場合、最初の10 個はすべてマッチして、その後は12秒に1個の割合でマッチします。 – 「--limit」オプションは、単位時間に何回カウンタを減少するかを指定します。「/sec」(秒)、 「/min」(分)、「/hour」(時間)、「/day」(日)が使用可能です。
  • 21. Open Cloud Campus 21 Linux女子部 iptables復習編 リミットマッチオプションについて (2)  LOGターゲット以外でもリミットマッチを使用することができます。 – 次の例では、10回以上連続するpingを受けると、その後は、1時間に6回だけ(正確には10分に1回 だけ)pingに応答します。  各オプションのデフォルト値は「--limit 3/hour」および「--limit-burst 5」です。 – 「-m limit」のみを指定した場合は、それぞれのデフォルト値が適用されます。 # iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 6/hour --limit-burst 10 -j ACCEPT # iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  • 22. Open Cloud Campus 22 Linux女子部 iptables復習編 SNAT/マスカレードの仕組み  下図は、SNAT/マスカレードによる送信元IPアドレス変換の例です。 – プライベートネットワークのIPアドレス「192.168.100.10」のサーバからインターネットのIPアド レス「YY.YY.YY.YY」のサーバにパケットが送信されます(①)。 – ルータ用Linuxは、送信元IPアドレスを自身のグローバルIP「XX.XX.XX.XX」に書き換えて、イン ターネットにパケットを転送します(②)。 – インターネットから返送されたパケット(③)は、宛先IPアドレスを元の「192.168.100.10」に 逆変換して、プライベートネットワークのサーバに送り返します(④)。 YY.YY.YY.YY インターネット 192.168.100.10 プライベートネットワーク 192.168.100.0/24 ルータ用 Linuxサーバ 192.168.100.10YY.YY.YY.YY グローバルIPアドレス XX.XX.XX.XX ① XX.XX.XX.XXYY.YY.YY.YY②XX.XX.XX.XX YY.YY.YY.YY ③ 192.168.100.10 YY.YY.YY.YY ④ 宛先IPアドレス  送信元IPアドレス 宛先IPアドレス  送信元IPアドレス 変換逆変換
  • 23. Open Cloud Campus 23 Linux女子部 iptables復習編 複数サーバのSNAT処理について  複数サーバのプライベートIPアドレスを共通のグローバルIPに変換する際は、逆変換の際に 変換先のプライベートIPアドレスを正しく判別する必要があります。  iptablesは、送信元IPアドレスと送信元ポート番号のペアを記憶しておき、返送パケットの 送信先ポート番号から、逆変換先のIPアドレスを決定します。  SNAT対象のサーバごとに、個別のグローバルIPアドレスを割り当てて使用することも可能 です。 インターネット 192.168.100.10 プライベートネットワーク 192.168.100.0/24 192.168.100.1 グローバルIPアドレス XX.XX.XX.XX ルータ用 Linuxサーバ 192.168.100.11 192.168.100.12 送信元IPアドレス 送信元ポート番号 変換後の 送信元ポート番号 192.168.100.10 3021 3021 192.168.100.11 4008 4008 192.168.100.12 3021 9000 SNAT記憶テーブルの例– 複数サーバが同じ送信元ポート番号を使った 場合、SNAT処理において、送信元ポート番号 も変換します。 – ただし、大量のサーバが同時にSNATを利用す ると、変換先の送信元ポート番号が不足して、 SNAT処理ができなくなる場合があります。
  • 24. Open Cloud Campus 24 Linux女子部 iptables復習編 DNATの仕組み  下図は、DNATによる宛先IPアドレス変換の例です。 – インターネットのIPアドレス「YY.YY.YY.YY」のPCからルータ用LinuxサーバのグローバルIPアドレ ス「XX.XX.XX.XX」にパケットが送信されます(①)。 – ルータ用Linuxは、宛先IPアドレスをプライベートネットワークのサーバのIPアドレス 「192.168.100.10」に書き換えて、パケットを転送します(②)。 – プライベートネットワークのサーバから返送されたパケット(③)は、送信元IPアドレスを 「XX.XX.XX.XX」に逆変換して、インターネットのPCに送り返します(④)。 インターネット 192.168.100.10 ルータ用 Linuxサーバ 192.168.100.10YY.YY.YY.YY グローバルIPアドレス XX.XX.XX.XX ③ XX.XX.XX.XXYY.YY.YY.YY④XX.XX.XX.XX YY.YY.YY.YY ① 192.168.100.10 YY.YY.YY.YY ② 宛先IPアドレス  送信元IPアドレス 宛先IPアドレス  送信元IPアドレス 逆変換変換 YY.YY.YY.YY
  • 25. Open Cloud Campus 25 Linux女子部 iptables復習編 参考資料  「クラウド基盤構築」講義資料 – 第3回 IPネットワークと認証技術の基礎 – https://sites.google.com/site/cloudlecture/text  iptablesの徹底理解には、下記の書籍が最適です。
  • 26. Open Cloud Campus 26 Linux女子部 iptables復習編 QA