27
Linux女子部 iptables復習編 ver1.1 中井悦司 Twitter @enakai00 オープンクラウド・キャンパス Linux女子部 iptables復習編

Linux女子部 iptables復習編

Embed Size (px)

DESCRIPTION

Linux女子部07 「firewalld&Linuxセキュリティ勉強会」で使用予定の資料です。 http://connpass.com/event/5259/

Citation preview

Page 1: Linux女子部 iptables復習編

Linux女子部 iptables復習編

ver1.1 中井悦司Twitter @enakai00

オープンクラウド・キャンパス

Linux女子部 iptables復習編

Page 2: Linux女子部 iptables復習編

Open Cloud Campus2

Linux女子部 iptables復習編

自己紹介

中井悦司(なかいえつじ)– Twitter @enakai00

日々の仕事– Senior Solution Architect and

Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。

昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)

「Linux独習書の新定番」書きました!

読者の声より ――「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく  なっているのは不幸なことだと思う。そんな中、この本はすごくいい」「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。 脳みそに染みこんで来ます」

Page 3: Linux女子部 iptables復習編

Open Cloud Campus3

Linux女子部 iptables復習編

Contents

iptablesの基礎 コネクショントラッキング 補足資料

Page 4: Linux女子部 iptables復習編

Linux女子部 iptables復習編

iptablesの基礎

Page 5: Linux女子部 iptables復習編

Open Cloud Campus5

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の利用例

Page 6: Linux女子部 iptables復習編

Open Cloud Campus6

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種類の設定方法

Page 7: Linux女子部 iptables復習編

Open Cloud Campus7

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/

マスカレード処理

受信パケット

送信パケット

転送パケット

Page 8: Linux女子部 iptables復習編

Open Cloud Campus8

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

受信パケットに対するフィルタリング設定手順の例コネクショントラッキングの「パケットステータス」によるフィルタリング(後述)

Page 9: Linux女子部 iptables復習編

Open Cloud Campus9

Linux女子部 iptables復習編

REJECTとDROPの違い

REJECTの場合は、接続拒否を示す「ICMP unreachable」を返すのでクライアント側は即座にエラーになります。DROPの場合、クライアント側は応答パケットを待ち続けて、最終的にタイムアウトします。

– クライアントに対してサーバの存在そのものを隠したい場合は、DROPを使用します。

REJECT

HTTP接続パケット

ICMP unreachable

サーバー内部

DROP

HTTP接続パケット

サーバー内部

返事が無い?

接続失敗

Page 10: Linux女子部 iptables復習編

Open Cloud Campus10

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

Page 11: Linux女子部 iptables復習編

Open Cloud Campus11

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アクセスのみ転送

Page 12: Linux女子部 iptables復習編

Open Cloud Campus12

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チェーンから呼び出す例です。

Page 13: Linux女子部 iptables復習編

Linux女子部 iptables復習編

コネクショントラッキング

Page 14: Linux女子部 iptables復習編

Open Cloud Campus14

Linux女子部 iptables復習編

コネクショントラッキングとは?

iptablesは、コネクショントラッキング機能により、それぞれのパケットが属する「ストリーム」を判別します。

– 「ストリーム」とは、クライアント・サーバ間の特定の通信に伴うパケットの流れを表します。– 例:

• SSH接続における1つのTCPセッション• DNSサーバによる名前解決時にやりとりする一連のUDPパケット• pingコマンドにおける一連のecho request/echo replyの繰り返し

認識されているストリームは、「/proc/net/nf_conntrack」から確認できます。– 該当ストリームに属するパケットを受信しないと、タイムアウト値が減っていき、0になるとこの

ストリームの情報は削除されます。

# cat /proc/net/nf_conntrackipv4 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=2ipv4 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

タイムアウト送信(受信)側パケットの情報

受信(送信)側パケットの情報

Page 15: Linux女子部 iptables復習編

Open Cloud Campus15

Linux女子部 iptables復習編

パケットステータスによるフィルタリング

コネクショントラッキングが各パケットが属するストリームを判別する際に、そのパケットのステータスを割り当てます。

iptablesの「--state」オプションでは、コネクショントラッキングで割り当てられたステータスによって、パケットをマッチングすることができます。

– 次は、既存のストリームに属するか、関係するパケットの受信を許可します。• # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

