前書き

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

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

このガイドを始める前に、ログインしてシェル環境を希望どおりに構成する必要があります。 これを行う方法については、https://www.digitalocean.com/community/tutorials/how-to-get-started-with-freebsd-10-1 [このガイド]をご覧ください。

単純な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つ目は、ファイアウォール構成スクリプトがバックグラウンドタスクとしてではなく、現在のシェル環境で実行されることです。 2つ目は、 `+ ipfw +`コマンドが「quiet」フラグのない設定スクリプトを読み取ると、各行を読み取って標準出力に出力することです。 行を出力すると、関連するアクションを*即座に*実行します。

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

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

. . .

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

最初に、設定するファイアウォールのタイプとして「ワークステーション」を選択します。 これは、適切なデフォルト動作を備えたステートフルファイアウォールです。 また、 `+ firewall_myservices `および ` firewall_allowservices `オプションを使用して、クライアントがアクセスできるようにするサービスを簡単にカスタマイズできます。 最後に、設定されたルールによって拒否された接続をログに記録するように「 ipfw +」を設定します。

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

firewall_myservices="ssh http"

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

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

`+ firewall_logdeny `オプションは、 ` / var / log / security `にあるファイルに対して拒否されたすべての接続試行を記録するように ` ipfw +`に指示します。

すべてをまとめると、 `+ / 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接続を許可する

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

sudo vi /etc/rc.firewall

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

. . .

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

. . .

このブロック内には、設定した「+ firewall_allowservices 」および「 firewall_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  to me

上記の例では、すべてのクライアントに対して接続を許可する必要がある場合は「any」キーワードを残すか、特定のIPアドレスまたはネットワーク範囲に変更できます。 上記の「+ 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  to me

これにより、「+ 192.168.2.0/24+」ネットワーク範囲内のすべてのクライアントが標準ポート53で動作するDNSサーバーにアクセスできるようになります。 この例では、より長い応答のためにDNSサーバーが使用するTCP接続用にこのポートを開くことにも注意してください。

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

ファイアウォールの開始

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

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または現地時間のどちらに設定されているかが尋ねられます。

image:https://assets.digitalocean.com/articles/freebsd_recommended/local_or_utc.png [FreeBSD UTCまたは現地時間]

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

image:https://assets.digitalocean.com/articles/freebsd_recommended/region.png [世界のFreeBSD地域]

次に、サブ地域または国を選択する必要があります。

image:https://assets.digitalocean.com/articles/freebsd_recommended/country.png [FreeBSD国]

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

image:https://assets.digitalocean.com/articles/freebsd_recommended/time.png [FreeBSDタイムゾーン]

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

この時点で、サーバーのタイムゾーンは選択したものと一致するはずです。

正確な時間を維持するようにNTPを構成する方法

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

繰り返しますが、 `+ / etc / rc.conf `ファイルを調整することで、サーバーでNTPサービスを有効にできます。 これを ` sudo +`権限で開きます:

sudo vi /etc/rc.conf

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

ntpd_enable="YES"

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

ntpd_enable="YES"

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

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

次のように入力して、 `+ ntpd +`サービスを開始できます。

sudo service ntpd start

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

余分なスワップ領域を構成する方法

DigitalOceanで構成されたFreeBSDサーバーでは、サーバーのサイズに関係なく、1ギガバイトのスワップスペースが自動的に構成されます。 これを確認するには、次のように入力します。

sudo swapinfo -g

これは次のようになります。

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

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

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

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

sudo truncate -s  /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同期、適切なスワップスペースなどの基本的な要素を設定することにより、サーバーを将来のインストールおよびサービスの優れたベースとして使用できます。