ファイアウォールは、着信および発信ネットワークトラフィックを監視およびフィルタリングメソッドです。 これは、特定のトラフィックを許可するかブロックするかを決定する一連のセキュリティルールを定義することによって機能します。 適切に構成されたファイアウォールは、システム全体のセキュリティの最も重要な側面の1つです。
CentOS8にはfirewalldという名前のファイアウォールデーモンが搭載されています。 それはシステムの防火壁を動的に管理することを可能にするDバスインターフェイスが付いている完全な解決である。
このチュートリアルでは、CentOS8でファイアウォールを設定および管理する方法について説明します。 また、FirewallDの基本的な概念についても説明します。Firewallサービスを設定するには、rootまたはsudo権限を持つユーザーとしてログに記録する必要があります。
Firewalldの基本的な概念#
firewalldはゾーンとサービスの概念を使用します。 構成するゾーンとサービスに基づいて、システムとの間で許可またはブロックするトラフィックを制御できます。
Firewalldは、firewall-cmd
コマンドラインユーティリティを使用して構成および管理できます。
CentOS8では、iptablesはfirewalldデーモンのデフォルトのファイアウォールバックエンドとしてnftablesに置き換えられています。
Firewalld Zones#
ゾーンは、コンピュータが接続されているネットワークの信頼レベルを指定する事前定義されたルールセットです。 ネットワークインターフェイスとソースをゾーンに割り当てることができます。
以下は、FirewallDによって提供されるゾーンで、ゾーンの信頼レベルに応じて信頼されていないゾーンから信頼されているゾーンに順序付けられています:
- ドロップ: すべての着信接続は通知なしで削除されます。 発信接続のみが許可されます。
- ブロック:すべての着信接続は、
IPv4
の場合はicmp-host-prohibited
メッセージ、Ipv6Nの場合はicmp6-adm-prohibited
メッセージで拒否されます。 - public:信頼されていない公共エリアで使用します。 ネットワーク上の他のコンピュータは信頼しませんが、選択した着信接続を許可することはできます。
- external:システムがゲートウェイまたはルーターとして機能するときにNATマスカレードが有効になっている外部ネットワークで使用します。 選択した着信接続のみが許可されます。
- internal:システムがゲートウェイまたはルーターとして機能する場合、内部ネットワークで使用します。 ネットワーク上の他のシステムは、一般的に信頼されています。 選択した着信接続のみが許可されます。
- dmz:非武装地帯にあり、ネットワークの残りの部分へのアクセスが制限されているコンピュータに使用されます。 選択した着信接続のみが許可されます。
- 仕事:仕事機械のために使用される。 ネットワーク上の他のコンピュータは、一般的に信頼されています。 選択した着信接続のみが許可されます。
- home:家庭用機械に使用されます。 ネットワーク上の他のコンピュータは、一般的に信頼されています。 選択した着信接続のみが許可されます。
- 信頼済み:すべてのネットワーク接続が受け入れられます。 ネットワーク内のすべてのコンピューターを信頼します。
Firewall services#
Firewalldサービスは、ゾーン内で適用され、特定のサービスの着信トラフィックを許可するために必要な設定を定義する事前定義されたルールです。 サービスを使用すると、簡単に単一のステップでいくつかのタスクを実行することができます。
たとえば、サービスには、ポートの開放、トラフィックの転送などに関する定義を含めることができます。
Firewalldランタイムと永続的な設定#
Firewalldは、ランタイムと永続的な設定の二つの別々の設定セットを使用します。
ランタイム設定は実際の実行中の設定であり、再起動時には保持されません。 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
Firewalldの有効化#
CentOS8では、firewalldがデフォルトでインストールされ、有効になっています。 何らかの理由でシステムにインストールされていない場合は、次のように入力してデーモンをインストールして起動できます:
sudo dnf install firewalld
sudo systemctl enable firewalld --now
ファイアウォールサービスの状態を確認するには、次の操作を行います:
sudo firewall-cmd --state
ファイアウォールが有効になっている場合、コマンドはrunning
を出力します。 それ以外の場合は、not running
が表示されます。
Firewalld Zones#
変更していない場合、デフォルトのゾーンは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: eth1public 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
サービスを削除するための構文は、サービスを追加するときと同じです。 --add-service
フラグの代わりに--remove-service
を使用するだけです:
sudo firewall-cmd --zone=public --remove-service=http --permanent
上記のコマンドは、パブリックゾーンの永続的な構成からhttp
サービスを削除します。
新しいFirewallDサービスの作成#
すでに述べたように、デフォルトのサービスは/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
サービスを他のサービスと同じように使用できるようになりました。
ポートと送信元Ipを開く#
Firewalldを使用すると、サービス定義を作成せずに、信頼できるIPアドレスまたは特定のポートからのすべてのトラフィックを迅速に
送信元IPを開く#
特定のIPアドレス(または範囲)からのすべての着信トラフィックを許可するには、ゾーンを--zone
オプションで指定し、送信元IPを--add-source
オプ
たとえば、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を削除する構文は、追加する場合と同じです。 --add-source
オプションの代わりに--remove-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
ポートを削除する構文は、ポートを追加するときと同じです。 --add-port
オプションの代わりに--remove-port
を使用するだけです。
sudo firewall-cmd --zone=public --remove-port=8080/tcp
Forwarding Ports#
あるポートから別のポートにトラフィックを転送するには、最初に--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
トラフィックを別のIPアドレスに転送する#
次の例では、IPを持つサーバー上のポート80
からポート80
にトラフィックを転送しています10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
別のポート#
上の別のサーバーにトラフィックを転送する次の例では、IP10.10.10.2
を持つサーバー上のポート80
からポート8080
にトラフィックを転送しています:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
forwardルールを永続化するには、次のようにします:
sudo firewall-cmd --runtime-to-permanent
結論#
CentOS8システムでfirewalldサービスを設定および管理する方法を学習しました。
システムが正常に機能するために必要なすべての着信接続を許可し、不要な接続をすべて制限してください。