序章

新しい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を使用します。 ipfw は、FreeBSDの一部として作成および保守されている、安全でステートフルなファイアウォールです。

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

ほとんどすべての構成は、 /etc/rc.conf ファイル。 構成を変更するには、 sysrc コマンド。ユーザーはで構成を変更できます。 /etc/rc.conf 安全な方法で。 このファイル内にいくつかの異なる行を追加して、 ipfw ファイアウォールが機能します。 基本的なルールから始めます。 次のコマンドを実行して開始します。

  1. sudo sysrc firewall_enable="YES"

実行するたびに sysrc 構成を変更するには、変更を示す出力が表示されます。

Output
firewall_enable: NO -> YES

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

次に、以下を実行します。

  1. sudo sysrc firewall_quiet="YES"

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

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

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

これらの2行の後で、ファイアウォールの動作の構成を開始できます。 今選択 "workstation" 構成するファイアウォールのタイプとして:

  1. sudo sysrc firewall_type="workstation"

これにより、ステートフルルールを使用してファイアウォールを構成しているサーバーを保護するようにファイアウォールが設定されます。 ステートフルファイアウォールは、ネットワーク接続の状態を経時的に監視し、これらの接続に関する情報をメモリに短時間保存します。 その結果、ファイアウォールが許可する接続に関するルールを定義できるだけでなく、ステートフルファイアウォールは、以前の接続について学習したデータを使用して、作成できる接続を評価することもできます。

The /etc/rc.conf ファイルを使用すると、クライアントがアクセスできるようにするサービスをカスタマイズすることもできます。 firewall_myservicesfirewall_allowservices オプション。

次のコマンドを実行して、サーバーでアクセスできるはずのポート(ポートなど)を開きます。 22 SSH接続とポート用 80 従来のHTTPWebサーバーの場合。 WebサーバーでSSLを使用する場合は、必ずポートを追加してください 443:

  1. sudo sysrc firewall_myservices="22/tcp 80/tcp 443/tcp"

The firewall_myservices オプションは、サーバー上でアクセス可能である必要がある、スペースで区切られたTCPポートまたはサービスのリストに設定されます。

注:名前でサービスを使用することもできます。 FreeBSDが名前で知っているサービスは、 /etc/services ファイル。 たとえば、前のコマンドを次のように変更できます。

  1. firewall_myservices="ssh http https"

これでも同じ結果になります。

The firewall_allowservices オプションは、提供されたサービスへのアクセスを許可する必要があるアイテムをリストします。 したがって、公開されたサービスへのアクセスを制限できます( firewall_myservices)特定のマシンまたはネットワーク範囲に。 たとえば、これは、社内ネットワークのWebコンテンツをマシンでホストする場合に役立ちます。 キーワード "any" つまり、すべてのIPがこれらのサービスにアクセスして、完全にパブリックにすることができます。

  1. sudo sysrc firewall_allowservices="any"

The firewall_logdeny オプションは教えます ipfw にあるファイルへの拒否されたすべての接続試行をログに記録する /var/log/security. これを設定するには、次のコマンドを実行します。

  1. sudo sysrc firewall_logdeny="YES"

ファイアウォール構成に加えた変更を確認するには、次のコマンドを実行します。

  1. grep 'firewall' /etc/rc.conf

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

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

調整することを忘れないでください firewall_myservices クライアントに公開したいサービスを参照するオプション。

UDP接続の許可(オプション)

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

  1. sudo vi /etc/rc.firewall

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

/etc/rc.firewall
. . .

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

. . .

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

/etc/rc.firewall
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

vi、 押す i に切り替えるには INSERT モードにしてコンテンツを追加し、を押してファイルを保存して閉じます ESC、入力 :wq、を押します ENTER. 前の例では、 "any" 接続をすべてのクライアントに許可するか、特定のIPアドレスまたはネットワーク範囲に変更する必要がある場合はキーワード。 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 標準ポートで動作するDNSサーバーにアクセスするためのネットワーク範囲 53. この例では、このポートをTCP接続用に開いておく必要があることに注意してください。これは、DNSサーバーがより長い応答のために使用するためです。

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

ファイアウォールの開始

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

  1. sudo service ipfw start

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

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

  1. sudo vi /etc/sysctl.conf

ファイルの下部で、ログを次のように制限できます "5" 次の行を追加します。

/etc/sysctl.conf
...
net.inet.ip.fw.verbose_limit=5

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

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

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

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

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

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

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

  1. sudo tzsetup

まず、サーバーが配置されている世界の地域を選択するように求められます。

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

注:これらのメニューをナビゲートするには、 PAGE UPPAGE DOWN キー。 キーボードにこれらがない場合は、次を使用できます FN + DOWN また FN + UP.

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

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

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

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

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

繰り返しになりますが、サーバーでNTPサービスを有効にするには、 /etc/rc.conf ファイル。 次のコマンドを実行して、行を追加します ntpd_enable="YES" ファイルへ:

  1. sudo sysrc ntpd_enable="YES"

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

  1. sudo sysrc ntpd_sync_on_start="YES"

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

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

  1. sudo service ntpd start

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

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

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

  1. sudo swapinfo -g

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

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

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

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

スワップファイルを入れます /swapfile このチュートリアルでは、ファイルを好きな場所に置くことができます。 /var/swapfile 例えば。 このファイルは、追加の1ギガバイトのスワップスペースを提供します。 に与えられた値を変更することにより、この数を調整できます。 -s オプション:

  1. sudo truncate -s 1G /swapfile

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

  1. sudo chmod 0600 /swapfile

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

  1. echo "md99 none swap sw,file=/swapfile,late 0 0" | sudo tee -a /etc/fstab

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

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

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

  1. sudo swapon -aqL

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

  1. sudo swapinfo -g

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

Output
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同期、適切なスワップスペースなどの基本的な要素を構成することで、サーバーを将来のインストールやサービスの優れたベースとして使用できます。