1. 概要#
この記事ではファイアウォールの知識について説明します。ファイアウォールの役割、分類、性能、iptables および firewalld に焦点を当てています。この記事は長いため、読むのに一定の時間が必要です。
2. ファイアウォール#
2.1 ファイアウォールの役割#
コンピュータ分野において、ファイアウォールは情報セキュリティを保護するためのデバイスです。
ファイアウォールはデフォルト設定またはユーザー定義のルールに従って、データの転送を許可または制限します。
- 内部ネットワークのセキュリティを保護するためのデバイス
- ルールに基づいて保護を行う
- ユーザー定義のルール
- 外部アクセスを許可または制限する
2.2 ファイアウォールの分類#
論理的には:
- ホストファイアウォール:単一のホストを保護する(個人向け)
- ネットワークファイアウォール:ネットワークを保護し、ネットワークの境界に位置し、ファイアウォールの背後にはローカルエリアネットワークがある(団体向け)
物理的には:
- ハードウェアファイアウォール:ハードウェアレベルでファイアウォール機能を実現し、一部はソフトウェアに基づいており、性能が高く、コストも高い。例:Cisco、Huawei、天融信
- ソフトウェアファイアウォール:アプリケーションソフトウェアが一般的なハードウェアプラットフォーム上で動作するファイアウォールで、ハードウェアファイアウォールに比べて性能が低く、コストも低い。Linux システムには標準で搭載されており、直接使用できます。例:WAF(主にすべての HTTP データをキャッチするか、特定のルールを満たすセッションに使用され、クラウドプラットフォームでよく見られます)
2.3 ファイアウォールの性能#
- スループット
- 同時接続数
- 新規接続
- レイテンシ
- ジッター
3. iptables#
3.1 iptables とは#
netfilter/iptables は iptables と略され、Linux プラットフォーム上のパケットフィルタリングファイアウォールで、オープンソースであり、カーネルに組み込まれており、高コストの エンタープライズグレードのハードウェアファイアウォール の代替となります。
パケットフィルタリング、つまりファイアウォール
パケットリダイレクト、つまり転送
ネットワークアドレス変換、つまり 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 アドレスを変更して、どのインターフェースを経由して次のホップに送信するかを判断します。
私たちは、ファイアウォールの役割が通過するデータパケットに対してルールマッチングを行い、対応する「アクション」を実行することにあることを知っています。したがって、データパケットがこれらのゲートを通過する際、必ずこのゲートのルールに一致する必要があります。しかし、ゲートのルールは一つだけではなく、多くのルールが存在する可能性があります。私たちが 多くのルールを一つのゲートに配置する と、すべてのデータパケットが通過する際にマッチングを行う必要があるため、ルールチェーンが形成されます。この「チェーン」を「ルールチェーン」とも呼びます。
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 ルールの戦略 / 考え方#
-
ブラックリスト
拒否されていないトラフィックはすべて通過できる。この戦略では、管理者は新たに発生する攻撃に対して新しいルールを策定する必要があるため、推奨されません。
-
ホワイトリスト
許可されていないトラフィックはすべて拒否される。この戦略は比較的保守的で、必要に応じてホストが徐々にオープンされます。現在一般的にはホワイトリスト戦略が採用されており、推奨されます。
- テーブルを選択します。このテーブルはデータパケット の処理方法 を決定します。
- チェーンを選択します。このチェーンはデータパケット が通過する位置 を決定します。
- 適切な条件を選択します。この条件はデータパケット に対してどのような条件マッチを行うか を決定します。
- データパケットの処理アクションを選択し、相応のファイアウォールルールを策定します。
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 の概念と役割#
ゾーン(zone)は firewalld が事前に準備したファイアウォール戦略の集合であり、戦略テンプレート です。異なるアプリケーションシーンに応じて切り替えることができます。
4.3 FireWalld における zone の分類#
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 に重点を置き、コマンドが多く含まれていますが、すべてを記憶する必要はありません。