前書き
新しいFreeBSDサーバーをセットアップする場合、サーバーをより生産しやすい状態にするために実行できるオプションの手順がいくつかあります。 このガイドでは、最も一般的な例をいくつか取り上げます。
ほとんどのトラフィックを拒否するシンプルで設定しやすいファイアウォールを設定します。 また、サーバーのタイムゾーンがその場所を正確に反映するようにします。 サーバーの時刻を正確に保つためにNTPポーリングを設定し、最後にサーバーに追加のスワップスペースを追加する方法を示します。
このガイドを始める前に、ログインしてシェル環境を希望どおりに構成する必要があります。 これを行う方法については、https://www.digitalocean.com/community/tutorials/how-to-get-started-with-freebsd [このガイド]をご覧ください。
単純なIPFWファイアウォールを構成する方法
最初のタスクは、サーバーを保護するために簡単なファイアウォールを設定することです。
FreeBSDは3つの個別のファイアウォールをサポートし、それらを含んでいます。 これらは、「+ pf 」、「 ipfw 」、および「 ipfilter 」と呼ばれます。 このガイドでは、ファイアウォールとしてhttps://www.freebsd.org/doc/handbook/firewalls-ipfw.html [` ipfw `]を使用します。 ` ipfw +`は、FreeBSDの一部として記述および管理されている安全でステートフルなファイアウォールです。
基本ファイアウォールの構成
ほとんどすべての設定は `+ / etc / rc.conf`ファイルで行われます。 設定を変更するには、「+ sysrc 」コマンドを使用します。これにより、ユーザーは安全な方法で「 / etc / rc.conf 」の設定を変更できます。 このファイル内に、「 ipfw +」ファイアウォールがどのように機能するかを有効にして制御するために、いくつかの異なる行を追加します。 基本的なルールから始めます。次のコマンドを実行して開始します。
sudo sysrc firewall_enable="YES"
`+ sysrc +`を実行して設定を変更するたびに、変更を示す出力が表示されます:
Outputfirewall_enable: NO -> YES
ご想像のとおり、この最初のコマンドは `+ ipfw `ファイアウォールを有効にし、起動時に自動的に起動し、通常の ` service +`コマンドで起動できるようにします。
次を実行します。
sudo sysrc firewall_quiet="YES"
これは、特定のアクションを実行するときに標準出力に何も出力しないように「+ ipfw +」に指示します。 これは好みの問題のように思えるかもしれませんが、実際にはファイアウォールの機能に影響します。
2つの要因が組み合わさって、これが重要なオプションになります。 1つ目は、ファイアウォール構成スクリプトがバックグラウンドタスクとしてではなく、現在のシェル環境で実行されることです。 2つ目は、 `+ ipfw `コマンドが `" quiet "+`フラグなしで設定スクリプトを読み取るとき、各行を読み取って標準出力に出力することです。 行を出力すると、関連するアクションを*即座に*実行します。
ほとんどのファイアウォール構成ファイルは、スクリプトの先頭にある現在のルールをフラッシュして、新たに開始します。 `+ ipfw +`ファイアウォールがquietフラグなしでこのような行に出くわした場合、すぐにすべてのルールをフラッシュし、通常はすべての接続を拒否するデフォルトポリシーに戻ります。 SSH経由でファイアウォールを設定している場合、これにより接続が切断され、現在のシェルセッションが閉じられ、その後のルールは処理されず、事実上サーバーからロックアウトされます。 quietフラグを使用すると、ファイアウォールはルールを個別に実装する代わりに、ルールをセットとして処理できます。
これらの2行の後、ファイアウォールの動作の構成を開始できます。 次に、設定するファイアウォールのタイプとして「+」ワークステーション」+を選択します。
sudo sysrc firewall_type="workstation"
これにより、ファイアウォールを設定して、ステートフルルールを使用してファイアウォールを構成するサーバーを保護します。 _ステートフルファイアウォール_は、ネットワーク接続の状態を長期間監視し、これらの接続に関する情報を短時間メモリに保存します。 その結果、ファイアウォールが許可する接続に関するルールを定義できるだけでなく、ステートフルファイアウォールは、以前の接続について学習したデータを使用して、どの接続を確立できるかを評価することもできます。
`+ / etc / rc.conf `ファイルでは、 ` firewall_myservices `および ` firewall_allowservices +`オプションを使用して、クライアントがアクセスできるようにするサービスをカスタマイズすることもできます。
次のコマンドを実行して、SSH接続用のポート `+ 22 `や従来のHTTP Webサーバー用のポート ` 80 `など、サーバーでアクセス可能なポートを開きます。 WebサーバーでSSLを使用する場合は、ポート ` 443 +`を追加してください:
sudo sysrc firewall_myservices="22/tcp "
`+ firewall_myservices +`オプションは、サーバーでアクセスできるはずのスペースで区切られたTCPポートまたはサービスのリストに設定されます。
`+ firewall_allowservices `オプションは、提供されたサービスへのアクセスを許可する必要があるアイテムをリストします。 したがって、公開されたサービス( ` firewall_myservices `から)へのアクセスを特定のマシンまたはネットワーク範囲に制限できます。 たとえば、社内の社内ネットワークのWebコンテンツをマシンでホストする場合に便利です。 キーワード `" any "+`は、すべてのIPがこれらのサービスにアクセスでき、それらを完全に公開できることを意味します。
sudo sysrc firewall_allowservices="any"
`+ firewall_logdeny `オプションは、 ` / var / log / security `にあるファイルに対して拒否されたすべての接続試行を記録するように ` ipfw +`に指示します。 これを設定するには、次のコマンドを実行します。
sudo sysrc firewall_logdeny="YES"
ファイアウォールの構成に加えた変更を確認するには、次のコマンドを実行します。
grep 'firewall' /etc/rc.conf
`+ / etc / rc.conf +`ファイルのこの部分は次のようになります。
Outputfirewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_myservices="22 "
firewall_allowservices="any"
firewall_logdeny="YES"
`+ firewall_myservices +`オプションを調整して、クライアントに公開したいサービスを参照することを忘れないでください。
UDP接続の許可(オプション)
`+ / etc / rc.conf `ファイルの ` firewall_myservices `オプションにリストされているポートとサービスは、TCP接続へのアクセスを許可します。 https://en.wikipedia.org/wiki/User_Datagram_Protocol[UDP]を使用して公開したいサービスがある場合は、 ` / etc / rc.firewall +`ファイルを編集する必要があります。
sudo vi /etc/rc.firewall
`" workstation "`ファイアウォールタイプを使用するようにファイアウォールを設定したため、次のようなセクションを探してください。
/etc/rc.firewall
. . .
[Ww][Oo][Rr][Kk][Ss][Tt][Aa][Tt][Ii][Oo][Nn])
. . .
このブロック内には、設定した `+ firewall_allowservices `および ` firewall_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 to me
「+ vi 」で「 i 」を押して「 INSERT 」モードに切り替えてコンテンツを追加し、「 ESC 」を押して「:wq 」と入力し、「 ENTER 」を押してファイルを保存して閉じます。 前の例では、すべてのクライアントに接続を許可するか、特定のIPアドレスまたはネットワーク範囲に接続を変更する必要がある場合は、「」「any」」キーワードをそのままにしておくことができます。 ` 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 "`に制限できます。
/etc/sysctl.conf
...
net.inet.ip.fw.verbose_limit=5
完了したら、ファイルを保存して閉じます。 これにより、次回の起動時にその設定が構成されます。
再起動せずに現在アクティブなセッションにこれと同じ動作を実装するには、次のように `+ sysctl +`コマンド自体を使用できます。
sudo sysctl net.inet.ip.fw.verbose_limit=5
これにより、このブートの制限がすぐに実装されます。
サーバーのタイムゾーンを設定する方法
サーバーのタイムゾーンを正しく設定することをお勧めします。 これは、次のセクションでNTP時刻同期を構成する場合の重要な手順です。
FreeBSDには、タイムゾーンを設定するための `+ tzsetup `と呼ばれるメニューベースのツールが付属しています。 サーバーのタイムゾーンを設定するには、 ` sudo +`権限でこのコマンドを呼び出します:
sudo tzsetup
まず、サーバーが置かれている世界の地域を選択するよう求められます。
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サービスを有効にできます。 次のコマンドを実行して、ファイルに行 ` ntpd_enable =" YES "+`を追加します。
sudo sysrc ntpd_enable="YES"
また、起動時にマシン上の時刻をリモートNTPサーバーと同期させる2行目を追加する必要があります。 これは、サーバーが初期化時に通常のドリフト制限を超えることができるためです。 NTPデーモンが起動する前にタイムゾーンが適用され、システム時間が相殺されるため、サーバーは起動時にドリフト制限の範囲外になる可能性があります。
sudo sysrc ntpd_sync_on_start="YES"
この行がない場合、起動プロセスの前にシステム時間を歪めるタイムゾーン設定が原因で、起動時にNTPデーモンが失敗します。
次のように入力して、 `+ ntpd +`サービスを開始できます。
sudo service ntpd start
これにより、 `+ / etc / ntp.conf +`にリストされているNTPサーバーと同期することにより、サーバーの時間が維持されます。
余分なスワップ領域を構成する方法
DigitalOceanで構成されたFreeBSDサーバーでは、サーバーのサイズに関係なく、1ギガバイトのhttps://www.freebsd.org/doc/handbook/adding-swap-space.html[swap space]が自動的に構成されます。 これを確認するには、次のように入力します。
sudo swapinfo -g
これは次のようになります。
OutputDevice 1G-blocks Used Avail Capacity
/dev/gpt/swapfs 1 0 1 0%
一部のユーザーおよびアプリケーションでは、これよりも多くのスワップ領域が必要になる場合があります。 これは、スワップファイルを追加することで実現されます。
最初に行う必要があるのは、スワップに使用するファイルにファイルシステムのチャンクを割り当てることです。 `+ truncate +`コマンドを使用します。これにより、その場ですばやく領域を割り当てることができます。
このチュートリアルではスワップファイルを `+ / swapfile `に配置しますが、たとえば ` / var / swapfile `のように、ファイルを好きな場所に配置できます。 このファイルは、追加の1ギガバイトのスワップスペースを提供します。 ` -s +`オプションに与えられた値を変更することでこの数を調整できます:
sudo truncate -s /swapfile
スペースを割り当てた後、ファイルへのアクセスをロックダウンする必要があります。 通常のユーザーは、ファイルへのアクセス権を持ってはいけません。
sudo chmod 0600 /swapfile
次に、擬似デバイスをファイルに関連付け、次のように入力してブート時にマウントするように構成します。
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 +`ファイルに行が追加されたら、次のように入力してセッションのスワップファイルをアクティブにできます。
sudo swapon -aqL
再度 `+ swapinfo +`コマンドを使用して、スワップファイルが機能していることを確認できます。
sudo swapinfo -g
スワップファイルに関連付けられた追加のデバイス( + / dev / md99 +
)が表示されるはずです。
OutputDevice 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同期、適切なスワップスペースなどの基本的な要素を設定することにより、サーバーを将来のインストールおよびサービスの優れたベースとして使用できます。