Upload
etsuji-nakai
View
11.136
Download
7
Embed Size (px)
DESCRIPTION
Linux女子部07 「firewalld&Linuxセキュリティ勉強会」で使用予定の資料です。 http://connpass.com/event/5259/
Citation preview
Linux女子部 iptables復習編
ver1.1 中井悦司Twitter @enakai00
オープンクラウド・キャンパス
Linux女子部 iptables復習編
Open Cloud Campus2
Linux女子部 iptables復習編
自己紹介
中井悦司(なかいえつじ)– Twitter @enakai00
日々の仕事– Senior Solution Architect and
Cloud Evangelist at Red Hat K.K.企業システムでオープンソースの活用を希望されるお客様を全力でご支援させていただきます。
昔とった杵柄– 素粒子論の研究(超弦理論とか)– 予備校講師(物理担当)– インフラエンジニア(Unix/Linux専門)
「Linux独習書の新定番」書きました!
読者の声より ――「今はインターネット上に情報が溢れているけど、質の高い入門書が少なく なっているのは不幸なことだと思う。そんな中、この本はすごくいい」「平易な言葉でありながら、決して足りなくはない。慎重に選ばれています。 脳みそに染みこんで来ます」
Open Cloud Campus3
Linux女子部 iptables復習編
Contents
iptablesの基礎 コネクショントラッキング 補足資料
Linux女子部 iptables復習編
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の利用例
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種類の設定方法
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/
マスカレード処理
受信パケット
送信パケット
転送パケット
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
受信パケットに対するフィルタリング設定手順の例コネクショントラッキングの「パケットステータス」によるフィルタリング(後述)
Open Cloud Campus9
Linux女子部 iptables復習編
REJECTとDROPの違い
REJECTの場合は、接続拒否を示す「ICMP unreachable」を返すのでクライアント側は即座にエラーになります。DROPの場合、クライアント側は応答パケットを待ち続けて、最終的にタイムアウトします。
– クライアントに対してサーバの存在そのものを隠したい場合は、DROPを使用します。
REJECT
HTTP接続パケット
ICMP unreachable
サーバー内部
DROP
HTTP接続パケット
サーバー内部
返事が無い?
接続失敗
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
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アクセスのみ転送
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チェーンから呼び出す例です。
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
タイムアウト送信(受信)側パケットの情報
受信(送信)側パケットの情報
Open Cloud Campus15
Linux女子部 iptables復習編
パケットステータスによるフィルタリング
コネクショントラッキングが各パケットが属するストリームを判別する際に、そのパケットのステータスを割り当てます。
iptablesの「--state」オプションでは、コネクショントラッキングで割り当てられたステータスによって、パケットをマッチングすることができます。
– 次は、既存のストリームに属するか、関係するパケットの受信を許可します。• # iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
– この場合、サーバ側から送信したパケットの応答パケットは「ESTABLISHED」と認識されるので、必ず受信が許可されます。
ステータス 説明
NEW 新しいストリームを開始するパケット
ESTABLISHED 既存のストリームに属するパケット
RELATED 既存のストリームに「関係する」パケット
INVALID 不正なパケット(存在しないストレージに対する応答パケットなど)
Open Cloud Campus16
Linux女子部 iptables復習編
ヘルパーモジュールの利用
「RELATED」に分類されるパケットは、コネクショントラッキングが独自のロジックで判別します。
– 例えば、エラー通知用のICMPパケットは、エラー発生の原因となったストリームに「関係する」パケットと分類されます。
追加のヘルパーモジュール(カーネルモジュール)をロードすることで、「RELATED」に分類するロジックを追加することができます。
– 例えば、「nf_conntrack_ftp」をロードすると、FTPにおけるデータセッションをコントロールセッションに関連するものと分類します。
• 詳細は次ページを参照– 「nf_conntrack_netbios_ns」をロードすると、NETBIOSのネームサービスによる名前解決の応答
パケットを最初の問い合わせパケットに関連するものと分類します。• NETBIOSのネームサービスはブロードキャストで問い合わせするので、これがないと、応答パ
ケットがブロードキャストに紐付けられません。– 使用するヘルパーモジュールは、「/etc/sysconfig/iptables-config」の
「IPTABLES_MODULES=」に指定します。
Open Cloud Campus17
Linux女子部 iptables復習編
(参考)FTPのコントロールセッションとデータセッション
FTPでは、「ls/cd」などのコマンド操作を行う「コントロールセッション」と「put/get」などのデータ転送を行う「データセッション」について、別々のTCPセッションを使用します。
– データセッションは宛先ポートがランダムに決定されるので、フィルタリングの設定が困難になります。
– 「nf_conntrack_ftp」モジュールを使用すると、「RELATED」の条件でデータセッションのパケットを許可することが可能になります。
コントロールセッション(宛先ポート21)
データセッション(宛先ポートランダム)
FTPクライアントFTPサーバ
コントロールセッション(宛先ポート21)
データセッション(宛先ポートランダム)
FTPクライアントFTPサーバ
アクティブモード
パッシブモード
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
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」(日)が使用可能です。
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
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アドレス
変換逆変換
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処理ができなくなる場合があります。
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
Open Cloud Campus25
Linux女子部 iptables復習編
参考資料
「クラウド基盤構築」講義資料– 第3回 IPネットワークと認証技術の基礎– https://sites.google.com/site/cloudlecture/text
iptablesの徹底理解には、下記の書籍が最適です。
Open Cloud Campus26
Linux女子部 iptables復習編
QA
Linux女子部 iptables復習編
中井悦司Twitter @enakai00
オープンクラウド・キャンパス
Linuxでネットワークの基礎を学びましょう!