CentOSとUbuntuでFirewalldをインストール、設定、使用する方法


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

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

Firewalldについての基本

Firewalld は3つのレイヤーで構成されています。

  • core layer: responsible for handling the configuration and the back ends (listed below).
  • D-Bus interface: the primary means of changing and creating the firewall configuration.
  • backends: for interacting with netfilter (the native kernel module used for firewalling). They include iptables, ip6tables, ebtables, ipset, nft, linnftables; networkmanager; and modules.

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

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

  • runtime configuration which is only effective until the machine has been rebooted or the firewalld service has been restarted
  • permanent configuration which is saved and works persistently.

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

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

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

重要なファイアウォール機能について

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 は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 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

デフォルトゾーンをたとえばexternalに設定するには、次のコマンドを使用します。オプション --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

別の便利なオプションは --get-target です。これはパーマネントゾーンのターゲットを表示します。ターゲットは、default、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 オプションを使ってゾーンに追加します。ゾーンを明示的に指定しないと、デフォルトゾーンで有効になります。

次の例は、ポート 80 443 を追加して HTTP HTTPS プロトコル

$ 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 オプションを使ってゾーンから削除するだけです。たとえば、パブリックゾーンのポート 80 443 を閉じる場合などです。

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

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

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

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

次のコマンドは、パブリックゾーンで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 ネットワークアドレス変換

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

パブリックゾーンなど、目的のゾーンでIPマスカレードを有効にできます。ただし、その前に、まずマスカレードが有効になっているかどうかを確認します( "no" は無効になり、 "yes" は無効になります)。

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

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

次のコマンドを発行して、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

ゾーンに追加されたすべてのicmpタイプを --list-icmp-blocks スイッチを使って見ることができます。

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

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

firewall-cmdには、ファイアウォールへのより直接的なアクセスを取得するための直接オプション( --direct )もあります。これはiptablesの基本的な知識がある人には便利です。

これは --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-block、マスカレードおよびforward-port)を拡張します。送信元アドレスと宛先アドレス、ロギング、アクション、およびログとアクションの制限をサポートしています。

--add-rich-rule はリッチルールを追加するために使用されます。次の例では、監査を使用して、1分あたり1つのサービスhttpおよびlog 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をロックダウンする方法

覚えておいてください、我々はfirewalldについての基本の下でローカルのアプリケーションやサービスがそれらがroot権限で走っているならファイアウォールの設定を変更することができることを述べました。ロックダウンホワイトリストに指定して、どのアプリケーションがファイアウォールの変更を要求できるかを制御できます。

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

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

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

$ sudo vim /etc/firewalld/firewalld.conf

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

Lockdown=yes

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

$ sudo firewall-cmd --reload

Firewalld はiptablesをバックエンドとして使用するiptablesサービスに代わる使いやすいツールです。この記事では、firewalldパッケージのインストール方法、firewalldの重要な機能について説明し、それらをランタイムおよび恒久的な設定環境で設定する方法について説明しました。

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

全著作権所有。 © Linux-Console.net • 2019-2022