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