序章

新しいFreeBSDサーバーをセットアップするとき、サーバーをより生産に適した状態にするために実行できるいくつかのオプションのステップがあります。 このガイドでは、最も一般的な例のいくつかを取り上げます。

ほとんどのトラフィックを拒否する、シンプルで構成が簡単なファイアウォールを設定する方法について説明します。 また、サーバーのタイムゾーンがその場所を正確に反映していることを確認します。 サーバーの時刻を正確に保つためにNTPポーリングを設定し、最後に、サーバーにスワップスペースを追加する方法を示します。

このガイドを開始する前に、ログインしてシェル環境を希望どおりに構成する必要があります。 このガイドに従って、これを行う方法を見つけることができます。

Note: As of July 1, 2022, DigitalOcean no longer supports the creation of new FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.

シンプルなIPFWファイアウォールを構成する方法

最初に取り組むタスクは、サーバーを保護するための単純なファイアウォールを設定することです。

FreeBSDは、実際には3つの個別のファイアウォールをサポートしており、それぞれに長所と短所があります。 これらは呼ばれます pf, ipfw、 と ipfilter. このガイドでは、 ipfw 安全でステートフルなファイアウォールを使用して、簡単に稼働させることができるからです。

基本ファイアウォールの構成

ほとんどすべての構成は、 /etc/rc.conf ファイル。 そのファイルを sudo エディターでの特権:

sudo vi /etc/rc.conf

内部では、方法を有効にして制御するために、いくつかの異なる行を追加する必要があります ipfw ファイアウォールが機能します。 基本的なルールから始めましょう。 これらをファイルの最後に追加します。

. . .

firewall_enable="YES"
firewall_quiet="YES"

ご想像のとおり、最初の行で ipfw ファイアウォール、起動時に自動的に起動し、通常の状態で起動できるようにします service コマンド。

2番目のコマンドは ipfw 特定のアクションを実行するときに、標準出力に何も出力しないようにします。 これは好みの問題のように見えるかもしれませんが、実際にはファイアウォールの機能に影響を与えます。

2つの要素が組み合わさって、これが重要なオプションになります。 1つは、ファイアウォール構成スクリプトがバックグラウンドタスクとしてではなく、現在のシェル環境で実行されることです。 二つ目は、 ipfw コマンドは、「quiet」フラグなしで構成スクリプトを読み取り、各行を読み取り、標準出力に出力します。 行を出力すると、すぐに関連するアクションを実行します。

ほとんどのファイアウォール構成ファイルは、クリーンな状態から始めるために、スクリプトの上部にある現在のルールをフラッシュします。 の場合 ipfw ファイアウォールは、クワイエットフラグなしでこのような回線に遭遇すると、すぐにすべてのルールをフラッシュし、通常はすべての接続を拒否するデフォルトのポリシーに戻ります。 SSH経由でファイアウォールを構成している場合、これにより接続が切断され、現在のシェルセッションが閉じられ、その後のルールは処理されず、サーバーから効果的にロックアウトされます。 クワイエットフラグを使用すると、ファイアウォールは基本的に、ルールを個別に実装するのではなく、ルールをセットとして処理できます。

これらの2行の後で、ファイアウォールの動作の構成を開始できます。

. . .

firewall_type="workstation"
firewall_myservices="22 80"
firewall_allowservices="any"
firewall_logdeny="YES"

まず、構成するファイアウォールの種類として「ワークステーション」を選択します。 これはステートフルファイアウォールであり、デフォルトで適切に動作します。 また、を使用してクライアントがアクセスできるようにするサービスを簡単にカスタマイズすることもできます。 firewall_myservicesfirewall_allowservices オプション。 最後に、構成します ipfw 構成されたルールによって拒否された接続をログに記録します。

The firewall_myservices オプションは、サーバーでアクセスできるTCPポートまたはサービスのリストにスペースで区切って設定する必要があります。 ここにあるように、ポートを使用できます(SSH接続用にポート22を構成し、従来のHTTP Webサーバー用にポート80を構成しました)。 名前でサービスを使用することもできます。 FreeBSDが名前で知っているサービスは、 /etc/services ファイル。 たとえば、上記を次のように変更できます。

firewall_myservices="ssh http"

これでも同じ結果になります。 WebサーバーでSSLを使用する場合は、必ずいずれかのポートを追加してください 443 または https このリストへのサービス。

