LinuC Level1 v10.0 対策コース(パート2)24/29
ファイアウォールについて
ファイアウォールとは
セキュリティモデルの中には、ネットワークをローカル(内側, 社内ネットワークなど)とリモート(外側, インターネットなど)に分け、ネットワーク全体の安全性を維持するために、特定の境界線(ペリメータ)を設け、その安全性を確保するペリメータセキュリティ(perimeter security) というモデルがあります。
ファイアウォール(FW, fire wall)は、このモデルにおいて、内部ネットワークと外部ネットワークを隔てる 境界線(perimeter) に設置される「防火壁」です。(perimeterは軍事分野の専門用語で、境界線を意味します。)
ファイアウォールを設定することで、第三者がシステムに不正侵入するのを防ぎ、最低限のセキュリティを維持します。
ポートスキャン
ポートスキャンとは、サーバーのポートをスキャンし、開いているポートを特定する行為を指します。
ポートスキャンを行うことで、開いているポートのポート番号から稼働しているサービスを特定できます。サービスを特定できれば、ターゲットに対して有効な攻撃を絞り込むことができます。
ポートスキャンを行う際には、Nmapなどのツールを使用します。
※ Nmapについての詳細は、Envader セキュリティコースの『Nmapを使ってみよう』の解説記事でご紹介しています。こちらのコースでは、実際にNmapを使用してポートスキャンなどを体験できます。ご興味のある方は是非ご覧ください。
ファイアウォールを設定する上では、必要なポートと不要なポートを区別し、それらのポートを適切に設定しておくことが重要です。
iptables
iptables
は、様々なディストリビューションで使用されてきたファイアウォール(パケットフィルタコマンド)です。
iptables -t [テーブル名] -[コマンド] [チェイン名] [条件] -j [ターゲット]
iptables
では、テーブル・チェインといった概念の理解が重要です。
iptables
は、「テーブル → チェイン→ ルール」という構成になっています。
テーブル
テーブル(table)は、パケットの処理に関する機能です。
テーブルは機能ごとに4種類に分かれており、それぞれがいくつかのチェインをもっています。
テーブル | 説明 | チェインの種類 |
---|---|---|
filter | パケットの許可・廃棄・拒否といったフィルタリング | チェイン:INPUT , OUTPUT , FORWARD |
nat | パケットの送信元・宛先のネットワークアドレスの変換(NAT)を行う | チェイン:OUTPUT , PREROUTING , POSTROUTING |
mangle | パケットのTOS(Type Of Service:サービスの種類)・TTL(Time To Live:生存時間)フィールドを変更する | チェイン:INPUT , OUTPUT , FORWARD , PREROUTING , POSTROUTING |
raw | パケットにコネクション追跡を無効化するためのマークをつける | チェイン:OUTPUT , PREROUTING |
※ コネクション追跡(connection tracking) とは、シーケンス番号やポート番号などのパケット情報を記録する方法です。
テーブルをコマンドラインで指定するには、-t
オプションに続けてテーブル名を記述します。
なお、テーブルを指定しない場合は、最も一般的に使われる filter
テーブルがデフォルトで適用されます。
チェイン
チェイン(chain)は、特定の状況に対応する一連のルールや条件を集めたものです。チェインに定義されたルールは、それらに合致するパケットに対してのみ処理を行います。
チェインはパケット処理のタイミングや役割によって以下の5種類に分類されます。
チェイン | 説明 |
---|---|
INPUT | パケットがサーバーに入る前に実行される パケットの受信を許可・拒否する |
OUTPUT | パケットがサーバーから出ていく前に実行される パケットの送信を許可・拒否する |
FORWARD | パケットを他のサーバーに転送する前に実行される パケットの転送を許可・拒否する |
PREROUTING | ルーティング前(pre-routing)に実行される パケット受信時に宛先アドレス・ポートを変換する |
POSTROUTING | ルーティング後(post-routing)に実行される パケット送信時に送信元アドレス・ポートを変換する |
各チェインのもつルールやポリシーの扱い方を指定するには、以下のコマンドを使用します。
コマンド
コマンド | 説明 |
---|---|
-A | 指定したチェインに新たなルールを追加する |
-D | 指定したチェインからルールを削除する |
-L | 指定したチェインのルールを表示する(チェインを指定しない場合は全てのチェインのルールを表示する) |
-P | 指定したチェインのポリシーを指定ターゲットに設定する |
-N | 新たなユーザー定義チェインを作成する |
-X | 指定したユーザー定義チェインを削除する |
オプション
ルールに関する詳細な設定を行う際には以下のオプションを指定します。
オプション | 説明 |
---|---|
-s | パケットの送信元(ソース)アドレスを指定する |
-d | パケットの宛先をアドレスで指定する |
-p | ルールを適用するプロトコル名の指定する |
--sport | 送信元(source)のポート番号を指定する |
--dport | 宛先(destination)のポート番号を指定する |
-i | パケットを受信するためのインターフェースを指定する |
-o | パケットを送信するためのインターフェースを指定する |
-j | ターゲットを指定する |
ターゲット
-j
オプションで指定可能なターゲットは以下の通りです。
ターゲット | 説明 |
---|---|
ACCEPT | パケットの通過を許可する |
DROP | パケットを破棄する |
REJECT | パケットの通過を拒否し、ICMPメッセージを送信する |
DNAT | パケットの宛先アドレスを変換(DNAT)する |
SNAT | パケットの送信元アドレスを変換(SNAT)する (固定IPを使用) |
MASQUERADE | パケットの送信元アドレスを変換(NAPT)する (動的IPを使用) |
REDIRECT | 宛先IPアドレスをパケットを受信したインタフェースの最初のアドレスに変更する |
LOG | マッチしたパケットをカーネルログに記録する |
※ NAT(Network Address Translation)にはDNATとSNATの2種類があります。DNAT(Destination NAT)は、グローバルアドレスからプライベートアドレスに変換するNATです。一方、SNAT(Source NAT)は、プライベートアドレスからグローバルアドレスに変換するNATです。
※ IPマスカレード(IP Masquerade)は、NAPT(Network Address Port Translation)とも言います。IPアドレスの他に、ポート番号も変換します。NATでは、プライベートIPアドレスとグローバルIPアドレスの変換が1 : 1で行われます。LANに単一の端末しかない場合は問題ありませんが、これでは複数の端末が同時にインターネットに接続することができません(n : 1になってしまうため)。そこで、ポート番号も変換することで、送信元のプライベートIPアドレスはひとつであっても端末を識別することができます。これによって、同一LANに接続している複数の端末が一同にインターネットに接続することが可能となります。
ポリシー
ポリシー(policy)は、チェインに対してデフォルトで適用される振る舞いを定義するものです。
ポリシーには、ACCEPT(許可)とDROP(拒否)のどちらかを設定します。
それに対して、CentOS 7以降では、firewalldという新しいファイアウォール管理ツールが導入されています。firewalldについては後述します。
firewalld
CentOS7から採用されているファイアウォールです。
なお、firewalldの内部では実際にiptablesが動作しているため、iptablesの基本的な理解が重要となります。
ゾーン
firewalldには、ゾーン(zone) という概念があります。
firewalldでは、事前に定義されたゾーンにパケットフィルタリングのルールを適用します。
そして、そのゾーンに割り当てられたネットワークインターフェースを通じてパケットフィルタリングを行います。
ゾーンはデフォルトでは以下の9種類があります。ゾーンはシステム管理者が新たに作成することも可能です。
ゾーン | 説明 |
---|---|
trusted | 全ての(受信・送信)パケットを許可する |
drop | 全ての(受信・送信)パケットを破棄する |
block | 外部からのパケットは全て破棄する / 内部からのパケットは許可される |
dmz | sshのみ許可する |
external | sshのみ許可する (NAPTを有効化) |
public | sshとdhcpv6-clientのみ許可する |
work | ssh、dhcpv6-client、ipp-clientを許可する |
home | ssh、dhcpv6-client、ipp-client、mdns、samba-clientを許可する |
internal | ssh、dhcpv6-client、ipp-client、mdns、samba-clientを許可する |
firewall-cmdコマンド
firewall-cmd
は、 firewalld
の設定や操作を行うためのコマンドラインツールです。
オプション
オプション | 説明 |
---|---|
--zone= | ゾーンを指定する |
--add-service= | 指定したサービスを追加する |
--add-port= | 指定したポートを追加する (ポート番号/プロトコルという指定もできる) |
--remove-service= | 指定したサービスを削除する |
--remove-port= | 指定したポートを削除する |
--permanent | 設定を永続化する(再起動後も設定が保持される) |
--reload | リロードする (ルールを変更・削除した場合はリロードすることで適用される) |
--list-all | 許可したサービスとポートをすべて表示する |
--list-all-zones | 利用可能なすべてのゾーンを詳細情報付きで一覧表示する |
--list-services | 許可したサービスをすべて表示する |
--list-port | 許可したポートをすべて表示する |
--get-services | 利用可能なすべてのサービスを表示する |
--get-zones | 利用可能なゾーンを一覧表示する |
--get-default-zone | 新たなデフォルトゾーンを設定する (この設定は--permanentオプションがなくても再起動後も維持されます。) |
--get-active-zones | アクティブゾーン、もしくは、そのゾーンに割り当てられているインターフェースを一覧表示する |
--change-interface= | インターフェースを変更する |
--set-default-zone | 新たなデフォルトゾーンを設定する (--permanent無しでも設定は永続化します。) |
--set-target= | ターゲットを設定する |
--new-zone= | 新たなゾーンを作成する (作成後には$ firewall-cmd --runtime-to-permanentを実行してゾーンを永続化します。) |
まとめ
今回は、ファイアウォールについて解説しました。
複雑な概念や設定が登場しましたが、実際にファイルを見てみたり、コマンドの挙動を確かめてみることをオススメします。
記事の内容は理解できましたか?