適切に構成されたファイアウォールは、システム全体のセキュリティの最も重要な側面の1つです。
FirewallDisは、システムのiptablesルールを管理し、それらを操作するためのD-Busインターフェイスを提供する完全なファイアウォールソリューションです。 CentOS 7以降、FirewallDはデフォルトのファイアウォール管理ツールとしてiptablesに取って代わります。
このチュートリアルでは、CentOS 7システムでFirewallDを使用してファイアウォールを設定する方法を示し、FirewallDの基本的な概念を説明します。
前提条件#
このチュートリアルを開始する前に、sudo権限を持つユーザーアカウントまたはrootユーザーでサーバーにログインしていることを確認してください。ベストプラクティスは、rootではなくsudoユーザーとして管理コマンドを実行することです。 CentOSシステムにsudoユーザーがいない場合は、次の手順に従ってsudoユーザーを作成できます。
基本的なファイアウォールの概念#
FirewallDは、iptablesチェーンとルールではなく、ゾーンとサービスの概念を使用します。構成するゾーンとサービスに基づいて、システムとの間で許可または禁止されるトラフィックを制御できます。
FirewallDは、firewall-cmd
を使用して構成および管理できます。 コマンドラインユーティリティ。
Firewalldゾーン#
ゾーンは、コンピューターが接続されているネットワークの信頼レベルに基づいて許可するトラフィックを指定する、事前定義された一連のルールです。ネットワークインターフェイスとソースをゾーンに割り当てることができます。
以下は、FirewallDによって提供されるゾーンで、ゾーンの信頼レベルに従って、信頼できないものから信頼できるものへと並べられています。
- ドロップ :すべての着信接続は通知なしにドロップされます。発信接続のみが許可されます。
- ブロック :すべての着信接続は
icmp-host-prohibited
で拒否されますIPv4
のメッセージ およびicmp6-adm-prohibited
IPv6nの場合。発信接続のみが許可されます。 - 公開 :信頼できない公共エリアで使用します。ネットワーク上の他のコンピューターを信頼していませんが、選択した着信接続を許可することはできます。
- 外部 :システムがゲートウェイまたはルーターとして機能する場合に、NATマスカレードが有効になっている外部ネットワークで使用します。選択した着信接続のみが許可されます。
- 内部 :システムがゲートウェイまたはルーターとして機能する場合に、内部ネットワークで使用します。ネットワーク上の他のシステムは一般的に信頼されています。選択した着信接続のみが許可されます。
- dmz :非武装地帯にあり、ネットワークの他の部分へのアクセスが制限されているコンピューターに使用されます。選択した着信接続のみが許可されます。
- 仕事 :作業機械に使用されます。ネットワーク上の他のコンピューターは一般的に信頼されています。選択した着信接続のみが許可されます。
- 自宅 :家庭用機械に使用されます。ネットワーク上の他のコンピューターは一般的に信頼されています。選択した着信接続のみが許可されます。
- 信頼できる :すべてのネットワーク接続が受け入れられます。ネットワーク内のすべてのコンピューターを信頼します。
ファイアウォールサービス#
ファイアウォールで保護されたサービスは、ゾーン内に適用され、特定のサービスの着信トラフィックを許可するために必要な設定を定義する事前定義されたルールです。
Firefoxのランタイムと永続的な設定#
Firewalldは、ランタイム構成と永続構成の2つの別個の構成セットを使用します。
ランタイム構成は実際の実行構成であり、再起動しても永続的ではありません。 Firewalldサービスが開始すると、永続的な構成が読み込まれ、それがランタイム構成になります。
デフォルトでは、firewall-cmd
を使用してFirewalld構成に変更を加える場合 ユーティリティの場合、変更はランタイム構成に適用されます。変更を永続的にするには、--permanent
を使用する必要があります オプション。
-
FirewalldはデフォルトでCentOS7にインストールされますが、システムにインストールされていない場合は、次のように入力してパッケージをインストールできます。
sudo yum install firewalld
-
Firewalldサービスはデフォルトで無効になっています。ファイアウォールのステータスは次の方法で確認できます:
sudo firewall-cmd --state
インストールしたばかりの場合、または以前にアクティブ化したことがない場合、コマンドは
not running
を出力します 。それ以外の場合は、running
が表示されます 。 -
FirewallDサービスを開始し、起動時に有効にするには:
sudo systemctl start firewalld
sudo systemctl enable firewalld
ファイアウォールゾーンの操作#
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
public
interfaces: eth0 eth1
上記の出力は、両方のインターフェースが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:
上記の出力から、パブリックゾーンがアクティブであり、デフォルトとして設定されており、両方のeth0
で使用されていることがわかります。 およびeth1
インターフェイス。また、DHCPクライアントとSSHに関連する接続が許可されます。
使用可能なすべてのゾーンの構成を確認する場合は、次のように入力します。
sudo firewall-cmd --list-all-zones
このコマンドは、使用可能なすべてのゾーンの設定を含む巨大なリストを出力します。
インターフェースのゾーンの変更#
--zone
を使用すると、インターフェースゾーンを簡単に変更できます。 --change-interface
と組み合わせたオプション オプション。次のコマンドは、eth1
を割り当てます 作業ゾーンへのインターフェース:
sudo firewall-cmd --zone=work --change-interface=eth1
次のように入力して変更を確認します:
sudo firewall-cmd --get-active-zones
work
interfaces: eth1
public
interfaces: eth0
デフォルトゾーンの変更#
デフォルトゾーンを変更するには、--set-default-zone
を使用します オプションの後に、デフォルトにするゾーンの名前を続けます。
たとえば、デフォルトゾーンをホームに変更するには、次のコマンドを実行する必要があります。
sudo firewall-cmd --set-default-zone=home
次のコマンドで変更を確認します:
sudo firewall-cmd --get-default-zone
home
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 --permanent --zone=public --add-service=http
--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サービスを削除します。
適切なサービスが利用できないPlexMediaServerなどのアプリケーションを実行している場合はどうなりますか?
このような状況では、2つのオプションがあります。適切なポートを開くか、新しいFirewallDサービスを定義できます。
たとえば、Plexサーバーはポート32400でリッスンし、TCPを使用します。現在のセッションのパブリックゾーンでポートを開くには、--add-port=
を使用します。 オプション:
sudo firewall-cmd --zone=public --add-port=32400/tcp
プロトコルは、tcp
のいずれかになります。 またはudp
。
ポートが正常に追加されたことを確認するには、--list-ports
を使用します オプション:
sudo firewall-cmd --zone=public --list-ports
32400/tcp
ポートを維持するには32400
再起動後に開き、--permanent
を使用して同じコマンドを実行し、永続的な設定にルールを追加します オプション。
ポートを削除するための構文は、ポートを追加する場合と同じです。 --remove-port
を使用するだけです --add-port
の代わりに オプション。
sudo firewall-cmd --zone=public --remove-port=32400/tcp
すでに述べたように、デフォルトのサービスは/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
を使用できます 他のサービスと同じように、ゾーン内のサービス。
あるポートから別のポートまたはアドレスにトラフィックを転送するには、最初に--add-masquerade
を使用して目的のゾーンのマスカレードを有効にします スイッチ。たとえば、external
のマスカレードを有効にします ゾーンタイプ:
sudo firewall-cmd --zone=external --add-masquerade
- 同じサーバー上のあるポートから別のポートにトラフィックを転送する
次の例では、ポート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
フォワードをパーマネントにしたい場合は、--permanent
を追加するだけです。 オプション。
次の例では、Webサーバーを実行している場合にファイアウォールを構成する方法を示します。サーバーにはインターフェースeth0
が1つしかないことを前提としています 、SSH、HTTP、およびHTTPSポートでのみ着信トラフィックを許可する必要があります。
-
デフォルトゾーンをdmzに変更します
デフォルトではSSHトラフィックのみが許可されるため、dmz(非武装)ゾーンを使用します。デフォルトゾーンをdmzに変更し、それを
eth0
に割り当てるには インターフェイスで、次のコマンドを実行します:sudo firewall-cmd --set-default-zone=dmz
sudo firewall-cmd --zone=dmz --add-interface=eth0
-
HTTPおよびHTTPSポートを開きます:
HTTPおよびHTTPSポートを開くには、永続的なサービスルールをdmzゾーンに追加します。
sudo firewall-cmd --permanent --zone=dmz --add-service=http
sudo firewall-cmd --permanent --zone=dmz --add-service=https
ファイアウォールをリロードして、変更をすぐに有効にします:
sudo firewall-cmd --reload
-
変更を確認する
dmzゾーン構成設定を確認するには、次のように入力します。
sudo firewall-cmd --zone=dmz --list-all
dmz (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
上記の出力は、dmzがデフォルトのゾーンであり、
eth0
に適用されていることを示しています。 インターフェイスとssh(22)http(80)およびhttps(443)ポートが開いています。