介绍
在设置新的 FreeBSD 服务器时,您可以采取一系列可选步骤,以使您的服务器进入更为生产友好的状态,在本指南中,我们将介绍一些最常见的例子。
我们将讨论如何设置一个简单易于配置的防火墙,以否定大多数流量,我们还将确保您的服务器的时区准确地反映其位置,我们将设置NTP调查,以保持服务器的时间准确,最后,我们将展示如何为您的服务器添加一些额外的交换空间。
在您开始使用本指南之前,您应该登录并以您想要的方式配置您的壳环境,您可以通过遵循 此指南来了解如何做到这一点。
<$>[注] **注:**截至2022年7月1日,DigitalOcean不再支持通过控制面板或API创建新的FreeBSD Droplets。
如何设置一个简单的IPFW防火墙
我们将解决的第一个任务是设置一个简单的防火墙来保护我们的服务器。
FreeBSD实际上支持并包括三个单独的防火墙,每个都有自己的优势和弱点. 这些被称为pf
、ipfw
和ipfilter
。
设置基本防火墙
我们几乎所有的配置都会在 /etc/rc.conf
文件中进行。
1sudo vi /etc/rc.conf
内部,我们将不得不添加一些不同的行来启用和控制ipfw
防火墙将如何运作. 让我们从基本的规则开始。
1. . .
2
3firewall_enable="YES"
4firewall_quiet="YES"
正如您所期望的那样,第一行启用了ipfw
防火墙,在启动时自动启动,并允许使用通常的服务
命令启动。
第二个命令告诉ipfw在执行某些操作时不要输出任何标准,这可能看起来像是一个偏好问题,但实际上影响了防火墙的功能。
两个因素相结合,使这成为一个重要的选择. 第一种是,防火墙配置脚本在当前的壳环境中执行,而不是作为背景任务。 第二种是,当ipfw
命令读取配置脚本而没有安静
旗帜时,它会读取并输出每个行,反过来,以标准化。
大多数防火墙配置文件会清除脚本顶部的当前规则,以便开始使用清洁的板块。如果ipfw
防火墙在没有安静的旗帜的情况下遇到这样的行,它会立即清除所有规则,并返回默认的策略,这通常是否定所有连接。
在这两个行之后,我们可以开始配置防火墙的行为:
1. . .
2
3firewall_type="workstation"
4firewall_myservices="22 80"
5firewall_allowservices="any"
6firewall_logdeny="YES"
首先,我们选择工作站
作为我们将配置的防火墙类型。这是一个具有一些良好的默认行为的状态防火墙。它还允许我们通过使用防火墙_myservices
和防火墙_allowservices
选项轻松定制我们希望客户能够访问的服务。
防火墙_myservices
选项应该设置为一个列表的TCP端口或服务,以空间分开,应该在您的服务器上可访问。您可以使用这些端口,就像我们在这里(我们为我们的SSH连接配置了端口22和传统HTTP网络服务器的端口80)。
1firewall_myservices="ssh http"
如果您在您的网页服务器上使用SSL,请确保将443
端口或https
服务添加到此列表中。
firewall_allowservices
列表项目是应该允许访问提供的服务的客户端。关键字任何
意味着任何客户端都可以访问这些服务。
firewall_logdeny
选项告诉ipfw
记录所有被拒绝连接的尝试到位于/var/log/security
的文件。
总的来说,这个 /etc/rc.conf
文件的部分应该是这样的:
1. . .
2
3firewall_enable="YES"
4firewall_quiet="YES"
5firewall_type="workstation"
6firewall_myservices="22 80"
7firewall_allowservices="any"
8firewall_logdeny="YES"
请记住调整防火墙_myservices
选项以参考您想向客户提供的服务. 完成后,保存并关闭文件。
允许 UDP 连接
文件 /etc/rc.conf 中的
firewall_myservices选项中列出的端口和服务允许访问 TCP 连接. 如果您有想要暴露使用 UDP 的服务,则需要编辑
/etc/rc.firewall` 文件:
1sudo vi /etc/rc.firewall
我们将我们的防火墙配置为使用工作站
防火墙类型,所以请寻找看起来像这样的部分:
1. . .
2
3[Ww][Oo][Rr][Kk][Ss][Tt][Aa][Tt][Ii][Oo][Nn])
4
5. . .
该区块内有一个专门用于处理我们设置的firewall_allowservices
和firewall_myservices
值的部分。
1for i in ${firewall_allowservices} ; do
2 for j in ${firewall_myservices} ; do
3 ${fwcmd} add pass tcp from $i to me $j
4 done
5done
在本节之后,您可以添加任何应该接受UDP包的服务或端口,如下所示:
1${fwcmd} add pass udp from any to me port_num
在上面的示例中,如果要允许所有客户端的连接,您可以留下任何
关键字,或者将其更改为特定 IP 地址或网络范围。上面的port_num
应该被您希望允许 UDP 访问的端口号或服务名称取代。
1for i in ${firewall_allowservices} ; do
2 for j in ${firewall_myservices} ; do
3 ${fwcmd} add pass tcp from $i to me $j
4 done
5done
6
7${fwcmd} add pass udp from 192.168.2.0/24 to me 53
这将允许任何来自192.168.2.0/24
网络范围内的客户端访问运行在标准端口上的DNS服务器 53. 请注意,在本示例中,您还希望为TCP连接打开该端口,因为它被DNS服务器用于更长的响应。
保存并关闭文件,当你完成。
启动防火墙
当您完成配置后,您可以通过键入启动防火墙:
1sudo service ipfw start
防火墙应正确出现,阻止不必要的流量,同时坚持允许的服务和端口. 此防火墙将在每次启动时自动启动。
我们还希望对每 IP 地址我们将登录的拒绝数量设置限制,这将防止我们的日志从单个持久的用户中填充。
1sudo vi /etc/sysctl.conf
在文件的底部,我们可以将我们的日志限制为5
通过添加:
1net.inet.ip.fw.verbose_limit=5
保存并关闭文件,当你完成. 这将配置该设置在下一个启动。
要在您目前活跃的会话中执行相同的行为,我们可以使用sysctl
命令本身,如下:
1sudo sysctl net.inet.ip.fw.verbose_limit=5
这应该立即实施此 boot 的限制。
如何为您的服务器设置时区
正确设置服务器的时区是一个好主意,这是我们在下一节配置NTP时间同步时的一个重要步骤。
FreeBSD 提供一个名为tzsetup
的基于菜单的工具来配置时区. 为了为您的服务器设置时区,请将此命令称为sudo
特权:
1sudo tzsetup
您将看到第一个菜单屏幕,询问您的硬件时钟是否设置为UTC或本地时间:
接下来,您将被要求选择您的服务器位于世界的区域:
您需要选择下一个子区域或国家:
最后,选择适合您的服务器的特定时区:
确认基于您的选择的时区选择。
在此时刻,您的服务器的时区应匹配您所做的选择。
如何配置NTP以保持准确的时间
现在我们已经在我们的服务器上配置了时区,我们可以在我们的服务器上设置NTP或网络时间协议,这将有助于保持您的服务器的时间与世界各地的其他人同步。
再次,我们可以通过调整 /etc/rc.conf
文件在我们的服务器上启用 NTP 服务。
1sudo vi /etc/rc.conf
在此文件中,添加以下行:
1ntpd_enable="YES"
我们还需要添加第二行,它将同步我们机器上的时间与在启动时的远程NTP服务器。这是必要的,因为它允许我们的服务器在初始化时超出正常的转移限制。
1ntpd_enable="YES"
2ntpd_sync_on_start="YES"
如果我们没有这个线,我们的NTP大象在启动时会失败,因为该时区设置在启动过程中扭曲了我们的系统时间。
保存并关闭文件,当你完成。
您可以通过键入开始您的ntpd
服务:
1sudo service ntpd start
这将通过同步与在 `/etc/ntp.conf 中列出的 NTP 服务器来维持您的服务器的时间。
如何配置额外的交换空间
您可以通过以下命令检查您的服务器有多少交换空间:
1sudo swapinfo -g
它应该显示这样的东西:
1Device 1G-blocks Used Avail Capacity
2/dev/gpt/swapfs 1 0 1 0%
有些用户和应用程序可能需要比这更多的交换空间,通过添加交换文件来轻松实现。
我们需要做的第一件事是为我们想要用来交换的文件分配一小部分文件系统,我们将使用truncate
命令,该命令可以快速分配飞行空间。
在本指南中,我们将交换文件放置在 /swapfile
,但您可以使用文件系统中的任何合理位置. 此文件将提供额外的 1 Gigabyte 的交换空间. 您可以通过修改给 -s
选项的值来调整这个数字。
1sudo truncate -s 1G /swapfile
在我们分配空间后,我们需要阻止访问该文件. 正常用户不应该有任何访问该文件:
1sudo chmod 0600 /swapfile
接下来,将假装设备与我们的文件相关联,并通过键入配置为在启动时安装:
1sudo sh -c 'echo "md99 none swap sw,file=/swapfile,late 0 0" >> /etc/fstab'
上面的命令添加一个看起来像这样的行到 /etc/fstab
文件:
1md99 none swap sw,file=/swapfile,late 0 0
在线被添加到我们的 /etc/fstab
文件后,我们可以通过键入来激活该会话的交换文件:
1sudo swapon -aqL
我们可以通过再次使用swapinfo
命令来验证交换文件是否正在工作:
1sudo swapinfo -g
您应该看到与您的交换文件相关的附加设备(/dev/md99
):
1Device 1G-blocks Used Avail Capacity
2/dev/gpt/swapfs 1 0 1 0%
3/dev/md99 1 0 1 0%
4Total 2 0 2 0%
这个交换文件将在每次启动时自动安装。
结论
在本指南中描述的步骤可以用来将您的 FreeBSD 服务器带入更为生产的状态. 通过配置基本的必需品,如防火墙,NTP 同步和适当的交换空间,您的服务器可以作为未来安装和服务的良好基础。