The firewall_allowservices リストアイテムは、提供されたサービスへのアクセスを許可する必要があるクライアントです。 キーワード「any」は、すべてのクライアントがこれらのサービスにアクセスできることを意味します。 サービスに接続できるクライアントを制限したい場合は、ここで行うことができます。

The firewall_logdeny オプションは教えます ipfw にあるファイルへの拒否されたすべての接続試行をログに記録する /var/log/security.

一緒に、この部分の /etc/rc.conf ファイルは次のようになります。

. . .

firewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_myservices="22 80"
firewall_allowservices="any"
firewall_logdeny="YES"

調整することを忘れないでください firewall_myservices クライアントに公開したいサービスを参照するオプション。 終了したら、ファイルを保存して閉じます。

UDP接続の許可

にリストされているポートとサービス firewall_myservices のオプション /etc/rc.conf ファイルはTCP接続へのアクセスを許可します。 UDPを使用して公開したいサービスがある場合は、 /etc/rc.firewall ファイル:

sudo vi /etc/rc.firewall

「ワークステーション」ファイアウォールタイプを使用するようにファイアウォールを構成したので、次のようなセクションを探します。

. . .

[Ww][Oo][Rr][Kk][Ss][Tt][Aa][Tt][Ii][Oo][Nn])

. . .

このブロック内には、処理専用のセクションがあります。 firewall_allowservicesfirewall_myservices 設定した値。 次のようになります。

for i in ${firewall_allowservices} ; do
  for j in ${firewall_myservices} ; do
    ${fwcmd} add pass tcp from $i to me $j
  done
done

このセクションの後に、次のような行を追加することで、UDPパケットを受け入れる必要のあるサービスまたはポートを追加できます。

${fwcmd} add pass udp from any to me port_num

上記の例では、接続をすべてのクライアントに許可するか、特定のIPアドレスまたはネットワーク範囲に変更する必要がある場合は、「any」キーワードを残すことができます。 The port_num 上記では、UDPアクセスを許可するポート番号またはサービス名に置き換える必要があります。 たとえば、DNSサーバーを実行している場合は、次のような行が必要になる場合があります。

for i in ${firewall_allowservices} ; do
  for j in ${firewall_myservices} ; do
    ${fwcmd} add pass tcp from $i to me $j
  done
done

${fwcmd} add pass udp from 192.168.2.0/24 to me 53

これにより、 192.168.2.0/24 標準ポート53で動作するDNSサーバーにアクセスするためのネットワーク範囲。 この例では、このポートをTCP接続用に開いておく必要があることに注意してください。これは、DNSサーバーがより長い応答のために使用するためです。

終了したら、ファイルを保存して閉じます。

ファイアウォールの開始

構成が完了したら、次のように入力してファイアウォールを開始できます。

sudo service ipfw start

ファイアウォールは正しく起動し、許可されたサービスとポートを順守しながら不要なトラフィックをブロックする必要があります。 このファイアウォールは、起動するたびに自動的に起動します。

また、ログに記録するIPアドレスごとの拒否数の制限を構成する必要があります。 これにより、単一の永続的なユーザーからログがいっぱいになるのを防ぐことができます。 あなたはでこれを行うことができます /etc/sysctl.conf ファイル:

sudo vi /etc/sysctl.conf

ファイルの下部で、次を追加することにより、ログを「5」に制限できます。

net.inet.ip.fw.verbose_limit=5 

終了したら、ファイルを保存して閉じます。 これにより、次回の起動時にその設定が構成されます。

現在アクティブなセッションにこれと同じ動作を実装するために、 sysctl 次のように、コマンド自体:

sudo sysctl net.inet.ip.fw.verbose_limit=5

これにより、このブートの制限がすぐに実装されます。

サーバーのタイムゾーンを設定する方法

サーバーのタイムゾーンを正しく設定することをお勧めします。 これは、次のセクションでNTP時刻同期を構成する際の重要な手順です。

FreeBSDには、と呼ばれるメニューベースのツールが付属しています tzsetup タイムゾーンを設定します。 サーバーのタイムゾーンを設定するには、次のコマンドでこのコマンドを呼び出します。 sudo 特権:

sudo tzsetup

