介绍
当设置一个新的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
命令读取配置脚本没有“安静”标志,它读取并输出的每一行,依次到标准输出。 当输出线,它会立即执行相关操作。
大多数防火墙配置文件刷新脚本顶部的当前规则,以便从干净的slate开始。 如果ipfw
防火墙遇到这样的行不安静的标志,它会立即刷新所有规则,并恢复到默认策略,这通常是拒绝所有连接。 如果您通过SSH配置防火墙,这将删除连接,关闭当前shell会话,并且不会处理后续的任何规则,有效地将您锁定在服务器之外。 静默标志基本上允许防火墙将规则作为集合来处理,而不是单独实现每个规则。
在这两行之后,我们可以开始配置防火墙的行为:
. . .
firewall_type="workstation"
firewall_myservices="22 80"
firewall_allowservices="any"
firewall_logdeny="YES"
首先,我们选择“工作站”作为我们将要配置的防火墙的类型。 这是一个有状态的防火墙,有一些良好的默认行为。 它也使我们能够轻松地通过使用定制,我们希望客户能够访问的服务firewall_myservices
和firewall_allowservices
选项。 最后,我们配置ipfw
登录由配置的规则否认有任何联系。
该firewall_myservices
选项应被设置为TCP端口或服务,用空格分隔的列表,这应该是您的服务器上访问。 您可以使用端口,如我们在这里(我们已配置端口22为我们的SSH连接,端口80为传统的HTTP Web服务器)。 您也可以按名称使用服务。 FreeBSD的知道名字的服务列在/etc/services
的文件。 例如,我们可以改变上面这样:
firewall_myservices="ssh http"
这将有相同的结果。 如果您在Web服务器上使用SSL,确保添加任一端口443
或https
服务,这个清单。
所述firewall_allowservices
列表项是应该允许访问提供的服务的客户端。 关键字“任何”意味着任何客户端都可以访问这些服务。 如果我们想限制可以连接到我们的服务的客户端,我们可以在这里做。
该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连接
中列出的端口和服务firewall_myservices
在选项/etc/rc.conf
文件允许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
在上面的示例中,如果应允许所有客户端连接或将其更改为特定的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 192.168.2.0/24 to me 53
这将允许任何客户端从内192.168.2.0/24
网络范围访问的标准端口53。注意,在本实施例中也将要打开该端口为TCP连接操作的DNS服务器,它是用于按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或网络时间协议。 这将有助于保持您的服务器的时间与世界各地的其他人同步。 这对于时间敏感的客户端 - 服务器交互以及准确的日志记录很重要。
同样,我们可以通过调整使我们的服务器上的NTP服务/etc/rc.conf
文件。 有打开这个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
这将通过与中列出的NTP服务器同步维护您的服务器的时间/etc/ntp.conf
。
如何配置额外交换空间
在DigitalOcean上配置的FreeBSD服务器上,将自动配置1千兆字节的交换空间,而不考虑服务器的大小。 您可以通过键入以下内容查看此内容:
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同步和适当的交换空间等基本要素,您的服务器可以作为未来安装和服务的良好基础。