1. 概要#
この記事ではファイアウォールの知識を紹介します。ファイアウォールの役割、分類、性能、iptables と firewalld について説明します。特に iptables と firewalld に重点を置いています。この記事は長いため、読むのに一定の時間が必要です。
2. ファイアウォール#
2.1 ファイアウォールの役割#
コンピュータ分野において、ファイアウォールは情報セキュリティを保護するためのデバイスです。
ファイアウォールは、デフォルト設定またはユーザーが定義したルールに従って、データの転送を許可または制限します。
- 内部ネットワークのセキュリティを保護するためのデバイス
- ルールに基づいて保護を行う
- ユーザーが定義したルール
- 外部アクセスを許可または制限する
2.2 ファイアウォールの分類#
論理的に:
- ホストファイアウォール:単一のホストを保護する(個人向け)
- ネットワークファイアウォール:ネットワークを保護し、ネットワークの境界に位置し、ファイアウォールの背後にはローカルエリアネットワークがある(集団向け)
物理的に:
- ハードウェアファイアウォール:ハードウェアレベルでファイアウォール機能を実現し、一部はソフトウェアに基づいており、性能が高く、コストが高い。例:Cisco、Huawei、天融信
- ソフトウェアファイアウォール:アプリケーションソフトウェアが一般的なハードウェアプラットフォーム上で動作するファイアウォールで、ハードウェアファイアウォールに比べて性能が低く、コストが低い。Linux システムには標準で搭載されており、直接使用できます。例:WAF(主にすべての HTTP データをキャッチするか、特定のルールを満たすセッションに使用され、クラウドプラットフォームでよく見られます)
2.3 ファイアウォールの性能#
- スループット
- 同時接続
- 新規接続
- レイテンシ
- ジッター
3. iptables#
3.1 iptables とは#
netfilter/iptables は iptables と略され、Linux プラットフォーム上のパケットフィルタリングファイアウォールであり、オープンソースで、カーネルに組み込まれており、高コストの エンタープライズグレードのハードウェアファイアウォール の代替として使用できます。
iptables は何を実現できるのか?
データパケットのフィルタリング、つまりファイアウォール
データパケットのリダイレクト、つまり転送
ネットワークアドレス変換、つまり NAT
- iptables はファイアウォールではなく、ファイアウォールユーザーエージェントです。
- ユーザーのセキュリティ設定を「セキュリティフレームワーク」に追加するために使用されます。
- 「セキュリティフレームワーク」がファイアウォールです。
- netfilter が「セキュリティフレームワーク」です。
- netfilter はカーネル空間にあり、Linux システムのコア層内部のデータパケット処理モジュールです。
- iptables はユーザー空間でカーネル空間の netfilter を操作するための コマンドラインツール です。
注意:iptables はファイアウォールのサービスではなく、実際のサービスはカーネルによって提供され、netfilter が真のファイアウォールです。
3.2 iptables の動作原理#
iptables はルールに従って動作し、ルールは運用者が定義した条件です。
ルールは一般に「データパケットヘッダーがこの条件に一致する場合、このデータパケットをこのように処理する」と定義されます。
ルールはカーネル空間の パケットフィルタリングテーブル に保存されます。
これらのルールはそれぞれ、送信元アドレス、宛先アドレス、転送プロトコル(TCP、UDP、ICMP)およびサービスタイプ(HTTP、FTP)などを指定します。
データパケットがルールに一致すると、iptables は ルールで定義された方法 に従ってこれらのデータパケットを処理します。たとえば、許可(ACCEPT)、拒否(REJECT)、破棄(DROP)などです。
注意:ファイアウォールの主な作業は iptables ルールの追加、変更、削除などです。
3.3 iptables におけるチェーンの概念#
netfilter が真のファイアウォールであり、カーネルの一部です。netfilter を機能させるためには、カーネル内に「ゲート」を設定する必要があります。出入りするデータパケットはこれらのゲートを通過し、検査され、放行条件に一致するものは許可され、阻止条件に一致するものはブロックされます。これにより input と output のゲートが生じ、iptables ではこれらのゲートを チェーン と呼びます。
上の図に基づき、ユーザーが送信するパケットの要求先サーバーアドレスが自ホストではなく他のサーバーである場合、パケットの転送を行う必要があります。この転送はカーネルがサポートする IP_FORWARD 機能であり、この時、私たちのホストはルーターの機能に似ており、「ルーティング前」、「転送」、「ルーティング後」に対応し、英語では「PREROUTING」、「FORWARD」、「POSTROUTING」となります。これが 5 つのチェーン です。
- INPUT:受信データパケットを処理
- OUTPUT:送信データパケットを処理
- FORWARD:転送データパケットを処理(主にデータパケットを他のネットワークインターフェースに転送します)。データパケットが自ホストを通過する際、ネットワークインターフェースはデータパケットをバッファに受信し、カーネルはパケットの IP ヘッダーを読み取り、パケットが自ホストに送信されていない場合(宛先 IP が自ホストでない場合)、カーネルは直接 forward チェーンに送信してマッチングを行います。マッチング後、forward ルールに一致すれば、postrouting を経由して次のホップまたは目的ホストに送信されます。
- PREROUTING:ルーティング選択を行う前にデータパケットを処理し、ファイアウォールに到達するデータパケットの目的 IP アドレスを変更して、ターゲットホストを判断します。
- POSTROUTING:ルーティング選択を行った後にデータパケットを処理し、ファイアウォールから出るデータパケットの送信元 IP アドレスを変更し、どのインターフェースを経由して次のホップに送信するかを判断します。
私たちは、ファイアウォールの役割が通過するデータパケットに対してルールマッチングを行い、対応する「アクション」を実行することにあることを知っています。したがって、データパケットがこれらのゲートを通過する際、必ずこのゲートのルールに一致する必要がありますが、ゲートのルールは 1 つだけではなく、多くのルールが存在する可能性があります。私たちが 多くのルールを 1 つのゲートに配置する と、すべてのデータパケットが通過する際にマッチングを行う必要があり、これによりマッチングすべきルールのチェーンが形成されます。「チェーン」を「ルールチェーン」とも呼びます。
3.4 iptables におけるテーブルの概念#
各「ルールチェーン」には一連のルールが設定されており、これにより 異なる「ルールチェーン」を特定の機能を実現するための集合分類に組み合わせる ことができます。この集合分類をテーブルと呼び、iptables には合計 5 つのテーブルがあります。
- filter:フィルタリング機能、データパケットを放行するかどうかを決定し、真のファイアウォールに属します。カーネルモジュール:iptables_filter
- nat:ネットワークアドレス変換機能、データパケット内の送信元、目的 IP アドレスまたはポートを変更します。カーネルモジュール:iptable_nat
- mangle:データパケットを再封装する機能、データパケットにタグを設定します。カーネルモジュール:iptable_mangle
- raw:データパケットを追跡するかどうかを決定します。カーネルモジュール:iptables_raw
- security:強制アクセス制御ルールを定義するかどうか。後から追加されました。
3.5 iptables におけるチェーンの関係#
ファイアウォールを適用する際は、テーブルを操作の入口として使用します。該当するテーブル内のルールチェーンにルールを追加することで特定の機能を実現できます。
どのテーブルがどのルールチェーンを含むかを知っておく必要があります。
- filter テーブルで使用できるチェーン:INPUT, FORWARD, OUTPUT
- nat テーブルで使用できるチェーン:PREROUTING, OUTPUT, POSTROUTING, INPUT
- mangle テーブルで使用できるチェーン:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
- raw テーブルで使用できるチェーン:PREROUTING, OUTPUT
注意:iptables におけるテーブルの優先順位:raw->mangle->nat->filter(高から低へ)
3.6 データパケットが iptables を通過する流れ#
3.7 iptables ルールのマッチング条件#
3.71 基本マッチング条件#
送信元アドレス、宛先アドレス、送信元ポート、宛先ポートなど
基本マッチングで使用するオプションと機能
-p 指定ルールプロトコル、tcp udp icmp all
-s 指定データパケットの送信元アドレス、ip hostname
-d 指定宛先アドレス
-i 入力インターフェース
-o 出力インターフェース
! 否定
基本マッチングの特徴は:拡張モジュールをロードする必要がなく、マッチングルールが有効です。
3.72 拡張マッチング条件#
拡張マッチングは、暗黙的マッチングと明示的マッチングに分かれます。
拡張マッチングの特徴は:拡張モジュールをロードする必要があり、マッチングルールが有効になります。
暗黙的マッチングの特徴:-p オプションでプロトコルを指定する際、同時に - m オプションで拡張モジュールを指定する必要がなく、手動で拡張モジュールをロードする必要もありません。
明示的マッチングの特徴:-m オプションを使用して呼び出す拡張モジュールの拡張メカニズムを指定し、手動で拡張モジュールをロードする必要があります。
暗黙的マッチングのオプションと機能:
-p マッチングプロトコル、例:tcp,udp
--sport マッチングパケットの送信元ポート、複数のポートを指定できますが、連続したポート範囲のみです。
--dport マッチングパケットの宛先ポート、複数のポートを指定できますが、連続したポート範囲のみです。
--tcp-flags mask comp マッチングパケット内のtcpプロトコルのフラグ
--icmp-type
0/0: echo reply 他のホストがpingを許可
8/0:echo request 他のホストへのpingを許可
明示的マッチングのオプションと機能:(-m)
- multiport:複数ポート
iptables -I INPUT -d 192.168.1.111 -p tcp -m multiport --dports 22,80 -j ACCEPT
//INPUTチェーンでローカルのtcp 22、tcp80ポートを開放
iptables -I OUTPUT -s 192.168.1.111 -p tcp -m multiport --sports 22,80 -j ACCEPT
//OUTPUTチェーンで送信元ポートtcp 22、tcp80を開放
- iprange:複数 IP アドレス
iptables -A INPUT -d 192.168.1.111 -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT
//INPUTチェーンで複数の送信元IPアドレスを開放
iptables -A OUTPUT -s 192.168.1.111 -p tcp --sport 23 -m iprange --dst-range 192.168.2.11-192.168.2.21 -j ACCEPT
//OUTPUTチェーンで複数の宛先IPアドレスを開放
- time:アクセス時間範囲を指定
iptables -A INPUT -d 192.168.1.111 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT
iptables -A OUTPUT -s 192.168.1.111 -p tcp --sport 901 -j ACCEPT
- string:文字列、パケット内のアプリケーション層データに対して文字列パターンマッチング検出を行う(アルゴリズムによって実現)
--algo {bm|kmp}:文字マッチング検索時に使用するアルゴリズム
--string "STRING": 検索する文字列
--hex-string “HEX-STRING”: 検索する文字を16進数形式にエンコードして指定
- connlimit:接続制限、各クライアント IP に対する同時接続数の制限
--connlimit-upto n 接続数がn以下の場合にマッチ
--connlimit-above n 接続数がnを超える場合にマッチ
- limit:パケット速度制限
- state:
- 自ホスト上のリクエストと応答間のデータパケットの状態を追跡します。状態は 5 種類あります:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED
--state state
NEW 新しい接続要求
ESTABLISHED 確立された接続
INVALID 認識できない接続
RELATED 関連する接続、現在の接続は新しい要求ですが、既存の接続に付随しています。
UNTRACKED 未追跡の接続
3.8 iptables ルールのアクション#
iptables ルールのアクションは一般にターゲットと呼ばれ、基本アクションと拡張アクションに分かれます。
- ACCEPT: データパケットを通過させる
- DROP: データパケットを直接破棄し、応答情報を返さない
- REJECT: データパケットの通過を拒否し、クライアントに応答情報を送信する
- SNAT: 送信元アドレス変換
- 説明 1:データパケットがネットワークインターフェースから送信される際、データパケット内の送信元アドレス部分を指定された IP に置き換え、受信側はデータパケットの送信元が置き換えられた IP ホストであると認識し、応答を返す際も置き換えられた IP アドレスを使用します。
- 説明 2:データパケットの送信元アドレスを変更し、内部ネットワークのデータパケットがファイアウォールに到達すると、ファイアウォールは外部アドレスでデータパケットの送信元 IP アドレスを置き換え(目的 IP アドレスは変わらない)、ネットワーク内部のホストがネットワーク外部のホストと通信できるようにします。
- MASQUERADE: マスカレード、SNAT に似ており、動的で一時的に変わる IP アドレスに適用されます。家庭用のブロードバンドなどで使用されます。データを送信するネットワークインターフェースの IP を使用して送信元 IP を置き換え、IP アドレスが不固定な場合に使用します。
- DNAT: 目的アドレス変換
- 説明 1:データパケットがネットワークインターフェースから発信される際、データパケット内の目的 IP を変更します。A にアクセスしようとすると、ゲートウェイが DNAT を行い、すべての A へのアクセスデータパケットの目的 IP アドレスを B に変更します。実際には最終的に B にアクセスします。
- 説明 2:データパケットの目的アドレスを変更し、ファイアウォールが外部からのデータパケットを受信すると、そのデータパケットの目的 IP アドレスを置き換え(送信元 IP アドレスは変わらない)、内部ネットワークのホストに再転送します。
- REDIRECT: ローカルでポートマッピングを行う
- LOG:/var/log/message ファイルにログ情報を記録し、次のルールにデータパケットを渡します。
注意:ルーティングは目的アドレスに基づいて行われるため、DNAT は PREROUTING チェーンで行われ、SNAT はデータパケットが発信される際に行われるため、POSTROUTING チェーンで行われます。
3.9 iptables ルールの戦略 / 思考#
-
ブラックリスト
拒否されていないトラフィックはすべて通過可能であり、この戦略では管理者は新たに発生する攻撃に対して新しいルールを策定する必要があるため、推奨されません。
-
ホワイトリスト
許可されていないトラフィックはすべて拒否され、この戦略は比較的保守的であり、必要に応じてホストを徐々に開放します。現在では一般的にホワイトリスト戦略が採用され、推奨されます。
iptables ルール策定の思考:
- テーブルを選択します。このテーブルはデータパケット 処理の方法 を決定します。
- チェーンを選択します。このチェーンはデータパケット が通過する位置 を決定します。
- 適切な条件を選択します。この条件はデータパケット に対してどのような条件マッチングを行うか を決定します。
- データパケットを処理するアクションを選択し、相応のファイアウォールルールを策定します。
3.10 iptables の基本構文#
iptables [-t テーブル名] 管理オプション [チェーン名] [条件マッチング] [-j ターゲットアクションまたはジャンプ]
テーブル名を指定しない場合、デフォルトで filter テーブルを示し、チェーン名を指定しない場合、デフォルトでそのテーブル内のすべてのチェーンを示します。ルールチェーンのデフォルト戦略を設定しない限り、マッチング条件を指定する必要があります。
3.11 iptables の一般的なコマンド#
パラメータ | 作用 |
---|---|
-P | デフォルト戦略を設定:iptables -P INPUT (DROP|ACCEPT) |
-F | ルールチェーンをクリア |
-L | ルールチェーンを表示 |
-A | ルールチェーンの末尾に新しいルールを追加 |
-I num | ルールチェーンの先頭に新しいルールを追加 |
-D num | 特定のルールを削除 |
-s | 送信元アドレス IP/MASK をマッチング、感嘆符 "!" はこの IP 以外を示します。 |
-d | 宛先アドレスをマッチング |
-i インターフェース名 | このネットワークインターフェースから流入するデータをマッチング |
-o インターフェース名 | このネットワークインターフェースから流出するデータをマッチング |
-p | プロトコルをマッチング、例:tcp,udp,icmp |
--dport num | 宛先ポート番号をマッチング |
--sport num | 送信元ポート番号をマッチング |
3.11.1 iptables チェーン管理#
-N, --new-chain chain:カスタムルールチェーンを新規作成
-X, --delete-chain [chain]:ユーザー定義の参照カウントが0の空のチェーンを削除
-F, --flush [chain]:指定されたルールチェーンのルールをクリア
-E, --rename-chain old-chain new-chain:チェーンの名前を変更;
-Z, --zero [chain [rulenum]]:カウンターをゼロに設定します。注意:各ルールには2つのカウンターがあります(packets:このルールにマッチしたすべてのパケットの数
bytes:このルールにマッチしたすべてのパケットのサイズの合計)
-P, --policy chain target チェーンのポリシーを設定(ACCEPT|DROP|REJECT)
3.11.2 iptables ルール管理#
-A, --append chain rule-specification:指定されたチェーンの末尾に新しいルールを追加
-I, --insert chain [rulenum] rule-specification:指定されたチェーンの指定位置に新しいルールを挿入、デフォルトは先頭
-R, --replace chain rulenum rule-specification:指定されたルールを新しいルールに置き換え
-D, --delete chain rulenum:ルール番号に基づいてルールを削除
-D, --delete chain rule-specification:ルール自体に基づいてルールを削除
3.11.3 iptables ルール表示#
-L, --list [chain]:ルールをリスト表示
-v, --verbose:詳細情報
-vv より詳細な情報
-n, --numeric:ホストアドレスとポート番号を数字形式で表示
-x, --exact:カウンターの正確な値を表示し、丸められたデータではなく
--line-numbers:ルールをリスト表示する際に、チェーン内の対応する番号を表示
-S, --list-rules [chain]:指定されたチェーンのすべてのルールを表示
3.12 iptables の適用例#
iptables-services のインストール / 設定:
sudo apt-get install iptables* //インストール
sudo systemctl start iptables.service //起動
sudo systemctl enable iptables.service //起動時に自動起動を設定
sudo rpm -ql iptables-services //設定ファイルを表示
iptables-save > /etc/sysconfig/iptables //ルールを保存
iptables-restore < /etc/sysconfig/iptables //再読み込み
基本設定:
iptables -F
//既存のルールを削除
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
//デフォルトチェーンのポリシーを設定
ホワイトリストの設定:
iptables -t filter -F
iptables -P INPUT DROP
iptables -t filter -I INPUT -p tcp --dport=22 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport=80 -j ACCEPT
ブラックリストの設定:
iptables -P INPUT ACCEPT
iptables -F
iptables -t filter -A INPUT -s 192.168.2.20/24 -p tcp --dport 80 -j DROP
lo を通じてローカルデータにアクセス:
iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
//ローカルループバックインターフェースを通じてローカルにアクセスを許可
接続状態の生成を許可:
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
3.12.1 filter テーブルの適用例#
yum -y install httpd vsftpd sshd
systemctl start httpd vsftpd sshd
iptables -t filter -F
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j REJECT
iptables の標準フロー:
iptables -F
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT #内部ネットワークの任意のアクセスを許可
iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 21 -j ACCEPT
iptables -A INPUT -j REJECT
modprobe nf_conntrack_ftp
iptables-save > /etc/sysconfig/iptables
vim /etc/sysconfig/iptables-config
// IPTABLES_MODULES="nf_conntrack_ftp
4. firewalld#
4.1 firewalld とは#
FireWalld は iptables サービス部分を置き換えるもので、基盤として iptables をファイアウォールルール管理の入口として使用します。
- 動的ファイアウォール
- netfilter ユーザー空間を管理するためのツール
- iptables コマンドを呼び出します。
4.2 ゾーンの概念と役割#
ゾーン(zone)は firewalld が事前に準備したファイアウォール戦略の集合であり、つまり 戦略テンプレート です。異なるアプリケーションシーンに応じて切り替えることができます。
4.3 FireWalld におけるゾーンの分類#
FireWalld の異なるゾーン間の違いは、各ゾーンがデータパケットに対するデフォルトの動作が異なることです。
Firewalld にはデフォルトで 9 つのゾーンがあり、それぞれ以下の通りです:
- block(拒否)
- dmz(非軍事化)
- drop(破棄)
- external(外部)
- home(家庭)
- internal(内部)
- public(公開) Firewalld のデフォルトゾーン
- trusted(信頼)
- work(作業領域)
4.4 Firewalld の構文#
firewall-cmd [--zone=zone] アクション [--permanent]
注意:--zone オプションを指定しない場合、現在のデフォルトゾーンとなり、--permanent オプションは変更をゾーン設定ファイルに書き込むかどうかを示します。
4.5 Firewalld の一般的なコマンド#
パラメータ | 作用 |
---|---|
--get-default-zone | デフォルトのゾーン名を照会 |
--set-default-zone=<ゾーン名> | デフォルトのゾーンを設定し、永久に有効にする |
--get-zones | 利用可能なゾーンを表示 |
--get-services | 事前に定義されたサービスを表示 |
--get-active-zones | 現在使用中のゾーンとネットワークインターフェース名を表示 |
--add-source= | この IP またはサブネットからのトラフィックを指定されたゾーンに導く |
--remove-source= | この IP またはサブネットからのトラフィックを指定されたゾーンに導かないようにする |
--add-interface=<ネットワークインターフェース名> | このネットワークインターフェースからのすべてのトラフィックを指定されたゾーンに導く |
--change-interface=<ネットワークインターフェース名> | 特定のネットワークインターフェースを他のゾーンに関連付ける |
--list-all | 現在のゾーンのネットワークインターフェース設定パラメータ、リソース、ポート、サービスなどの情報を表示 |
--list-all-zones | すべてのゾーンのネットワークインターフェース設定パラメータ、リソース、ポート、サービスなどの情報を表示 |
--add-service=<サービス名> | デフォルトゾーンでそのサービスのトラフィックを許可する |
--add-port=<ポート番号 / プロトコル> | デフォルトゾーンでそのポートのトラフィックを許可する |
--remove-service=<サービス名> | デフォルトゾーンでそのサービスのトラフィックを許可しない |
--remove-port=<ポート番号 / プロトコル> | デフォルトゾーンでそのポートのトラフィックを許可しない |
--reload | 「永久に有効な」設定ルールを即座に有効にし、現在の設定を上書きします。 |
4.6 Firewall の状態#
firewall-cmd --state
running
//状態を確認
firewall-cmd --reload
success
//ファイアウォールを再読み込みし、ユーザー接続を中断し、仮設定をクリアし、設定ファイルの永久設定を読み込みます。
firewall-cmd --complete-reload
success
//ファイアウォールを再読み込みし、ユーザー接続を中断しない(ファイアウォールに重大な障害が発生した場合に使用)
firewall-cmd --panic-on
//緊急モード、すべてのネットワーク接続を強制的に切断
4.7 FireWalld のアクション#
4.7.1 アクションでの操作確認#
firewall-cmd xxx
--get-icmptypes //サポートされているすべてのICMPタイプを確認
--get-zones //すべてのゾーンを確認
--get-default-zone //現在のデフォルトゾーンを確認
--get-active-zones //現在使用中のゾーンを確認
--get-services //現在のゾーンがサポートするサービスを確認
--list-services //現在のゾーンで開放されているサービスのリストを確認
--list-services --zone=home //指定したゾーンで開放されているサービスのリストを確認
--list-all //デフォルトゾーン内のすべての設定を確認、iptables -L -nに類似
--list-all-zones //すべてのゾーンのすべての設定を確認
4.7.2 ゾーンの変更操作#
firewall-cmd xxx
--set-default-zone=work //デフォルトのゾーンを変更
4.7.3 ルールの新規作成#
firewall-cmd xxx
--add-interface=eth0 //ネットワークインターフェースをデフォルトのゾーンに追加
--add-port=12222/tcp --permanent //ポートをゾーンの開放リストに追加
--add-port=5000-10000/tcp --permanent //ポート範囲を開放リストに追加
--add-service=ftp --permanent //サービスをゾーンの開放リストに追加(サービス名はこのゾーンがサポートするサービスリストの名前と一致する必要があります)
--add-source=192.168.1.1 //ソースアドレスのトラフィックを指定されたゾーンに追加
--add-masquerade //SNAT(送信元アドレス変換)を有効にする
4.7.4 ルールの削除#
firewall-cmd xxx
--remove-service=http //homeゾーン内でhttpサービスを開放リストから削除
--remove-interface=eth0 //デフォルトのゾーン内からネットワークインターフェースを削除
--remove-source=192.168.1.1 //ソースアドレスのトラフィックを指定されたゾーンから削除
4.7.5 ルールの変更#
firewall-cmd xxx
--change-interface=eth1 //指定されたインターフェースを他のゾーンに変更
4.7.6 ルールの確認#
firewall-cmd xxx
--query-masquerade //SNATの状態を確認
--query-interface=eth0 //このネットワークインターフェースがこのゾーンに存在するかを確認
4.7.7 ポート転送#
ポート転送は、指定されたアドレスが指定されたポートにアクセスする際に、トラフィックを指定されたアドレスの指定されたポートに転送することができます。転送の目的が IP を指定しない場合はデフォルトでローカルになりますが、IP を指定してポートを指定しない場合はデフォルトで送信元ポートを使用します。
//firewalldを通じてSNATを実現
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
//80ポートのトラフィックを8080に転送
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
//80ポートのトラフィックを
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.20
//削除
firewall-cmd --remove-forwardport=port=80:proto=tcp:toaddr=192.168.2.20 --permanent
//80ポートのトラフィックを192.168.2.20の8080ポートに転送
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.20:toport=8080
5. iptables と firewalld の比較#
- firewalld は iptables のフロントエンドコントローラーです。
- iptables は 静的ファイアウォール であり、任意の戦略変更にはすべての戦略を再読み込みする必要があり、既存の接続が失われます。
- firewalld は 動的ファイアウォール であり、任意の戦略変更にはすべての戦略を再読み込みする必要がなく、変更部分を iptables に保存し、既存の接続を失いません。
- firewalld はデーモンとサービスを提供し、基盤として iptables を使用します。
- firewalld は使用上、iptables よりも人間に優しく、「5 つのテーブル 5 つのチェーン」を理解していなくても、TCP/IP プロトコルを理解していなくても大部分の機能を実現できます。
- firewalld はチェーンルールの代わりにゾーンとサービスを使用します。
- firewalld はデフォルトで拒否されており、設定後に許可する必要があります。
- iptables はデフォルトで許可されており、拒否する必要がある場合に制限します。
6. まとめ#
この記事では、ファイアウォールに関するいくつかの内容を記録しました。ファイアウォールの概念、iptables と firewalld について、特に iptables と firewalld に重点を置き、多くのコマンドを紹介しましたが、すべてを記憶する必要はありません。