ハードウェアクロックがUTCに設定されているか現地時間に設定されているかを尋ねる最初のメニュー画面が表示されます。

ここで「いいえ」を選択します。 次に、サーバーが配置されている世界の地域を選択するように求められます。

次に、サブリージョンまたは国を選択する必要があります。

最後に、サーバーに適した特定のタイムゾーンを選択します。

選択に基づいて表示されるタイムゾーンの選択を確認します。

この時点で、サーバーのタイムゾーンは選択内容と一致している必要があります。

正確な時間を維持するためにNTPを設定する方法

サーバーでタイムゾーンを構成したので、サーバーでNTP(Network Time Protocol)を設定できます。 これにより、サーバーの時刻を世界中の他のサーバーと同期させることができます。 これは、時間に敏感なクライアント/サーバーの相互作用と正確なロギングにとって重要です。

繰り返しますが、サーバーでNTPサービスを有効にするには、 /etc/rc.conf ファイル。 これを開く sudo 特権:

sudo vi /etc/rc.conf

このファイル内に、次の行を追加します。

ntpd_enable="YES"

また、マシンの時刻を起動時にリモートNTPサーバーと同期する2行目を追加する必要があります。 これが必要なのは、サーバーが初期化時に通常のドリフト制限を超えることができるためです。 NTPデーモンが起動する前にタイムゾーンが適用されるため、サーバーは起動時にドリフト制限の範囲外になる可能性があります。これにより、システム時間が相殺されます。

ntpd_enable="YES"
ntpd_sync_on_start="YES"

この行がない場合、起動プロセスの前にシステム時間を歪めるタイムゾーン設定が原因で、起動時にNTPデーモンが失敗します。

終了したら、ファイルを保存して閉じます。

あなたはあなたを始めることができます ntpd 次のように入力してサービスを提供します。

sudo service ntpd start

これにより、にリストされているNTPサーバーと同期することにより、サーバーの時間が維持されます。 /etc/ntp.conf.

追加のスワップスペースを構成する方法

You can check how much swap space your server has with the following command:

sudo swapinfo -g

次のように表示されます。

Device          1G-blocks     Used    Avail Capacity
/dev/gpt/swapfs         1        0        1     0%

一部のユーザーとアプリケーションは、これよりも多くのスワップスペースを必要とする場合があります。 これは、スワップファイルを追加することで簡単に実行できます。

最初に行う必要があるのは、スワップに使用するファイルにファイルシステムのチャンクを割り当てることです。 を使用します truncate コマンド。その場でスペースをすばやく割り当てることができます。

このガイドでは、スワップファイルを次の場所に配置します。 /swapfile、ただし、ファイルシステム内の任意の適切な場所を使用できます。 このファイルは、追加の1ギガバイトのスワップスペースを提供します。 に与えられた値を変更することにより、この数を調整できます。 -s オプション。

sudo truncate -s 1G /swapfile

スペースを割り当てたら、ファイルへのアクセスをロックダウンする必要があります。 通常のユーザーは、ファイルにアクセスできないようにする必要があります。

sudo chmod 0600 /swapfile

次に、疑似デバイスをファイルに関連付け、次のように入力して起動時にマウントするように構成します。

sudo sh -c 'echo "md99 none swap sw,file=/swapfile,late 0 0" >> /etc/fstab'

上記のコマンドは、次のような行をに追加します /etc/fstab ファイル:

md99 none swap sw,file=/swapfile,late 0 0

行が追加された後 /etc/fstab ファイルの場合、次のように入力して、セッションのスワップファイルをアクティブ化できます。

sudo swapon -aqL

を使用して、スワップファイルが機能していることを確認できます。 swapinfo もう一度コマンド:

sudo swapinfo -g

追加のデバイスが表示されます(/dev/md99)スワップファイルに関連付けられています:

Device          1G-blocks     Used    Avail Capacity
/dev/gpt/swapfs         1        0        1     0%
/dev/md99               1        0        1     0%
Total                   2        0        2     0%

このスワップファイルは、起動するたびに自動的にマウントされます。

結論

このガイドで概説されているステップは、FreeBSDサーバーをより本番環境に対応した状態にするために使用できます。 ファイアウォール、NTP同期、適切なスワップスペースなどの基本的な要素を構成することで、サーバーを将来のインストールやサービスの優れたベースとして使用できます。