FirewallDでファイアウォールを設定する方法

ファイアウォールで保護 Linuxカーネルのnetfilterフレームワークのフロントエンドとして機能するファイアウォール管理ツールです。 これは強力なゾーンベースのファイアウォールであり、ネットワークトラフィックを監視し、一連の定義済みルールを適用して着信/発信トラフィックを制御します。

FirewalldはPythonで書かれており、systemdの一部です。 IPv4ネットワークとIPv6ネットワークの両方をサポートします。

主な利点は、サービスを再起動せずに変更を実行でき、D-Busインターフェイス構成を使用して簡単に管理できることです。

このチュートリアルでは、 LinuxでFirewalledを設定する とその基本的な概念。

基本概念

Firewalldは、次の名前の2つのレイヤーで構成されます D-Bus 層。 コアレイヤーは構成とバックエンドを処理します。 D-Busレイヤーは、ファイアウォール構成の変更と作成を担当します。

Firewalldはサポートします ゾーンサービス。 ゾーンは、サーバーに接続されているネットワークインターフェイスの信頼レベルに基づいて、サーバーに許可するトラフィックの種類を管理する事前定義された一連のルールです。 これは、ネットワークインターフェイスをゾーンに割り当てることができることを意味します。 サービスを使用すると、ポート、モジュール、および宛先アドレスを構成できます。

Firewall-cmdは、実行時および永続的な構成を管理するために使用されるコマンドラインツールです。

事前定義されたファイアウォールゾーン

デフォルトゾーン / usr / lib / firewalld / zones /という名前のディレクトリに保存されます。 以下は、Firewalldがさまざまな信頼レベル(信頼できるものから信頼できないものまで)に従って提供する事前定義されたゾーンの一部です。

信頼できる:このゾーンはすべての接続を受け入れ、ネットワーク上のすべてのコンピューターを信頼します。

公衆: 信頼できない公共エリアで雇用されています。 他のコンピューターへの信頼は最小限ですが、選択されたインバウンド接続は許可されます。

落とす: すべてのインバウンドまたはインバウンドトラフィックがドロップされます。 アウトバウンドトラフィックのみが許可されます。

外部の:システムがNATマスカレードをオンにしたルーターとして機能する場合に外部ネットワークに実装されます。 選択したインバウンド接続のみが許可されます。

内部: システムがNATマスカレードを有効にしたルーターとして機能する内部ネットワークにのみ実装されます。 他のPCは信頼されており、一部のインバウンド接続のみがアクセスを許可されます。

ブロック:ブロックゾーンは、IPv4の場合はicmp-host-prohibitedメッセージ、IPv6nの場合はicmp6-adm-prohibitedのメッセージですべての着信接続を拒否します。 ここでは、発信接続のみが許可されます。

dmz: コンピュータネットワーク上の残りのシステムへのアクセスが制限されている非武装地帯(DMZ)上のシステムまたはPCに使用されます。 デフォルトでは、SSHトラフィックのみが許可されます。

仕事:作業ゾーンは、作業システムまたはPC用に実装されています。 ネットワーク上の他のすべてのコンピューターには一般的なレベルの信頼があり、選択されたインバウンド接続のみが許可されます。

家: ホームゾーンはホームシステムによって使用され、ワー​​クゾーンと同様に、すべてのPCは一般的に信頼されており、選択された着信接続のみが許可されます。

ファイアウォールのランタイムと永続的な設定

実際の実行構成は実行時構成です。 これは一時的なものであり、再起動後も存続しません。 サーバーを再起動すると、Firewalldは永続的な構成をロードします。永続的な構成は後でランタイム構成に変換されます。

Firewalld構成に変更が加えられると、それらはランタイム構成に直接適用されます。 変更を永続化するには、 --permanent オプション。

Firewalldのインストールと有効化

Firewalldは、Red Hat、CentOS、 Fedora、SuseLinux。 Debian / Ubuntuでは、パッケージリポジトリで利用できます。

Redhat / CentOS

Firewalldがインストールされていないことがわかった場合は、次のコマンドを実行してインストールします。

$ sudo yum install firewalld

Debian / Ubuntu

