ウェブサイト検索

CentOS および Ubuntu で Firewalld をインストール、構成、使用する方法


Firewalld (ファイアウォール デーモン) は、ネットワーク (またはファイアウォール) ゾーンをサポートしてシステムのファイアウォールを動的に管理するためのiptables サービスの代替であり、構成を管理するための D-Bus インターフェイスを提供します。使用と設定が簡単で、現在はRHEL/CentOSFedora、およびその他のいくつかの Linux ディストリビューションのデフォルトのファイアウォール管理ツールです。

この記事では、firewalld を使用してシステム ファイアウォールを設定し、CentOS/RHEL 7Ubuntu で基本的なパケット フィルタリングを実装する方法について説明します。

Firewalld の基本

ファイアウォールは、次の 3 つの層で構成されます。

  • コア層: 構成とバックエンド (以下にリスト) の処理を担当します。
  • D-Bus インターフェイス: ファイアウォール設定を変更および作成する主な手段。
  • バックエンド: netfilter (ファイアウォールに使用されるネイティブ カーネル モジュール) と対話するため。これらには、iptables、ip6tables、ebtables、ipset、nft、linnftables が含まれます。ネットワーク管理者;そしてモジュール。

ネットワーク接続またはインターフェイスの信頼レベルを定義するネットワーク/ファイアウォール ゾーンを実装することにより、ファイアウォール ルールを管理します。サポートされているその他のファイアウォール機能には、サービス、直接構成 (生の iptables 構文を直接渡すために使用)、IPSets、および ICMP タイプが含まれます。

firewalld では、次の 2 種類の構成環境がサポートされています。

  • ランタイム構成。マシンが再起動されるか、firewalld サービスが再起動されるまでのみ有効です。
  • 永続的な設定は保存され、永続的に機能します。

firewall-cmd コマンド ライン ツールは、実行時構成と永続的な構成を管理するために使用されます。あるいは、firewall-config グラフィカル ユーザー インターフェイス (GUI) 構成ツールを使用してデーモンと対話することもできます。

さらに、firewalld は、他のローカル サービスやアプリケーションが root 権限で実行されている場合に、ファイアウォール ルールへの変更を直接要求するための明確に定義されたインターフェイスを提供します。

firewalld のグローバル設定ファイルは /etc/firewalld/firewalld.conf にあり、ファイアウォール機能は XML 形式で設定されます。

Firewalld の重要な機能を理解する

firewalld の中心的な機能は、ネットワーク/ファイアウォール ゾーンです。他のすべてのフィーチャはゾーンに制限されます。ファイアウォール ゾーンは、接続、インターフェイス、または送信元アドレス バインディングの信頼レベルを記述します。

デフォルト設定には、信頼できないゾーンから信頼できるゾーンまで、ドロップ、ブロック、パブリック、外部、DMZ、職場、ホーム、内部、信頼できるゾーンのデフォルトの信頼レベルに従って並べ替えられた多数の事前定義ゾーンが付属しています。これらは、/usr/lib/firewalld/zones ディレクトリに保存されているファイルに定義されています。

CLI クライアントを使用してカスタム ゾーンを設定または追加することも、/etc/firewalld/zones に既存のファイルからゾーン ファイルを作成またはコピーして編集することもできます。

firewalld におけるもう 1 つの重要な概念はサービスです。サービスはポートとプロトコルを使用して定義されます。これらの定義は、Web サーバーやリモート アクセス サービスなどの特定のネットワーク サービスを表します。サービスは、/usr/lib/firewalld/services/ または /etc/firewalld/services/ ディレクトリに保存されているファイルで定義されます。

iptables/ip6tables/ebtables の基本的な概念を理解している場合は、直接インターフェイス (または構成) を使用してファイアウォールに直接アクセスすることもできます。ただし、iptables の知識がない人でも、豊富な言語を使用して、IPv4 および IPv6 用のより複雑なファイアウォール ルールを作成できます。

Linux に Firewalld パッケージをインストールする方法

CentOS 7 では、firewalld パッケージがプリインストールされており、次のコマンドを使用して確認できます。

rpm -qa firewalld

Ubuntu 16.04 および 18.04 では、次のようにデフォルトのパッケージ マネージャーを使用してインストールできます。

sudo apt install firewalld

Linux で Firewalld サービスを管理する方法

Firewalld は、systemctl コマンドを介して管理できる通常の systemd サービスです。

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

firewalld サービスを開始した後、firewall-cmd ツールを使用して、デーモンが実行されているかどうかを確認することもできます (アクティブでない場合、このコマンドは「not」を出力します)ランニング ")。

sudo firewall-cmd --state

変更を永続的に保存した場合は、firewalld をリロードできます。これにより、ファイアウォール ルールがリロードされ、状態情報が保持されます。現在の永続的な構成が新しい実行時構成になります。

sudo firewall-cmd --reload

