CentOS 7でFirewallDからIptablesに移行する方法

前書き

他のほとんどのLinuxディストリビューションと同様に、CentOS 7は、ネットワークスタックを流れるパケットにアクセスするために、Linuxカーネル内で「+ netfilter +」フレームワークを使用します。 これにより、ファイアウォールシステムを実装するためにパケットを検査および操作するために必要なインターフェイスが提供されます。

ほとんどのディストリビューションは `+ iptables `ファイアウォールを使用し、ファイアウォールは ` netfilter `フックを使用してファイアウォールルールを適用します。 CentOS 7には、これと同じ目的を満たす「 firewalld +」と呼ばれる代替サービスが付属しています。

「+ firewalld 」は優れた機能を備えた非常に有能なファイアウォールソリューションですが、一部のユーザーは、構文に満足しており、その動作とパフォーマンスに満足している場合、「 iptables 」に固執しやすくなります。 ` iptables ` _command_は実際には ` firewalld `によって使用されますが、デフォルトでは ` iptables ` _service_はCentOS 7にインストールされていません。 このガイドでは、CentOS 7に「 iptables 」サービスをインストールし、ファイアウォールを「 firewalld 」から「 iptables +」に移行する方法を示します(https://www.digitalocean.com/community/tutorialsをご覧ください) FirewallDの使用方法を学びたい場合は、/ how-to-set-up-a-firewall-using-firewalld-on-centos-7 [このガイド]をご覧ください)。

現在のファイアウォールルールを保存する(オプション)

サーバーのファイアウォールソリューションとして「+ iptables 」に切り替える前に、「 firewalld 」が実施している現在のルールを保存することをお勧めします。 前述のように、 ` firewalld `デーモンは実際に ` iptables `コマンドを活用して、 ` netfilter `カーネルフックと通信します。 このため、 ` iptables +`コマンドを使用して現在のルールをダンプできます。

次のように入力して、ルールの現在のセットを標準出力と、 `+ firewalld_iptables_rules +`という名前のホームディレクトリ内のファイルにダンプします。

sudo iptables -S | tee ~/firewalld_iptables_rules

`+ ip6tables +`でも同じことを行います:

sudo ip6tables -S | tee ~/firewalld_ip6tables_rules

アクティブな「+ firewalld 」ゾーン、有効化されたサービス、および「 firewall-cmd 」から「 iptables +」に直接渡されたルールに応じて、ダンプされるルールセットは非常に広範囲になる可能性があります。

`+ firewalld `サービスは、通常の ` iptables `ルールを使用してファイアウォールポリシーを実装し、 ` iptables +`チェーンを使用して管理フレームワークを構築することでこれを実現します。 表示される可能性が高いルールのほとんどは、これらの管理チェーンを作成し、これらの構造に出入りするトラフィックのフローを指示するために使用されます。

最終的に「+ iptables 」サービスに移行するファイアウォールルールは、「 firewalld +」が依存する管理フレームワークを再作成する必要はありません。 このため、最終的に実装するルールセットははるかに簡単になります。 生データをできるだけそのまま保持するために、ここでセット全体を保存しています。

次のように入力することで、再作成する必要があるポリシーを理解するために、より重要な行のいくつかを見ることができます。

grep 'ACCEPT\|DROP\|QUEUE\|RETURN\|REJECT\|LOG' ~/firewalld_iptables_rules

これにより、最終決定に至るルールがほとんど表示されます。 ユーザーが作成したチェーンにジャンプするだけのルールは表示されません。

Iptablesサービスをダウンロードしてインストールする

サーバーの移行を開始するには、CentOSリポジトリから `+ iptables-service +`パッケージをダウンロードしてインストールする必要があります。

次のように入力して、サービスファイルをダウンロードしてインストールします。

sudo yum install iptables-services

これにより、 `+ iptables `サービスの管理に使用される ` systemd `スクリプトがダウンロードおよびインストールされます。 また、いくつかのデフォルトの ` iptables `および ` ip6tables `設定ファイルを ` / etc / sysconfig +`ディレクトリに書き込みます。

Iptablesファイアウォールルールを作成する

次に、 `+ / etc / sysconfig / iptables `および ` / etc / sysconfig / ip6tables `ファイルを変更して、 ` iptables `ファイアウォールルールを構築する必要があります。 これらのファイルは、 ` iptables +`サービスを開始するときに読み込まれ、適用されるルールを保持します。

ファイアウォールルールの構築方法は、 `+ system-config-firewall `プロセスがインストールされ、これらのファイルの管理に使用されているかどうかによって異なります。 ` / etc / sysconfig / iptables +`ファイルの上部をチェックして、手動編集を推奨しているかどうかを確認します。

sudo head -2 /etc/sysconfig/iptables

出力が次のようになっている場合、 `+ / etc / sysconfig / iptables `および ` / etc / sysconfig / ip6tables `ファイルを手動で編集して、 ` iptables +`ファイアウォールのポリシーを実装してください。

output# sample configuration for iptables service
# you can edit this manually or use system-config-firewall

`+ sudo +`権限でファイルを開いて編集し、ルールを追加します。

sudo nano /etc/sysconfig/iptables
sudo nano /etc/sysconfig/ip6tables

ルールを作成したら、次のコマンドを使用してIPv4およびIPv6ルールをテストできます。

sudo sh -c 'iptables-restore -t < /etc/sysconfig/iptables'
sudo sh -c 'ip6tables-restore -t < /etc/sysconfig/ip6tables'

一方、 `+ / etc / sysconfig / iptables +`ファイルの検査からの出力が次のように見える場合、手動でファイルを編集しないでください:

output# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.

これは、 `+ system-config-firewall +`管理ツールがインストールされ、このファイルの管理に使用されていることを意味します。 手動の変更は、ツールによって上書きされます。 これが表示された場合は、関連ツールのいずれかを使用してファイアウォールを変更する必要があります。 テキストUIの場合、次を入力します。

sudo system-config-firewall-tui

グラフィカルUIがインストールされている場合は、次を入力して起動できます。

sudo system-config-firewall

`+ iptables +`のルールと構文について学習するのに助けが必要な場合、以下のガイドは主にUbuntuシステムを対象としていますが、役に立つかもしれません:

FirewallDサービスを停止し、Iptablesサービスを開始します

次に、現在の「+ firewalld 」ファイアウォールを停止し、「 iptables 」サービスを起動する必要があります。 ` firewalld `サービスが正常にシャットダウンするとすぐに、 ` && +`コンストラクトを使用して新しいファイアウォールサービスを開始します。

sudo systemctl stop firewalld && sudo systemctl start iptables; sudo systemctl start ip6tables

次のように入力して、 `+ firewalld +`が実行されていないことを確認できます。

sudo firewall-cmd --state

`+ / etc / sysconfig +`ディレクトリで設定したルールがロードされ、適用されていることも確認できます:

sudo iptables -S
sudo ip6tables -S

この時点で、 `+ iptables `および ` ip6tables `サービスは現在のセッションに対してアクティブです。 ただし、現在、 ` firewalld +`サービスは、サーバーの再起動時に自動的に開始されるサービスです。

これは、ファイアウォールポリシーをテストして、必要なアクセスレベルがあることを確認するのに最適な時期です。問題がある場合は、サーバーを再起動して古いファイアウォールに戻すことができます。

FirewallDサービスを無効にし、Iptablesサービスを有効にします

ファイアウォールルールをテストしてポリシーが正しく適用されていることを確認したら、次のように入力して `+ firewalld +`サービスを無効にします。

sudo systemctl disable firewalld

これにより、ブート時にサービスが自動的に開始されなくなります。 `+ iptables `サービスの実行中に ` firewalld `サービスを手動で開始するべきではないため、サービスをマスクすることで追加の手順を実行できます。 これにより、 ` firewalld +`サービスも手動で開始されなくなります:

sudo systemctl mask firewalld

これで、 `+ iptables `および ` ip6tables +`サービスを有効にして、起動時に自動的に開始できるようになりました:

sudo systemctl enable iptables
sudo systemctl enable ip6tables

これでファイアウォールの移行が完了するはずです。

結論

ファイアウォールの実装は、サーバーを安全に保つための重要なステップです。 「+ firewalld +」は優れたファイアウォールソリューションですが、時々、最も使い慣れたツールを使用するか、より多様なインフラストラクチャで同じシステムを使用するのが最も理にかなっています。