適切に構成されたファイアウォールは、システム全体のセキュリティの最も重要な側面の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-prohibitedIPv6nの場合。発信接続のみが許可されます。 - 公開 :信頼できない公共エリアで使用します。ネットワーク上の他のコンピューターを信頼していませんが、選択した着信接続を許可することはできます。
- 外部 :システムがゲートウェイまたはルーターとして機能する場合に、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 firewalldsudo 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=dmzsudo firewall-cmd --zone=dmz --add-interface=eth0 -
HTTPおよびHTTPSポートを開きます:
HTTPおよびHTTPSポートを開くには、永続的なサービスルールをdmzゾーンに追加します。
sudo firewall-cmd --permanent --zone=dmz --add-service=httpsudo firewall-cmd --permanent --zone=dmz --add-service=httpsファイアウォールをリロードして、変更をすぐに有効にします:
sudo firewall-cmd --reload -
変更を確認する
dmzゾーン構成設定を確認するには、次のように入力します。
sudo firewall-cmd --zone=dmz --list-alldmz (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)ポートが開いています。