– この場合、サーバ側から送信したパケットの応答パケットは「ESTABLISHED」と認識されるので、必ず受信が許可されます。

ステータス 説明

NEW 新しいストリームを開始するパケット

ESTABLISHED 既存のストリームに属するパケット

RELATED 既存のストリームに「関係する」パケット

INVALID 不正なパケット(存在しないストレージに対する応答パケットなど)

Page 16: Linux女子部 iptables復習編

Open Cloud Campus16

Linux女子部 iptables復習編

ヘルパーモジュールの利用

「RELATED」に分類されるパケットは、コネクショントラッキングが独自のロジックで判別します。

– 例えば、エラー通知用のICMPパケットは、エラー発生の原因となったストリームに「関係する」パケットと分類されます。

追加のヘルパーモジュール(カーネルモジュール)をロードすることで、「RELATED」に分類するロジックを追加することができます。

– 例えば、「nf_conntrack_ftp」をロードすると、FTPにおけるデータセッションをコントロールセッションに関連するものと分類します。

• 詳細は次ページを参照– 「nf_conntrack_netbios_ns」をロードすると、NETBIOSのネームサービスによる名前解決の応答

パケットを最初の問い合わせパケットに関連するものと分類します。• NETBIOSのネームサービスはブロードキャストで問い合わせするので、これがないと、応答パ

ケットがブロードキャストに紐付けられません。– 使用するヘルパーモジュールは、「/etc/sysconfig/iptables-config」の

「IPTABLES_MODULES=」に指定します。

Page 17: Linux女子部 iptables復習編

Open Cloud Campus17

Linux女子部 iptables復習編

(参考)FTPのコントロールセッションとデータセッション

FTPでは、「ls/cd」などのコマンド操作を行う「コントロールセッション」と「put/get」などのデータ転送を行う「データセッション」について、別々のTCPセッションを使用します。

– データセッションは宛先ポートがランダムに決定されるので、フィルタリングの設定が困難になります。

– 「nf_conntrack_ftp」モジュールを使用すると、「RELATED」の条件でデータセッションのパケットを許可することが可能になります。

コントロールセッション(宛先ポート21)

データセッション(宛先ポートランダム)

FTPクライアントFTPサーバ

コントロールセッション(宛先ポート21)

データセッション(宛先ポートランダム)

FTPクライアントFTPサーバ

アクティブモード

パッシブモード

Page 18: Linux女子部 iptables復習編

Linux女子部 iptables復習編

補足資料

Page 19: Linux女子部 iptables復習編

Open Cloud Campus19

Linux女子部 iptables復習編

iptablesの全体像

iptablesには、全体として図のチェーンとテーブルが存在します。– 次は、あまり使用しない特殊なテーブルです。

• mangleテーブル:TOS/TTL/SECMARKなどのメタ情報でフィルタリングする際に使用します。• rawテーブル:このテーブルで「NOTRACK」ターゲットが適用されたパケットは、コネクショ

ントラッキングの対象から外れます。– 全てのチェーン/テーブルに対する設定内容をダンプ出力する際は、iptables-saveコマンドを使用

すると便利です。

(出典)プロのための Linuxシステム・ネットワーク管理技術     http://www.amazon.co.jp/dp/4774146757

Page 20: Linux女子部 iptables復習編

Open Cloud Campus20

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」(日)が使用可能です。

Page 21: Linux女子部 iptables復習編

Open Cloud Campus21

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

Page 22: Linux女子部 iptables復習編

Open Cloud Campus22

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アドレス

変換逆変換

Page 23: Linux女子部 iptables復習編

Open Cloud Campus23

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処理ができなくなる場合があります。

Page 24: Linux女子部 iptables復習編

Open Cloud Campus24

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

Page 25: Linux女子部 iptables復習編

Open Cloud Campus25

Linux女子部 iptables復習編

参考資料

「クラウド基盤構築」講義資料– 第3回 IPネットワークと認証技術の基礎– https://sites.google.com/site/cloudlecture/text

iptablesの徹底理解には、下記の書籍が最適です。

Page 26: Linux女子部 iptables復習編

Open Cloud Campus26

Linux女子部 iptables復習編

QA

Page 27: Linux女子部 iptables復習編

Linux女子部 iptables復習編

中井悦司Twitter @enakai00

オープンクラウド・キャンパス

Linuxでネットワークの基礎を学びましょう!