RHCSAシリーズ:FirewallDとIptablesを使用したファイアウォールの基本とネットワークトラフィック制御 - パート11
簡単に言えば、ファイアウォールは、ネットワーク内の入出力トラフィックを一連の事前定義されたルール(たとえば、パケットの宛先/送信元やトラフィックの種類など)に基づいて制御するセキュリティシステムです。
この記事では、Red Hat Enterprise Linux 7のデフォルトの動的ファイアウォールデーモンであるfirewalldと、ほとんどのシステムおよびネットワーク管理者がよく知っているレガシーなファイアウォールサービスであるiptablesについて、その基本をレビューします。RHEL 7でも利用可能です。
FirewallDとIptablesの比較
内部では、firewalldとiptablesサービスは、驚くことではなく、iptablesコマンドを通じてカーネル内のnetfilterフレームワークに通信します。しかし、iptablesサービスとは異なり、firewalldは既存の接続が失われることなく、通常のシステム運用中に設定を変更することができます。
Firewalld は、RHEL システムにデフォルトでインストールされるはずですが、実行されていない可能性があります。以下のコマンドで確認できます(firewall-config はユーザーインターフェースの設定ツールです):
yum info firewalld firewall-config
そして、
systemctl status -l firewalld.service
一方、iptables サービスはデフォルトでは含まれていませんが、インストールすることができます。
yum update && yum install iptables-services
両方のデーモンは、通常のsystemdコマンドを使用して起動し、ブート時に自動的に開始されるように設定できます:
systemctl start firewalld.service | iptables-service.service
systemctl enable firewalld.service | iptables-service.service
参考: Systemdサービスを管理するための便利なコマンド
設定ファイルについて、iptablesサービスは/etc/sysconfig/iptablesを使用します(このパッケージがシステムにインストールされていない場合、このファイルは存在しません)。クラスター ノードとして使用されるRHEL 7ボックスでは、このファイルは次のようになります:
firewalldは、設定を二つのディレクトリ、/usr/lib/firewalldと/etc/firewalldに保存します:
ls /usr/lib/firewalld /etc/firewalld
この記事の後半で、ここかしこにルールを追加した後に、これらの設定ファイルをさらに詳しく調べます。今は、両方のツールに関する情報を常に見つけることができることを思い出しておいていただければそれで十分です。
man firewalld.conf
man firewall-cmd
man iptables
それ以外に、現在のシリーズの第1部で、RHEL 7システムにインストールされているパッケージについての情報を得るためのいくつかのソースを説明した「Essential CommandsとSystem Documentationのレビュー」を見ることを忘れないでください。
ネットワークトラフィックを制御するためのIptablesの使用
次に進む前に、iptables の内部について記憶を新たにするために、Linux Foundation Certified Engineer (LFCE) シリーズの「Iptables Firewallの設定 - パート8」を参照することをお勧めします。そのため、私たちは例にすぐに飛び込むことができるでしょう。
例1: 受信および送信のウェブトラフィックを両方とも許可する
TCPポート80および443は、Apacheウェブサーバーが通常の(HTTP)およびセキュアな(HTTPS)ウェブトラフィックを処理するために使用するデフォルトポートです。次のようにして、enp0s3インターフェースを通じて両方のポートでの入出力のウェブトラフィックを許可できます:
iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
例2: 特定のネットワークからのすべて(または一部)の受信接続をブロックする
特定のネットワーク、例えば 192.168.1.0/24 からのすべて(または一部)のタイプのトラフィックをブロックする必要がある場合があります:
iptables -I INPUT -s 192.168.1.0/24 -j DROP
192.168.1.0/24 ネットワークからのパッケージはすべてドロップされるが、
iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT
ポート 22 を通じてのみ、受信トラフィックを許可します。
例3:着信トラフィックを別の宛先にリダイレクトする
もしあなたが RHEL 7 ボックスをソフトウェアファイアウォールだけでなく、実際のハードウェアベースのファイアウォールとしても使用しており、2つの異なるネットワークの間に配置している場合、IPフォワーディングはすでにシステムで有効にされている必要があります。そうでない場合は、/etc/sysctl.conf を編集し、net.ipv4.ip_forward の値を 1 に設定する必要があります。以下のように:
net.ipv4.ip_forward = 1
それから変更を保存し、テキストエディタを閉じ、最後に変更を適用するために以下のコマンドを実行します:
sysctl -p /etc/sysctl.conf
例えば、内部ボックスにIP 192.168.0.10のプリンターがインストールされていて、CUPSサービスがポート631でリッスンしている場合(プリントサーバーおよびファイアウォールの両方で)、ファイアウォールの反対側にあるクライアントからの印刷リクエストを転送するために、次のiptablesルールを追加する必要があります。
iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631
iptablesはルールを順番に読み込むため、デフォルトポリシーや後のルールが上記の例で示されているルールを上書きしないようにしてください。
FirewallDの使い方
firewalldで導入された変更の1つはゾーンです。この概念は、ネットワークをユーザーがデバイスやそのネットワーク内のトラフィックに対して置いた信頼のレベルに応じて異なるゾーンに分けることを可能にします。
アクティブゾーンを一覧表示するには:
firewall-cmd --get-active-zones
以下の例では、パブリックゾーンがアクティブであり、enp0s3インターフェースが自動的に割り当てられています。特定のゾーンに関するすべての情報を表示するには:
firewall-cmd --zone=public --list-all
RHEL 7 セキュリティガイドで ゾーン について詳しく読むことができるため、ここでは具体的な例をいくつかのみ挙げます。
例4:ファイアウォールを通じてサービスを許可する
サポートされているサービスのリストを取得するには、使用してください。
firewall-cmd --get-services
ファイアウォールを介してhttpおよびhttpsウェブトラフィックを許可するために、即時かつ以降のブートで:
firewall-cmd --zone=MyZone --add-service=http
firewall-cmd --zone=MyZone --permanent --add-service=http
firewall-cmd --zone=MyZone --add-service=https
firewall-cmd --zone=MyZone --permanent --add-service=https
firewall-cmd --reload
code>–ゾーンが省略された場合、デフォルトのゾーン(firewall-cmd –get-default-zoneで確認できます)が使用されます。
ルールを削除するには、上記のコマンド内の単語「add」を「remove」に置き換えてください。
例5: IP/ポートフォワーディング
まず最初に、希望するゾーンでマスカレードが有効になっているかどうかを確認する必要があります。
firewall-cmd --zone=MyZone --query-masquerade
下の画像では、マスカレードが外部ゾーンに対して有効になっていることがわかりますが、パブリックには有効になっていません:
公開のためにマスカレーディングを有効にすることもできます:
firewall-cmd --zone=public --add-masquerade
または、外部でマスカレードを使用します。ここでは、firewalldを使用して例3を再現するために行うことについて説明します。
firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10
そして、ファイアウォールを再読み込みするのを忘れないでください。
RHCSAシリーズのパート9にさらに例があります。そこで、通常ウェブサーバーおよびFTPサーバーで使用されるポートを許可または無効にする方法、ならびにそれらのサービスのデフォルトポートが変更されたときに対応するルールを変更する方法を説明しました。さらに、他の例についてはfirewalldウィキを参照することをお勧めします。
参照: RHEL 7でファイアウォールを設定するための役立つFirewallDの例
結論
この記事では、ファイアウォールとは何か、RHEL 7でファイアウォールを実装するために利用できるサービスについて説明し、この作業を始めるのに役立ついくつかの例を提供しました。ご意見やご提案、ご質問がありましたら、下のフォームを使ってお気軽にお知らせください。事前にありがとうございます!







