ファイアウォールは、着信および発信ネットワークトラフィックを監視およびフィルタリングするための方法です。これは、特定のトラフィックを許可するかブロックするかを決定する一連のセキュリティルールを定義することによって機能します。適切に構成されたファイアウォールは、システム全体のセキュリティの最も重要な側面の1つです。
CentOS 8には、firewalldという名前のファイアウォールデーモンが付属しています。これは、システムのファイアウォールを動的に管理できるD-Busインターフェースを備えた完全なソリューションです。
このチュートリアルでは、CentOS8でファイアウォールを構成および管理する方法について説明します。FirewallDの基本的な概念についても説明します。
前提条件#
ファイアウォールサービスを構成するには、rootまたはsudo権限を持つユーザーとしてログに記録する必要があります。
基本的なファイアウォールの概念#
Firewalldは、ゾーンとサービスの概念を使用しています。構成するゾーンとサービスに基づいて、システムとの間で許可またはブロックされるトラフィックを制御できます。
Firewalldは、firewall-cmd
を使用して構成および管理できます。 コマンドラインユーティリティ。
CentOS 8では、firewalldデーモンのデフォルトのファイアウォールバックエンドとして、iptablesがnftablesに置き換えられています。
Firewalldゾーン#
ゾーンは、コンピューターが接続されているネットワークの信頼レベルを指定する事前定義されたルールのセットです。ネットワークインターフェイスとソースをゾーンに割り当てることができます。
以下は、FirewallDによって提供されるゾーンで、ゾーンの信頼レベルに従って、信頼できないものから信頼できるものへと並べられています。
- ドロップ :すべての着信接続は通知なしにドロップされます。発信接続のみが許可されます。
- ブロック :すべての着信接続は
icmp-host-prohibited
で拒否されますIPv4
のメッセージ およびicmp6-adm-prohibited
IPv6nの場合。発信接続のみが許可されます。 - 公開 :信頼できない公共エリアで使用します。ネットワーク上の他のコンピューターを信頼していませんが、選択した着信接続を許可することはできます。
- 外部 :システムがゲートウェイまたはルーターとして機能する場合に、NATマスカレードが有効になっている外部ネットワークで使用します。選択した着信接続のみが許可されます。
- 内部 :システムがゲートウェイまたはルーターとして機能する場合に、内部ネットワークで使用します。ネットワーク上の他のシステムは一般的に信頼されています。選択した着信接続のみが許可されます。
- dmz :非武装地帯にあり、ネットワークの他の部分へのアクセスが制限されているコンピューターに使用されます。選択した着信接続のみが許可されます。
- 仕事 :作業機械に使用されます。ネットワーク上の他のコンピューターは一般的に信頼されています。選択した着信接続のみが許可されます。
- 自宅 :家庭用機械に使用されます。ネットワーク上の他のコンピューターは一般的に信頼されています。選択した着信接続のみが許可されます。
- 信頼できる :すべてのネットワーク接続が受け入れられます。ネットワーク内のすべてのコンピューターを信頼します。
ファイアウォールサービス#
Firewalldサービスは、ゾーン内に適用され、特定のサービスの着信トラフィックを許可するために必要な設定を定義する事前定義されたルールです。このサービスを使用すると、1つのステップで複数のタスクを簡単に実行できます。
たとえば、サービスには、ポートのオープン、トラフィックの転送などに関する定義を含めることができます。
Firefoxのランタイムと永続的な設定#
Firewalldは、ランタイム構成と永続構成の2つの別個の構成セットを使用します。
ランタイム構成は実際の実行構成であり、再起動しても保持されません。 Firewalldデーモンが起動すると、永続的な構成が読み込まれ、それがランタイム構成になります。
デフォルトでは、firewall-cmd
を使用してFirewalld構成に変更を加える場合 ユーティリティの場合、変更はランタイム構成に適用されます。変更を永続的にするには、--permanent
を追加します コマンドのオプション。
両方の構成セットに変更を適用するには、次の2つの方法のいずれかを使用できます。
-
ランタイム構成を変更し、永続的にします:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
永続的な構成を変更し、firewalldデーモンをリロードします:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
CentOS 8では、firewalldがインストールされ、デフォルトで有効になっています。何らかの理由でシステムにインストールされていない場合は、次のように入力してデーモンをインストールして起動できます。
sudo dnf install firewalld
sudo systemctl enable firewalld --now
ファイアウォールサービスのステータスは、次のコマンドで確認できます:
sudo firewall-cmd --state
ファイアウォールが有効になっている場合、コマンドはrunning
を出力する必要があります 。それ以外の場合は、not running
が表示されます 。
Firewalldゾーン#
変更していない場合、デフォルトのゾーンはpublic
に設定されます 、およびすべてのネットワークインターフェイスがこのゾーンに割り当てられます。
デフォルトのゾーンは、別のゾーンに明示的に割り当てられていないすべてのものに使用されるゾーンです。
次のように入力すると、デフォルトのゾーンを確認できます。
sudo firewall-cmd --get-default-zone
public
使用可能なすべてのゾーンのリストを取得するには、次のように入力します。
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
アクティブゾーンとそれに割り当てられているネットワークインターフェースを確認するには:
sudo firewall-cmd --get-active-zones
以下の出力は、インターフェースがeth0
であることを示しています。 およびeth1
public
に割り当てられます ゾーン:
public
interfaces: eth0 eth1
ゾーン構成設定は、次のコマンドで印刷できます:
sudo firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
上記の出力から、パブリックゾーンがアクティブであり、デフォルトのターゲットであるREJECT
を使用していることがわかります。 。出力には、ゾーンがeth0
によって使用されていることも示されています。 およびeth1
インターフェースを取り、DHCPクライアントとSSHトラフィックを許可します。
使用可能なすべてのゾーンの構成を確認する場合は、次のように入力します。
sudo firewall-cmd --list-all-zones
このコマンドは、使用可能なすべてのゾーンの設定を含む巨大なリストを出力します。
ゾーンターゲットの変更#
ターゲットは、指定されていない着信トラフィックのゾーンのデフォルトの動作を定義します。次のいずれかのオプションに設定できます:default
、ACCEPT
、REJECT
、およびDROP
。
ゾーンのターゲットを設定するには、--zone
でゾーンを指定します オプションと--set-target
を使用したターゲット オプション。
たとえば、public
を変更するには ゾーンのターゲットをDROP
実行します:
sudo firewall-cmd --zone=public --set-target=DROP
別のゾーンへのインターフェースの割り当て#
ゾーンごとに特定のルールセットを作成し、それらに異なるインターフェイスを割り当てることができます。これは、マシン上に複数のインターフェースがある場合に特に便利です。
別のゾーンにインターフェースを割り当てるには、--zone
でゾーンを指定します オプションと--change-interface
とのインターフェース オプション。
たとえば、次のコマンドはeth1
を割り当てます work
へのインターフェース ゾーン:
sudo firewall-cmd --zone=work --change-interface=eth1
次のように入力して変更を確認します:
sudo firewall-cmd --get-active-zones
work
interfaces: eth1
public
interfaces: eth0
デフォルトゾーンの変更#
デフォルトゾーンを変更するには、--set-default-zone
を使用します オプションの後に、デフォルトにするゾーンの名前を続けます。
たとえば、デフォルトのゾーンをhome
に変更するには 次のコマンドを実行します:
sudo firewall-cmd --set-default-zone=home
次のコマンドで変更を確認します:
sudo firewall-cmd --get-default-zone
home
新しいゾーンの作成#
Firewalldを使用すると、独自のゾーンを作成することもできます。これは、アプリケーションごとのルールを作成する場合に便利です。
次の例では、memcached
という名前の新しいゾーンを作成します 、ポート11211
を開きます 192.168.100.30
からのアクセスのみを許可します IPアドレス:
-
ゾーンを作成します:
sudo firewall-cmd --new-zone=memcached --permanent
-
ゾーンにルールを追加します:
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
-
変更をアクティブ化するには、firewalldデーモンをリロードします。
sudo firewall-cmd --reload
Firewalldサービス#
Firewalldを使用すると、サービスと呼ばれる事前定義されたルールに基づいて、特定のポートやソースへのトラフィックを許可できます。
デフォルトで利用可能なすべてのサービスのリストを取得するには、次のように入力します。
sudo firewall-cmd --get-services
/usr/lib/firewalld/services
内の関連する.xmlファイルを開くと、各サービスの詳細を確認できます。 ディレクトリ。たとえば、HTTPサービスは次のように定義されます。
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>WWW (HTTP)</short>
<description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
<port protocol="tcp" port="80"/>
</service>
パブリックゾーンのインターフェイスの着信HTTPトラフィック(ポート80)を、現在のセッション(ランタイム構成)に対してのみ許可するには、次のように入力します。
sudo firewall-cmd --zone=public --add-service=http
デフォルトゾーンを変更する場合は、--zone
を省略できます。 オプション。
サービスが正常に追加されたことを確認するには、--list-services
を使用します オプション:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
再起動後にポート80を開いたままにするには、--permanent
を使用して同じコマンドをもう一度実行します。 オプション、または実行:
sudo firewall-cmd --runtime-to-permanent
--list-services
を使用します --permanent
と一緒に 変更を確認するオプション:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
サービスを削除するための構文は、サービスを追加する場合と同じです。 --remove-service
を使用するだけです --add-service
の代わりに フラグ:
sudo firewall-cmd --zone=public --remove-service=http --permanent
上記のコマンドは、http
を削除します パブリックゾーンの永続的な構成からのサービス。
すでに述べたように、デフォルトのサービスは/usr/lib/firewalld/services
に保存されます ディレクトリ。新しいサービスを作成する最も簡単な方法は、既存のサービスファイルを/etc/firewalld/services
にコピーすることです。 ディレクトリ。ユーザーが作成したサービスの場所であり、ファイル設定を変更します。
たとえば、Plex Media Serverのサービス定義を作成するには、SSHサービスファイルを使用できます。
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
新しく作成したplexmediaserver.xml
を開きます ファイルを作成し、<short>
内でサービスの短い名前と説明を変更します および<description>
タグ。変更する必要がある最も重要なタグは、port
です。 タグ。開くポート番号とプロトコルを定義します。
次の例では、ポート1900
を開いています。 UDPおよび32400
TCP。
<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>
ファイルを保存し、FirewallDサービスをリロードします:
sudo firewall-cmd --reload
これで、plexmediaserver
を使用できます 他のサービスと同じように、ゾーン内のサービス。
Firewalldを使用すると、サービス定義を作成せずに、信頼できるIPアドレスまたは特定のポートからのすべてのトラフィックをすばやく有効にすることもできます。
特定のIPアドレス(または範囲)からのすべての着信トラフィックを許可するには、--zone
でゾーンを指定します オプションと--add-source
を使用したソースIP オプション。
たとえば、public
で192.168.1.10からのすべての着信トラフィックを許可するには ゾーン、実行:
sudo firewall-cmd --zone=public --add-source=192.168.1.10
新しいルールを永続化する:
sudo firewall-cmd --runtime-to-permanent
次のコマンドを使用して変更を確認します。
sudo firewall-cmd --zone=public --list-sources
192.168.1.10
ソースIPを削除するための構文は、追加する場合と同じです。 --remove-source
を使用するだけです --add-source
の代わりに オプション:
sudo firewall-cmd --zone=public --remove-source=192.168.1.10
ソースポートを開く#
特定のポートですべての着信トラフィックを許可するには、--zone
でゾーンを指定します オプションと、--add-port
を使用したポートとプロトコル オプション。
たとえば、ポート8080
を開くには あなたが実行した現在のセッションのパブリックゾーンで:
sudo firewall-cmd --zone=public --add-port=8080/tcp
プロトコルはtcp
のいずれかです。 、udp
、sctp
、またはdccp
。
変更を確認します:
sudo firewall-cmd --zone=public --list-ports
8080
再起動後もポートを開いたままにするには、--permanent
を使用して同じコマンドを実行し、永続設定にルールを追加します。 フラグを立てるか、実行して:
sudo firewall-cmd --runtime-to-permanent
ポートを削除するための構文は、ポートを追加する場合と同じです。 --remove-port
を使用するだけです --add-port
の代わりに オプション。
sudo firewall-cmd --zone=public --remove-port=8080/tcp
あるポートから別のポートにトラフィックを転送するには、最初に--add-masquerade
を使用して目的のゾーンのマスカレードを有効にします。 オプション。たとえば、external
のマスカレードを有効にするには ゾーン、タイプ:
sudo firewall-cmd --zone=external --add-masquerade
IPアドレス#
で、あるポートから別のポートにトラフィックを転送します。
次の例では、ポート80
からトラフィックを転送しています。 ポート8080
へ 同じサーバー上:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
次の例では、ポート80
からトラフィックを転送しています。 ポート80
IP 10.10.10.2
のサーバー上 :
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
トラフィックを別のポートの別のサーバーに転送する#
次の例では、ポート80
からトラフィックを転送しています。 ポート8080
へ IP 10.10.10.2
のサーバー上 :
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
転送ルールを永続化するには、次を使用します:
sudo firewall-cmd --runtime-to-permanent