紹介
A firewall is a system that provides network security by filtering incoming and outgoing network traffic based on a set of user-defined rules. In general, the purpose of a firewall is to reduce or eliminate the occurrence of unwanted network communications while allowing all legitimate communication to flow freely. In most server infrastructures, firewalls provide an essential layer of security that, combined with other measures, prevent attackers from accessing your servers in malicious ways.
このガイドでは、ファイアウォールの動作に焦点を当てて、iptablesやFirewallDなどのステートフルソフトウェアファイアウォールをクラウドサーバーに関連付けながら説明します。まず、TCPパケットと異なるタイプのファイアウォールについて簡単に説明します。次に、ステートフルファイアウォールに関連するさまざまなトピックについて説明します。最後に、サーバー上でファイアウォールを設定するのに役立つ他のチュートリアルへのリンクを提供します。
TCPネットワークパケット
異なるタイプのファイアウォールについて説明する前に、トランスポート制御プロトコル(TCP)ネットワークトラフィックがどのようなものかを見てみましょう。
TCPネットワークトラフィックは、パケットと呼ばれるコンテナでネットワーク内を移動します。パケットにはパケットヘッダーが含まれており、これにはソースアドレスや宛先アドレスなどの制御情報、およびパケットのシーケンス情報が含まれています。各パケットの制御情報は、関連するデータが適切に配信されることを確認するのに役立ちますが、含まれる要素はファイアウォールがパケットをファイアウォールルールに照合するためのさまざまな方法を提供します。
重要なのは、TCPパケットを正常に受信するためには、受信者が送信者に対して出力確認パケットを送信する必要があるということです。受信パケットと送信パケットの制御情報の組み合わせは、送信者と受信者の間の接続状態(例:新規、確立済み、関連)を決定するために使用できます。
ファイアウォールの種類
ネットワークファイアウォールの3つの基本的なタイプについて簡単に説明しましょう:パケットフィルタリング(状態レス)、ステートフル、およびアプリケーションレイヤー。
パケットフィルタリング、または状態レスのファイアウォールは、個々のパケットを単独で検査して動作します。そのため、接続状態を認識せず、個々のパケットヘッダーに基づいてパケットを許可または拒否することしかできません。
ステートフルファイアウォールは、パケットの接続状態を判断することができるため、ステートレスファイアウォールよりもはるかに柔軟です。これらは、接続状態が決定されるまで関連するパケットを収集し、その後、トラフィックに対してファイアウォールルールが適用される前に処理します。
アプリケーションファイアウォールは、送信されるデータを分析することで、個々のサービスまたはアプリケーションに特化したファイアウォールルールにネットワークトラフィックを一致させることができます。これらはプロキシベースのファイアウォールとも呼ばれています。
さまざまなモダンなオペレーティングシステムで利用可能なファイアウォールソフトウェアに加えて、ファイアウォール機能はルーターやファイアウォールアプライアンスなどのハードウェアデバイスでも提供されることがあります。再び、私たちの議論は、それらが保護するサーバー上で実行される状態を管理するソフトウェアファイアウォールに焦点を当てます。
ファイアウォールのルール
上記のように、ファイアウォールを通過するネットワークトラフィックは、それが通過するかどうかを決定するためにルールと一致させられます。ファイアウォールルールの外観を説明する簡単な方法は、いくつかの例を示すことですので、それを行います。
次のような受信トラフィックに適用されるファイアウォールルールのリストを持つサーバーがあるとします:
- 公開ネットワークインターフェース上のポート80および443(HTTPおよびHTTPS Webトラフィック)への新規および確立済みの受信トラフィックを受け入れます。
- オフィスの非技術者のIPアドレスからポート22(SSH)への受信トラフィックをドロップします。
- オフィスのIP範囲からプライベートネットワークインターフェース上のポート22(SSH)への新規および確立済みの受信トラフィックを受け入れます。
注意してください。これらの例の各々の最初の単語は、「accept」、「reject」、または「drop」のいずれかです。これは、ファイアウォールがネットワークトラフィックがルールに一致した場合に行うアクションを指定します。Acceptはトラフィックを通過させることを意味し、rejectはトラフィックをブロックして「到達不能」エラーで返信し、dropはトラフィックをブロックして返信を送信しないことを意味します。各ルールの残りの部分は、各パケットが一致する条件で構成されます。
実際、ネットワークトラフィックは、最初から最後までのシーケンスまたはチェーンのファイアウォールルールのリストと一致します。より具体的には、ルールが一致すると、関連するアクションが問題のネットワークトラフィックに適用されます。この例では、会計担当者がサーバーにSSH接続を試みた場合、ルール2に基づいて拒否され、ルール3が確認される前に拒否されます。しかし、システム管理者は、ルール3にのみ一致するため、受け入れられます。
デフォルトポリシー
ファイアウォールルールのチェーンがすべての可能な条件を明示的にカバーしていないのは典型的です。このため、ファイアウォールチェーンには常に、アクション(受け入れる、拒否する、またはドロップする)のみからなるデフォルトポリシーが指定されている必要があります。
上記の例のチェーンのデフォルトポリシーがdropに設定されていると仮定します。オフィスの外のコンピューターがサーバーにSSH接続しようとする場合、そのトラフィックはどのルールの条件にも一致しないため、ドロップされます。
デフォルトポリシーがacceptに設定されている場合、技術スキルのない社員を除く誰でも、サーバー上の任意のオープンサービスに接続できます。これは、従業員の一部を外に出させるだけの非常に不適切に構成されたファイアウォールの例です。
入出力トラフィック
サーバーの観点からネットワークトラフィックは、入力または出力のいずれかになります。ファイアウォールは、それぞれの場合に異なるルールセットを維持します。他から発信されるトラフィック、入力トラフィックは、サーバーが送信する出力トラフィックとは異なる扱いを受けます。サーバー自体が信頼できる場合が多いため、通常、サーバーはほとんどの出力トラフィックを許可します。ただし、サーバーが攻撃者や悪意のある実行可能ファイルによって侵害された場合に嫌がらせ通信を防止するために、出力ルールセットが使用されることがあります。
ファイアウォールのセキュリティ利点を最大化するためには、他のシステムがサーバーとやり取りする方法をすべて特定し、それらを明示的に許可するルールを作成し、その他のトラフィックをすべてドロップする必要があります。適切な送信ルールが設定されていることを忘れずに、サーバーが適切な受信接続に対して送信確認を行うことができるようにします。また、サーバーは通常、さまざまな理由で独自の送信トラフィックを開始する必要があるため、アップデートのダウンロードやデータベースへの接続などの場合も送信ルールセットに含めることが重要です。
送信ルールの記述
例えば、ファイアウォールの設定がデフォルトで送信トラフィックをドロップする場合、受信許可ルールは対応する送信ルールがなければ無意味です。
例の受信ファイアウォールルール(1および3)を補完し、対応するアドレスとポートでの適切な通信を許可するために、以下の送信ファイアウォールルールを使用できます:
- パブリックネットワークインターフェースのポート80および443(HTTPおよびHTTPS)への確立された送信トラフィックを許可
- プライベートネットワークインターフェースのポート22(SSH)への確立された送信トラフィックを許可
注意してください。接続が拒否される着信トラフィックのために明示的に規則を書く必要はありません(着信規則2)。なぜなら、サーバーはその接続を確立または確認する必要がないからです。
ファイアウォールソフトウェアとツール
ファイアウォールの動作を説明したので、効果的なファイアウォールを設定するのに役立つ一般的なソフトウェアパッケージを見てみましょう。他にも多くのファイアウォール関連パッケージがありますが、これらは効果的であり、最もよく遭遇するものです。
Iptables
Iptablesは、ほとんどのLinuxディストリビューションにデフォルトで含まれている標準のファイアウォールです(現代の派生バージョンであるnftablesがそれに取って代わるでしょう)。実際には、Linuxネットワークスタックを操作できるカーネルレベルのnetfilterフックへのフロントエンドです。それは、ネットワーキングインターフェースを横断する各パケットをルールのセットに一致させて、何をするかを決定します。
Iptablesを使用してファイアウォールを実装する方法については、次のリンクを参照してください:
- Ubuntu 14.04でIPTablesを使用したファイアウォールの設定方法
- Ubuntu 14.04でIptablesを使用した基本的なファイアウォールテンプレートの実装方法
- サーバー間のトラフィックを保護するためのIptablesファイアウォールの設定方法
UFW
UFW(Uncomplicated Firewallの略)は、ファイアウォールの構成プロセスを簡素化することを目的としたiptablesのインターフェイスです。
UFWの詳細については、次のチュートリアルを参照してください:UbuntuとDebianクラウドサーバーでUFWを使用したファイアウォールの設定方法。
FirewallD
FirewallDは、デフォルトでCentOS 7サーバーに利用可能な完全なファイアウォールソリューションです。偶然にも、FirewallDはnetfilterを構成するためにiptablesを使用しています。
FirewallDの詳細については、次のチュートリアルを参照してください:CentOS 7サーバーを保護するためのFirewallDの設定方法。
CentOS 7を実行していますが、iptablesを使用したい場合は、このチュートリアルに従ってください:CentOS 7でFirewallDからIptablesに移行する方法。
Fail2ban
Fail2banは侵入防止ソフトウェアであり、ブルートフォースログイン試行やDDOS攻撃を自動的にブロックするようにファイアウォールを構成できます。
Fail2banについて詳しくは、以下のリンクをご覧ください:
- Linuxサーバー上のサービスを保護するFail2banの動作方法
- Ubuntu 14.04でFail2Banを使用してSSHを保護する方法
- Ubuntu 14.04でFail2Banを使用してNginxサーバーを保護する方法
- Ubuntu 14.04でFail2Banを使用してApacheサーバーを保護する方法
結論
今、ファイアウォールがどのように機能するかを理解したので、上記のチュートリアルを使用して、サーバーセットアップのセキュリティを向上させるファイアウォールの実装を検討する必要があります。
ファイアウォールがどのように機能するかをもっと学びたい場合は、次のリンクをチェックしてください:
Source:
https://www.digitalocean.com/community/tutorials/what-is-a-firewall-and-how-does-it-work