新FreeBSD10.1服务器的推荐步骤
介绍
在设置新的 FreeBSD 服务器时,您可以采取许多可选步骤来使您的服务器进入对生产更友好的状态。 在本指南中,我们将介绍一些最常见的示例。
我们将介绍如何设置一个简单、易于配置的防火墙来拒绝大多数流量。 我们还将确保您服务器的时区准确反映其位置。 我们将设置 NTP 轮询以保持服务器的时间准确,最后,我们将演示如何为您的服务器添加一些额外的交换空间。
在开始使用本指南之前,您应该登录并按照您喜欢的方式配置您的 shell 环境。 您可以按照 本指南 了解如何执行此操作。
如何配置简单的 IPFW 防火墙
我们要解决的第一个任务是设置一个简单的防火墙来保护我们的服务器。
FreeBSD 实际上支持并包括三个独立的防火墙,每个防火墙都有自己的优点和缺点。 这些称为 pf
、ipfw
和 ipfilter
。 在本指南中,我们将使用 ipfw
,因为我们可以使用安全、有状态的防火墙轻松启动并运行。
配置基本防火墙
我们几乎所有的配置都将在 /etc/rc.conf
文件中进行。 在编辑器中使用 sudo
权限打开该文件:
sudo vi /etc/rc.conf
在内部,我们将不得不添加许多不同的行来启用和控制 ipfw
防火墙的功能。 让我们从基本规则开始。 将这些添加到文件的底部:
. . . firewall_enable="YES" firewall_quiet="YES"
如您所料,第一行启用 ipfw
防火墙,在启动时自动启动它并允许使用通常的 service
命令启动它。
第二个命令告诉 ipfw
在执行某些操作时不要将任何内容输出到标准输出。 这似乎是一个偏好问题,但它实际上会影响防火墙的功能。
两个因素相结合,使其成为一个重要的选择。 首先是防火墙配置脚本是在当前shell环境中执行的,而不是作为后台任务。 第二个是当 ipfw
命令读取没有“quiet”标志的配置脚本时,它依次读取并输出每一行到标准输出。 当它输出一行时,它立即执行相关的动作。
大多数防火墙配置文件都会在脚本顶部刷新当前规则,以便从头开始。 如果 ipfw
防火墙遇到这样的没有安静标志的行,它将立即刷新所有规则并恢复其默认策略,通常是拒绝所有连接。 如果您通过 SSH 配置防火墙,这将断开连接,关闭当前的 shell 会话,并且不会处理任何后续规则,从而有效地将您锁定在服务器之外。 安静标志基本上允许防火墙将规则作为一组处理,而不是单独实施每个规则。
在这两行之后,我们可以开始配置防火墙的行为:
. . . 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
选项告诉 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 连接
/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 any to me port_num
在上面的示例中,如果所有客户端都应允许连接,则可以保留“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 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 或网络时间协议。 这将有助于使您的服务器时间与世界各地的其他人保持同步。 这对于时间敏感的客户端-服务器交互以及准确的日志记录非常重要。
同样,我们可以通过调整 /etc/rc.conf
文件在我们的服务器上启用 NTP 服务。 使用 sudo
权限打开它:
sudo vi /etc/rc.conf
在此文件中,添加以下行:
ntpd_enable="YES"
我们还需要添加第二行,以便在启动时将我们机器上的时间与远程 NTP 服务器同步。 这是必要的,因为它允许我们的服务器在初始化时超过正常的漂移限制。 我们的服务器可能会在启动时超出漂移限制,因为我们的时区将在 NTP 守护程序启动之前应用,这将抵消我们的系统时间:
ntpd_enable="YES" ntpd_sync_on_start="YES"
如果我们没有这条线,我们的 NTP 守护程序在启动时会失败,因为时区设置会在启动过程中扭曲我们的系统时间。
完成后保存并关闭文件。
您可以通过键入以下命令启动 ntpd
服务:
sudo service ntpd start
这将通过与 /etc/ntp.conf
中列出的 NTP 服务器同步来保持服务器的时间。
如何配置额外的交换空间
在 DigitalOcean 上配置的 FreeBSD 服务器上,无论您的服务器大小如何,都会自动配置 1 GB 的交换空间。 您可以通过键入以下内容来查看:
sudo swapinfo -g
它应该显示如下内容:
Device 1G-blocks Used Avail Capacity /dev/gpt/swapfs 1 0 1 0%
一些用户和应用程序可能需要比这更多的交换空间。 这很容易通过添加交换文件来完成。
我们需要做的第一件事是为我们想要用于交换的文件分配一块文件系统。 我们将使用 truncate
命令,它可以快速分配空间。
在本指南中,我们将交换文件放在 /swapfile
,但您可以使用文件系统中的任何合理位置。 该文件将提供额外的 1 GB 交换空间。 您可以通过修改 -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 同步和适当的交换空间等基本要素,您的服务器可以用作未来安装和服务的良好基础。