パケットフィルタを活用したサーバのセキュリティ対策 – 「さくらのクラウド入門」(9)
こんにちは、さくらインターネット クラウドチームの大喜多です。
今回はさくらのクラウドのパケットフィルタを使用して、サーバのセキュリティを高める方法についてご説明します。
パケットフィルタの仕組みとその活用方法
パケットフィルタはNICに紐付いた通信を制御(通信の許可・拒否)します。以下の例では、Webサーバのインターネットに接続されている側のNICに対してパケットフィルタを適用しています。ウェブからのHTTP通信(ポート80/tcpプロトコル)とSSHのログイン(ポート22/tcpプロトコル)のみを許可し、サーバの安全性を高めます。
パケットフィルタの設定はコントロールパネルから変更することができますので、より安全に配慮するため"普段はポート80/tcpプロトコルのみ通信許可しておき、SSHを使用する際にのみポート22/tcpプロトコルの通信を許可する"ルールにするのも方法の1つです。
パケットフィルタの作成
さくらのクラウド コントロールパネル 左メニューの「パケットフィルタ」をクリックし、右上の「追加」をクリックします。
「web-filter」と名前を入力し、右下の「作成」をクリックします。
パケットフィルタの設定
左メニューの「パケットフィルタ」をクリックし、先ほど作成したパケットフィルタの行をダブルクリックします。
パケットフィルタのルールを追加するために、「ルール」タブをクリックし、右下の「追加」をクリックします。
ここでは、以下のスクリーンショットのように、SSH(tcp/22)、HTTP(tcp/80)、一般通信用ポート(tcp・udp/1024~65535)、icmp(PINGなど)の各アクションを許可(allow)し、それ以外は拒否(deny)する設定を追加します。ルールの順番も必ず以下のスクリーンショットと一緒になるように設定してください。
「追加」をクリックすると、ルール追加のダイアログが表示されます。
プロトコルは#1/#2/#3のときは「tcp」を、#4のときは「udp」を、#5のときは「icmp」を、#6のときは「ip」を選択してください。
送信元ネットワーク・送信元ポートは全ての場合で空欄で構いません。
宛先ポートは#1のときは「22」、#2のときは「80」、#3/#4のときは「1024-65535」と入力します。#5/#6の場合はポート指定は不要です(ポートを入力する項目自体が表示されません)。
アクションは#6のみ「deny」とし、それ以外は全て「allow」としてください。
パケットフィルタの適用
パケットフィルタを作成し、フィルタリングルールの設定が完了したら、サーバのNICにパケットフィルタを適用します。
サーバ作成時にパケットフィルタを選択して適用することができます。
また、作成済みのサーバのNICにパケットフィルタを選択して適用することも可能です(サーバの電源断の必要はありません)。
ステートレスとステートフル
ここで再度パケットフィルタのフィルタリングルールを見てみます。1行目はSSH(tcp/22)の許可、2行目はHTTP(tcp/80)の通信許可です。これは冒頭の説明にあった通りですが、3行目・4行目の一般通信用ポート(tcp・udp/1024~65535)の通信許可はなぜ必要なのでしょうか。
理由は2つあります。
- サーバからインターネットへの通信を許可するため
- クライアントからの通信の戻り通信を許可するため
ここでは後者について説明します。
NAT配下のクライアントがWebサーバにアクセスする際、送信元IPアドレスと送信元ポートは、グローバルIPアドレスと任意のハイポートに変換されます(これをNAPTといいます)。Webサーバはリクエストを受け付け、クライアントにレスポンスを返します。この場合、宛先IPアドレスと宛先ポートは、さきほどの送信元IPアドレスと送信元ポートになります。この通信を許可するためにも、3行目・4行目のフィルタリングルールが必要になってきます。これをステートレスと呼びます。一方で、リクエストに対してのレスポンスであることを自動認識して通信を許可する仕組みのことをステートフルといいます。ファイアウォール機器ではステートフルインスペクションなどと呼称します。さくらのクラウドのVPCルータ(プレミアム以上のプラン)も、ステートフルです。
このようにフィルタリングルールを設定し適切なセキュリティを保つためにも、従来のネットワークの知識が必要になってきます。クラウドの時代だからこそ、ITエンジニアには本質的な知識が求められるのだと思います。