CentOSでファイアウォールを設定および管理する方法8

ファイアウォールは、着信および発信ネットワークトラフィックを監視およびフィルタリングメソッドです。 これは、特定のトラフィックを許可するかブロックするかを決定する一連のセキュリティルールを定義することによって機能します。 適切に構成されたファイアウォールは、システム全体のセキュリティの最も重要な側面の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つの方法のいずれかを使用できます:

  1. ランタイム構成を変更し、永続的にする:

    sudo firewall-cmd <options>sudo firewall-cmd --runtime-to-permanent
  2. 永続的な設定を変更し、firewalldデーモンをリロードします:

    sudo firewall-cmd --permanent <options>sudo firewall-cmd --reload

Firewalldの有効化#

CentOS8では、firewalldがデフォルトでインストールされ、有効になっています。 何らかの理由でシステムにインストールされていない場合は、次のように入力してデーモンをインストールして起動できます:

sudo dnf install firewalldsudo 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

以下の出力は、インターフェイスeth0eth1publicゾーンに割り当てられていることを示しています:

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.30IPアドレスからのアクセスのみを許可します:

  1. ゾーンの作成:

    sudo firewall-cmd --new-zone=memcached --permanent
  2. ゾーンにルールを追加する:

    sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanentsudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanentsudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
  3. firewalldデーモンをリロードして変更を有効にします:

    sudo firewall-cmd --reload

Firewalldサービス#

firewalldを使用すると、サービスと呼ばれる事前定義されたルールに基づいて、特定のポートおよび/またはソースのトラフィックを許可できます。

すべてのデフォルトの利用可能なサービスタイプのリストを取得するには:

sudo firewall-cmd --get-services

関連するサービスを開くことで、各サービスに関する詳細情報を見つけることができます。/usr/lib/firewalld/servicesディレクトリ内のxmlファイル。 たとえば、HTTPサービスは

/usr/lib/firewalld/services/httpのように定義されます。xml
<?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タグです。

次の例では、ポート1900UDPと32400TCPを開いています。

/etc/firewalld/services/plexmediaserver.xml
<?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サービスを設定および管理する方法を学習しました。

システムが正常に機能するために必要なすべての着信接続を許可し、不要な接続をすべて制限してください。



+