$ sudo apt install firewalld

インストールすると、ステータスを確認できます。

$ sudo systemctl status firewalld

Firewalldが稼働中の場合、出力はアクティブ(実行中)を示します。

または、次の方法で実行状態を確認できます。

$ sudo firewall-cmd state

インストールしたら、次のコマンドを実行してFirewalldを起動して有効にします。

$ sudo systemctl start firewalld

システム起動時にFirewalldを有効にし、次のように入力します。

$ sudo systemctl enable firewalld

Firewalldを一時的に停止するには、次のように入力します。

$ sudo systemctl stop firewalld

Firewalldが起動時に起動しないようにするには、次のように入力します。

$ sudo systemctl disable firewalld

ファイアウォールゾーンの処理

Firewalldゾーンの処理方法を確認しましょう。

1.1。 デフォルトでは、パブリックゾーンがデフォルトのFirewalldゾーンです。 これを確認するには、次のコマンドを実行します。

$ sudo firewall-cmd --get-default-zone

出力:

public

2.2。 すべてのゾーンの概要を取得するには、次のコマンドを実行します。

$ sudo firewall-cmd --get-zones

これにより、すべてのゾーンが一覧表示されます。

出力:

block dmz drop external home internal public trusted work

3.3。 デフォルトでは、ネットワークインターフェイスは通常デフォルトゾーンに接続されています。 ネットワークインターフェイスで使用されているゾーンを確認するには、次のコマンドを実行します。

$ sudo firewall-cmd --get-active-zones

この場合、アクティブなネットワークインターフェイスが1つあります- enp0s3 -これはデフォルトゾーンに割り当てられています。

インターフェイスに割り当てられたfirewalldゾーンを一覧表示します

4.4。 ゾーンのすべての構成を表示するには、

パブリックゾーンの構成を表示するには、次のように入力します。

$ sudo firewall-cmd --zone=public --list-all

デフォルトゾーンの概要を表示するには、次のように入力します。

$ sudo firewall-cmd --list-all

5.5。 すべてのFirewalldゾーンの構成を一覧表示するには、次のように入力します。

$ sudo firewall-cmd --list-all-zones

デフォルトゾーンを変更する

すべてのネットワークインターフェイスに割り当てられるデフォルトのゾーンは public。 別のゾーンに設定できます。

6.6。 デフォルトゾーンを別のゾーンに変更するには、次のように入力します。

$ sudo firewall-cmd --set-default-zone=trusted

ここでは、デフォルトゾーンをに変更しました trusted ゾーン。

インターフェイスに割り当てられたゾーンを変更します

ネットワークインターフェイスのゾーンを別のゾーンに変更するには、 --zone オプション。

7。 インターフェイスのゾーンを変更するには enp0s3trusted、 タイプ:

$ sudo firewall-cmd --zone=home --change-interface=enp0s3

ファイアウォールで保護されたサービス

ファイアウォールで保護されたサービスファイルは、 /usr/lib/firewalld/services xmlファイル形式のパス。 それらは何百もあり、lsコマンドを使用してリストします。

$ ls /usr/lib/firewalld/services

にとって example MongoDBサービスファイルは次のようになります。

$ sudo vim /usr/lib/firewalld/services/mongodb.xml

MongoDBxmlサービスファイルMongoDBxmlサービスファイル

デフォルトでは、dhcp-clientおよびsshサービスがファイアウォールで許可されています。 出力から、httpsも許可されていることに注意してください。

新しいFirewalldサービスを作成するには、既存のサービスファイルをコピーして、新しいサービス名を付けます。 次に、そのxmlファイルを定義します。

ファイアウォールで最も広く使用されている機能の1つは、ポートを開き、サーバーへの通過を許可することです。 Firewalldには事前定義されたサービスがあります。

8.8。 すべてのサービスを表示するには、次のように入力します。

$ sudo firewall-cmd --get-services

9.9。 インバウンドトラフィックを許可する

mssqlサービスのインバウンドトラフィックを許可するには、次のように入力します。

$ sudo firewall-cmd --zone=public --add-service=mssql

10.10。 追加されたサービスを確認するには:

$ sudo firewall-cmd --zone=public --list-services