Firewalld でファイアウォール ゾーンを操作する方法

使用可能なすべてのファイアウォール ゾーンとサービスのリストを取得するには、次のコマンドを実行します。

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

デフォルト ゾーンは、別のゾーンに明示的に制限されていないすべてのファイアウォール機能に使用されるゾーンです。を実行すると、ネットワーク接続とインターフェイスのデフォルト ゾーン セットを取得できます。

sudo firewall-cmd --get-default-zone

デフォルト ゾーンを外部などに設定するには、次のコマンドを使用します。オプション --permanent を追加すると、構成が永続的に設定されます (または、永続的な構成環境からの情報のクエリが有効になります)。

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

次に、ゾーンにインターフェイスを追加する方法を見てみましょう。この例では、ワイヤレス ネットワーク アダプター (wlp1s0) をホーム エリアで使用されるゾーン ホームに追加する方法を示します。

sudo firewall-cmd --zone=home --add-interface=wlp1s0

インターフェイスは単一のゾーンにのみ追加できます。別のゾーンに移動するには、図のように --change-interface スイッチを使用するか、--remove-interface スイッチを使用して前のゾーンから削除してから追加します。新しいゾーンへ。

パブリック WI-FI ネットワークに接続したい場合は、次のようにワイヤレス インターフェイスをパブリック ゾーンに戻す必要があります。

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

同時に多くのゾーンを使用できます。インターフェイス、サービス、ポート、プロトコルなどの機能が有効になっているすべてのアクティブなゾーンのリストを取得するには、次のコマンドを実行します。

sudo firewall-cmd --get-active-zones

前の点に関連して、特定のゾーンに関する詳細情報、つまりゾーン内で追加または有効になっているすべての情報を確認したい場合は、次のコマンドのいずれかを使用します。

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

もう 1 つの便利なオプションは、永続ゾーンのターゲットを表示する --get-target です。ターゲットは、デフォルト、ACCEPT、DROP、REJECT のいずれかです。さまざまなゾーンのターゲットを確認できます。

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Firewalld でポートを開いたりブロックしたりする方法

ファイアウォールでポート (またはポートとプロトコルの組み合わせ) を開くには、--add-port オプションを使用してゾーンにポートを追加するだけです。ゾーンを明示的に指定しない場合、デフォルトのゾーンで有効になります。

次の例は、ポート 80443 を追加して、HTTP および HTTPS 経由の受信 Web トラフィックを許可する方法を示しています。 > プロトコル、それぞれ:

sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

次に、firewalld をリロードし、パブリック ゾーンで有効になっている機能をもう一度確認すると、追加したばかりのポートが表示されるはずです。

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

ファイアウォールでポートをブロックまたは閉じることも同様に簡単で、--remove-port オプションを使用してゾーンからポートを削除するだけです。たとえば、パブリック ゾーンのポート 80443 を閉じます。

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

ポートまたはポートとプロトコルの組み合わせを使用する代わりに、次のセクションで説明するように、ポートが割り当てられているサービス名を使用できます。

Firewalld でサービスを開いてブロックする方法

ファイアウォールでサービスを開くには、--add-service オプションを使用してサービスを有効にします。ゾーンを省略した場合は、デフォルトのゾーンが使用されます。

次のコマンドは、パブリック ゾーンで http サービスを永続的に有効にします。

sudo firewall-cmd --zone=public --permanent --add-service=http 
sudo firewall-cmd --reload 

--remove-service オプションを使用してサービスを無効にすることができます。

sudo firewall-cmd --zone=public --permanent --remove-service=http 
sudo firewall-cmd --reload 

Firewalld を使用して IP マスカレードを有効または無効にする方法

IP マスカレード (IPMASQ または MASQ とも呼ばれます) はNAT (ネットワーク アドレス変換) です。) Linux ネットワークのメカニズム。プライベート IP アドレスを持つネットワーク内のホストが、Linux サーバー (IPMASQ ゲートウェイ) に割り当てられたパブリック IP アドレスを使用してインターネットと通信できるようになります。

これは 1 対多のマッピングです。目に見えないホストからのトラフィックは、インターネット上の他のコンピュータには Linux サーバーから送信されているかのように見えます。

パブリック ゾーンなど、必要なゾーンで IP マスカレードを有効にすることができます。ただし、その前に、まずマスカレードが有効かどうかを確認してください (「いいえ」 は無効であることを意味し、「はい」 はそうでないことを意味します)。

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

マスカレードの一般的な使用例は、ポート転送を実行することです。リモート マシンから IP 10.20.1.3 を使用して内部ネットワークのホストに SSH 接続し、sshd デーモンがポート 5000 でリッスンしているとします。

次のコマンドを実行すると、Linux サーバー上のポート 22 へのすべての接続をターゲット ホスト上の目的のポートに転送できます。

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