出力:

dhcpv6-client mssql ssh

11.11。 再起動後も変更を保持するには、 --permanent 次のようにオプション。

$ sudo firewall-cmd --zone=public --add-service=https --permanent

12.12。 変更を有効にするには、firewalldをリロードします

$ sudo firewall-cmd --reload

13.13。 ファイアウォールからサービスを削除するには、 --remove オプション

$ sudo firewall-cmd --zone=public --remove-service=https --permanent

Firewalld構成からサービスを削除するFirewalld構成からサービスを削除する

上記のコマンドは、HTTPSサービスをパブリックゾーンから完全に削除します。

14。 Firewalldのポートを開くには

たとえば、ユーザーがリモートシステムのデスクトップにリモート接続できるようにするXrdpサービスは、TCPポート3389に関連付けられています。

パブリックゾーンでポートを開くには、次のように入力します。

$ sudo firewall-cmd --zone=public --add-port=3389/tcp

Firewalld構成全体でポートを許可するポートを開く

変更を有効にするには、Firewalldをリロードすることを忘れないでください。

Firewalldによるポートフォワーディング

15。 パブリックゾーンのマスカレードを有効にするには

あるポートから次のポートまたはアドレスにトラフィックを転送するには、最初にオンにするか、を呼び出して優先ゾーンのマスカレードを有効にします。 --add-masquerade オプション。

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

16.16。 同じサーバー上のあるポートから別のポートにトラフィックを転送する

特定のポートに到達する着信トラフィックが同じサーバー上の別のポートにリダイレクトされるようにFirewalldを構成すること。

ポート80に到達するトラフィックをパブリックゾーンのポート6000に転送するには、次のように入力します。

$ sudo firewall-cmd --zone=public--add-forward-port=port=80:proto=tcp:toport=6000

17.17。 別のサーバーの別のポートにトラフィックを転送する

または、あるポートから通過するトラフィックを、別のサーバーにある別のポートにリダイレクトすることもできます。

ポート80を介してトラフィックを渡すには、IPアドレスが192.168.10.10である別のサーバーのポート8080にリダイレクトされます。次のように入力します。

$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.10.10

着信トラフィックを管理するためのルールを設定する

特定のソースからの着信トラフィックを許可するには --add-source オプション。

トラステッドゾーンで192.168.10.0/24からのすべての着信トラフィックを許可するには、次のように入力します。

$ sudo firewall-cmd --zone=trusted --add-source=192.168.10.0/24 --permanent

新しいゾーンを作成する

独自のゾーンを作成し、ルールセットを追加できます。 ほとんどの場合、事前定義されたゾーンで十分です。 Webサーバー用の新しいゾーンを作成し、特定のサービス/インターフェイスを許可しましょう。

webzoneという名前の新しいゾーンを作成します。

$ sudo firewall-cmd --permanent --new-zone=webzone

パーマネントゾーンを一覧表示して確認し、次のように入力します。

$ sudo firewall-cmd --permanent --get-zones

出力:

block dmz drop external home internal public trusted webzone work

アクティブな構成を有効にするには、次のように入力します。

$ sudo firewall-cmd --reload

ssh、http、httpsサービスを開き、Webゾーンでインターフェイスを割り当てるには、次のコマンドを実行します。

$ sudo firewall-cmd --zone=webzone --add-service=ssh
$ sudo firewall-cmd --zone=webzone --add-service=http
$ sudo firewall-cmd --zone=webzone --add-service=https
$ sudo firewall-cmd --zone=webzone --add-interface=eth0

Webゾーンの構成を表示するには、次のように入力します。

$ sudo firewall-cmd --zone=webzone --list-all

出力:

webzone
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

豊富なルール

リッチルールは、より複雑なファイアウォールルールを設定するのに役立ちます。

たとえば、送信元アドレスのIPアドレスと特定のポートへのアクセスを有効にするには、次のように入力します。

$ sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="23.92.31.51/32" port port=21 protocol="tcp" accept"

概要

このチュートリアルでは、LinuxでFirewalldを構成する方法とその基本的な概念を学びました。

フィードバックや提案があれば、以下にコメントしてください。