ゾーンでマスカレードを無効にするには、--remove-masquerade スイッチを使用します。

sudo firewall-cmd --zone=public --remove-masquerade

Firewalld で IMCP メッセージを有効または無効にする方法

ICMP (インターネット制御メッセージ プロトコル) メッセージは、情報要求、情報要求に対する応答、またはエラー状態のいずれかです。

ファイアウォールで ICMP メッセージを有効または無効にできますが、その前に、サポートされているすべての icmp タイプを最初にリストします。

sudo firewall-cmd --get-icmptypes

必要なブロック タイプを追加または削除します。

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

--list-icmp-blocks スイッチを使用すると、ゾーンに追加されたすべての icmp タイプを表示できます。

sudo firewall-cmd --zone=home --list-icmp-blocks

直接インターフェイスを使用して生の iptables コマンドを渡す方法

firewall-cmd には、ファイアウォールに直接アクセスするための直接オプション (--direct) も用意されています。これは、iptables の基本的な知識がある人にとって役立ちます。

重要: 直接オプションは、上で説明した通常のfirewall-cmd オプションを使用できない場合の最後の手段としてのみ使用してください。

--add-rules スイッチを使用して、生の iptables ルールを渡す方法の例を次に示します。 --add-rule--remove-rule に置き換えることで、これらのルールを簡単に削除できます。

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

iptables の詳細については、このガイドを参照してください: Linux でサービスへのリモート アクセスを有効にするために iptables ファイアウォールをセットアップする方法。

iptables 構文に慣れていない場合は、次に説明するように、より複雑なファイアウォール ルールをわかりやすい方法で作成するために、firewalld の「リッチ言語」を選択できます。

Firewalld でリッチ言語を使用する方法

リッチ言語 (リッチ ルールとも呼ばれます) は、IPv4 および IPv6 のより複雑なファイアウォール ルールを追加するために使用されます。 iptables 構文の知識がなくても。

これは、これまで説明してきたゾーン機能 (サービス、ポート、icmp ブロック、マスカレード、およびフォワード ポート) を拡張します。送信元アドレスと宛先アドレス、ロギング、アクション、およびログとアクションの制限をサポートします。

--add-rich-rule は、リッチ ルールを追加するために使用されます。この例は、監査を使用してサービス http とログ 1 に対する新しいIPv4 接続とIPv6 接続を毎分許可する方法を示しています。

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

追加したルールを削除するには、--add-rich-rule オプションを --remove-rich-rule に置き換えます。

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

この機能により、特定の IP アドレスからのトラフィックをブロックまたは許可することもできます。次の例は、IP 10.20.1.20 からの接続を拒否する方法を示しています。

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Firewalld でパニック モードを有効または無効にする方法

パニック モードは、ファイアウォールの下での特別なモードであり、すべての受信パケットと送信パケットがドロップされ、アクティブな接続はアクティブ化されると期限切れになります。
ネットワーク環境に対する脅威が存在する緊急事態では、このモードを有効にすることができます。

パニック モードをクエリするには、--query-panic オプションを使用します。

sudo firewall-cmd --query-panic

パニック モードを有効にするには、--panic-on オプションを使用します。次のように ping コマンドを使用して、動作しているかどうかをテストできます。パケットがドロップされるため、www.google.com という名前を解決できず、エラーが表示されます。

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

パニック モードを無効にするには、--panic-off オプションを使用します。

sudo firewall-cmd --panic-off

ファイアウォールをロックダウンする方法

firewalld の基本で、ローカル アプリケーションまたはサービスが root 権限で実行されている場合、ファイアウォール構成を変更できると述べたことを思い出してください。ロックダウン ホワイトリストで指定することで、どのアプリケーションがファイアウォールの変更を要求できるかを制御できます。

この機能はデフォルトではオフになっていますが、 --lockdown-on または --lockdown スイッチを使用して有効または無効にできます。

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

ロックダウンを有効にすると、ロックダウン ホワイトリストに firewall-cmd が存在しない可能性があるため、メイン構成ファイルを編集してこの機能を有効または無効にすることをお勧めします。

sudo vim /etc/firewalld/firewalld.conf

パラメータ Lockdown を見つけて、その値を no (オフを意味する) から yes (オンを意味する) に変更します。

Lockdown=yes

この設定を永続的にするには、firewalld をリロードします。

sudo firewall-cmd --reload
まとめ

Firewalld は、iptables をバックエンドとして使用する iptables サービスの使いやすい代替品です。この記事では、firewalld パッケージをインストールする方法を示し、firewalld の重要な機能を説明し、実行時および永続的な構成環境でそれらを構成する方法について説明しました。

ご質問やご意見がございましたら、以下のコメントフォームよりお気軽にお問い合わせください。詳細については、firewalld マニュアル ページ (man firewalld) またはプロジェクト Web サイトの firewalld ドキュメントを参照してください。