sonarsoftware/freeradius_genie

FreeRADIUS的一个简单安装和配置工具,特别适用于与Sonar一起使用。

1.0.11 2017-07-25 12:52 UTC

This package is auto-updated.

Last update: 2024-09-11 14:16:09 UTC


README

FreeRADIUS Genie

一个用于设置和配置FreeRADIUS以与Sonar一起使用的安装程序。

入门

此安装程序设计用于在Ubuntu 16.04 64位上运行,但应适用于大多数版本的Ubuntu。在您希望运行FreeRADIUS的服务器上下载并安装Ubuntu。如果您想在线托管,我推荐Digital Ocean

Ubuntu安装完成后,SSH登录并运行以下命令以准备安装

  1. sudo apt-get update
  2. sudo apt-get upgrade
  3. sudo apt-get install php-cli php-mbstring php-mysql unzip

如果您使用的是较旧版本的Ubuntu,可能需要运行sudo apt-get install php5-cli php5-mbstring php5-mysql unzip

完成这些命令后,您应安装MariaDB(MySQL的替代品)和FreeRADIUS服务器。运行以下命令来完成此步骤

  1. sudo apt-get install mariadb-server mariadb-client
  2. sudo apt-get install freeradius freeradius-common freeradius-utils freeradius-mysql

完成这些命令后,可以通过执行wget https://github.com/SonarSoftwareInc/freeradius_genie-v2/archive/master.zip并然后unzip master.zip下载FreeRADIUS Genie。解压缩后,通过输入cd freeradius_genie-v2-master进入目录。

关于托管的一些建议

如果您在线托管,则您的服务器可能没有设置任何交换内存。如果您选择的服务器RAM较少(1-2G),或者即使您选择更多,设置交换分区以确保不会遇到内存不足错误也是值得的。您的交换文件大小至少应等于服务器上的物理RAM。最大应等于服务器物理RAM的2倍。一个好的经验法则是从与可用RAM相等开始,如果在运行时遇到内存不足错误,则增加到RAM的两倍。如果在增加到2倍RAM后遇到内存不足错误,应增加服务器上的RAM数量,而不是增加交换空间。ubuntu.com上的SwapFaq也可能有所帮助。

要设置交换空间,作为root用户运行以下命令(或在每个命令前加上'sudo')

  1. /usr/bin/fallocate -l 4G /swapfile 其中4G是swap文件大小的千兆字节。
  2. /bin/chmod 600 /swapfile
  3. /sbin/mkswap /swapfile
  4. /sbin/swapon /swapfile
  5. echo "/swapfile none swap sw 0 0" >> /etc/fstab
  6. /sbin/sysctl vm.swappiness=10
  7. echo "vm.swappiness=10" >> /etc/sysctl.conf
  8. /sbin/sysctl vm.vfs_cache_pressure=50
  9. echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf

完成初步安装

现在,所有运行FreeRADIUS服务器所需的软件都已安装,您需要配置您的SQL数据库。为此,运行sudo /usr/bin/mysql_secure_installation并使用以下回答问题

  1. 输入root当前密码(如果没有,按Enter): - 按Enter
  2. 设置root密码?[Y/n] - 按'y'
  3. 新密码: - 输入一个强大的密码并将其记录下来 - 我们很快就需要这个密码!
  4. 是否移除匿名用户?[Y/n] - 按下'y'
  5. 禁止远程root登录?[Y/n] - 按下'y'
  6. 删除测试数据库及其访问权限?[Y/n] - 按下'y'
  7. 现在重新加载权限表?[Y/n] - 按下'y'

完成这些后,我们就有一个非常基础的服务器设置 - 已经安装了FreeRADIUS和MySQL数据库,我们可以开始进行初始配置。

配置

为了允许Sonar genie工具为您设置所有其他配置,您需要将一分钟前设置的MySQL root密码输入到.env文件中。输入cp .env.example .env然后输入nano .env。您会看到一个说MYSQL_PASSWORD=changeme的行。使用退格键删除changeme,并用您设置的MySQL root密码替换它。按CTRL+X退出,并保存您的更改。请确保您将此root密码记录下来,因为您将来需要使用它!

完成这些后,我们就可以开始使用genie了!

Genie

Genie是我们构建的一个命令行工具,用于帮助自动化FreeRADIUS服务器的设置和配置。我们将逐步完成每个初始设置项目,以便我们完成初始配置。输入php genie,您会看到类似以下的内容

Image of Genie

这是您将用于进行所有配置的工具 - 无需跳转到配置文件或MySQL数据库!

第一步

让我们先设置数据库。高亮显示初始配置选项,按下空格键选择它,然后按回车键。您会看到一个名为设置初始数据库结构的选项 - 按下空格键选择它,按下回车键,您的数据库将被配置。如果您收到有关凭证的错误消息,请检查在配置部分中放入您的.env文件的root密码。

一旦完成,我们需要设置FreeRADIUS配置文件。使用空格键选择执行初始FreeRADIUS配置,然后按回车键。这将配置FreeRADIUS服务器使用SQL服务器作为后端,并重新启动它。

管理您的NAS

NAS代表网络接入服务器 - 这是您将连接到RADIUS服务器以管理客户端的设备。通常,在ISP网络中,NAS用于管理单个客户端,NAS可能像PPPoe集中器。让我们通过Genie将新的NAS添加到FreeRADIUS服务器,然后配置我们的NAS(MikroTik路由器)使用FreeRADIUS服务器。

在Genie中(记住,要启动Genie,只需输入php genie),确保您处于顶层,然后选择NAS配置,然后选择添加NAS。您将被要求输入客户端的IP地址,并为它输入一个短名称。

Image of Genie

该工具将向您返回一个随机密钥 - 复制此密钥,因为您需要将其输入到PPPoE集中器中!

现在我们可以将此RADIUS服务器添加到我们的MikroTik中,以使用它来管理我们的PPPoE会话。此步骤将因NAS制造商而异 - 如果您不确定,请参阅手册。使用WinBox进入您的MikroTik。

Add RADIUS to MikroTik

在左侧点击RADIUS,在出现的窗口中点击+按钮,然后填写以下字段

  1. 勾选PPP复选框。
  2. 地址字段中输入您的RADIUS服务器的IP地址。
  3. 在《秘密》字段中输入Genie提供的随机密钥。
  4. 在《源地址》下,输入您在创建NAS时输入Genie的IP地址。

好了,您的MikroTik现在已设置好使用RADIUS进行PPP!稍后我们将深入了解配置。

您也可以通过在Genie中选择《列出NAS条目》来查看您在RADIUS服务器中设置的NAS,您可以通过使用《删除NAS》选项来删除一个NAS。

配置MySQL以进行远程访问

我们还需要配置MySQL服务器以允许Sonar远程访问,这样Sonar就可以为RADIUS服务器写入和读取记录。现在我们来这么做。进入《MySQL远程访问配置》菜单,并选择《启用远程访问》。

Enabling remote access

这使MySQL服务器在服务器的所有接口上监听连接,而不仅仅是监听localhost(127.0.0.1)。现在我们需要设置一个远程用户帐户,以便您的Sonar实例可以访问数据库。为此,在同一菜单中选择《添加远程访问用户》。

Genie会要求您使用默认值或远程服务器的IP地址。对于Sonar V2实例,建议使用Sonar的默认值。如果您使用Sonar V1并且不知道您的Sonar实例的IP地址,您可以ping它以获取IP地址。

Ping

一旦添加了远程访问用户,Genie会为您提供随机的用户名和密码。请记下来——我们很快就需要它!

Adding a MySQL user

如果您需要添加新用户、查看现有用户或删除用户,您也可以在此菜单中完成这些操作。

将您的FreeRADIUS服务器链接到Sonar

完成此配置后,我们需要将RADIUS服务器添加到Sonar中。在您的Sonar实例中,进入《网络》导航菜单项并单击《RADIUS服务器》。

Configuring Sonar

输入您拥有的所有信息——《数据库名》是《radius》和《数据库端口》是《3306》。信息输入完成后,单击顶部的《验证凭据》按钮,您应该看到《当前服务器状态》显示《可访问》。

基本的PPPoE配置

完成这些后,您将有一个基本的设置来启用PPPoE。以下是一个关于在MikroTik路由器上设置简单PPPoE配置的快速教程。

首先,我们需要设置我们的IP池。这些应与您在Sonar IPAM中创建的IP池相匹配——有关详细信息,请参阅Sonar文档!要配置池,请导航到您的MikroTik中的《IP > 池》。您可以根据需要在此处创建尽可能多的IP池,并将它们连接在一起,以便如果某个池已满,则使用下一个池。您可以在Sonar中通过将IP与其RADIUS帐户关联来从Sonar内部为用户静态分配IP地址。如果您不这样做,则当客户端连接时,Sonar将从可用池中选择一个IP地址,并将该IP作为软分配输入到Sonar中。

IP Pool

池配置相当简单——起始IP、结束IP以及如果此池已满则使用的下一个池。

配置完您的池后,单击左侧菜单中的《PPP》,然后单击《配置文件》选项卡。单击《+`按钮以创建新配置文件。

我们将配置一个非常基本的配置文件。输入一个名称,选择用于配置的本地地址(在本例中,我使用了池的子网中的第一个IP地址——请注意,此IP地址不包含在我的池范围中!)以及远程地址,选择您的第一个池。输入要分配给用户的DNS服务器,并在《限制`选项卡下设置会话超时。这将使用户在一段时间后断开连接,并需要重新连接。如果您想允许无限会话,则不要设置超时。如果您想设置超时值,24小时是一个合理的设置。

PPP Profile

配置完您的个人资料后,点击 密钥 选项卡,然后点击 PPP 认证和计费按钮

AAA

确保已勾选 使用 Radius,并且 计费 已勾选。请确保 临时更新 设置为合理的分钟值。这是 MikroTik 向您的 RADIUS 服务器发送计费数据的频率。如果设置得太短,并且您有很多客户端,您的服务器将变得过载。这里没有固定的规则。时间越短,向 RADIUS 服务器发送的计费数据就越多,您在 Sonar 中看到的用户数据使用更新就越频繁。如果您有一个非常小的网络(几百个用户),您可能可以将此设置为低值(1-5分钟)而不影响太大。对于大型网络,至少设置为 15 分钟 - 对于非常大的网络,您可能需要将其设置得更高!

现在点击 PPPoE 服务器 选项卡,然后点击 + 按钮创建服务器。

PPPoE Server

为服务器输入名称,选择客户端将连接的接口,并选择我们之前创建的配置文件。如果您只想允许每个主机一个 PPPoE 会话(您可能就是这样!),请勾选 每个主机一个会话。确保勾选底部所有的认证选项。

现在您已经拥有了一个非常基本的、可正常工作的 PPPoE 服务器。登录到您的 Sonar 实例,转到用户账户,访问 网络 选项卡,然后是 Radius 选项卡。创建一个新的 Radius 账户并记下用户名和密码。

现在,回到 MikroTik,点击 活动连接 选项卡,并使用您刚才在 Sonar 中创建的凭证尝试使用 PPPoE 客户端进行连接。您应该会被分配一个 IP 地址池中的 IP,连接将显示在列表中!要分配静态 IP,请回到 Sonar,转到账户的 网络 选项卡,然后是 IP 分配。为 Radius 账户分配一个 IP,然后断开并重新连接您的 PPPoE 客户端。您将被分配所选的静态 IP。

扩展 FreeRADIUS 以适应大型网络

FreeRADIUS 的扩展指南相当简单。 简而言之,给它提供大量的 RAM、CPU、快速磁盘,并根据扩展指南中提到的几项设置进行调整。如果您正在运行一个拥有数十万个订阅者的大型网络,并且需要一些帮助,请告诉我们!

进一步的安全措施

通过以下详细步骤,可以使用几个步骤进一步保护您的 FreeRADIUS 安装。这些步骤不是必需的,但建议使用。

配置 Sonar 和 FreeRADIUS 之间的连接以使用 TLS

配置 Sonar 使用 TLS 连接到支持 FreeRADIUS 的 SQL 服务器将确保所有传输的数据都经过加密。开销很小,只需在初始设置和 Sonar 中进行必要的更改时做一些努力。本指南假定您已按照上述步骤进行,您正在使用 Ubuntu 16.04 和 MariaDB。

为了使 SSL 连接工作,您的 RADIUS 服务器必须以主机名(例如 radius.sonar.software)的形式在 Sonar 中输入,而不是 IP 地址。下面生成的证书 必须 与主机名完全匹配。

首先,我们将创建一个文件夹来存储我们的证书。

mkdir /etc/mysql/certs

现在我们将创建证书。运行以下命令。

openssl genrsa 2048 > /etc/mysql/certs/ca-key.pem

openssl req -sha1 -new -x509 -nodes -days 10000 -key /etc/mysql/certs/ca-key.pem > /etc/mysql/certs/ca-cert.pem

运行第二个命令时,系统将提示您输入一些变量。请在此处输入一些合理的数据,但请确保通用名称字段不是您的RADIUS服务器的主机名。将其设置为不同的名称,例如SonarRadius

openssl req -sha1 -newkey rsa:2048 -days 10000 -nodes -keyout /etc/mysql/certs/server-key.pem > /etc/mysql/certs/server-req.pem

您将再次在此处被提示输入变量。请输入之前输入的相同数据,但这次请确保在通用名称字段中输入您的RADIUS服务器的主机名。当被提示输入挑战密码时,只需按回车键。

openssl x509 -sha1 -req -in /etc/mysql/certs/server-req.pem -days 10000 -CA /etc/mysql/certs/ca-cert.pem -CAkey /etc/mysql/certs/ca-key.pem -set_serial 01 > /etc/mysql/certs/server-cert.pem

openssl rsa -in /etc/mysql/certs/server-key.pem -out /etc/mysql/certs/server-key.pem

openssl req -sha1 -newkey rsa:2048 -days 10000 -nodes -keyout /etc/mysql/certs/client-key.pem > /etc/mysql/certs/client-req.pem

再次填写变量。这次,将通用名称设置为Sonar,并留空挑战密码。

openssl x509 -sha1 -req -in /etc/mysql/certs/client-req.pem -days 10000 -CA /etc/mysql/certs/ca-cert.pem -CAkey /etc/mysql/certs/ca-key.pem -set_serial 01 > /etc/mysql/certs/client-cert.pem

openssl rsa -in /etc/mysql/certs/client-key.pem -out /etc/mysql/certs/client-key.pem

现在您已经生成了我们需要的所有证书,以启用TLS连接。现在我们需要重新配置MariaDB以使用这些证书。

nano /etc/mysql/mariadb.conf.d/50-server.cnf

进入配置文件后,将这些行添加到文件末尾

ssl-ca=/etc/mysql/certs/ca-cert.pem

ssl-cert=/etc/mysql/certs/server-cert.pem

ssl-key=/etc/mysql/certs/server-key.pem

现在重新启动MariaDB

service mysql restart

您可以通过以下步骤来验证SSL是否已启用

mysql -uroot -p<YOUR ROOT MYSQL PASSWORD HERE>

一旦进入MySQL命令行,执行show global variables like 'have_ssl';,您应该看到have_ssl的值为YES。如果没有,请返回前面的步骤,重新执行所有步骤,直到值变为YES

现在您需要将客户端文件和ca-cert.pem文件从这台服务器传输到您的Sonar实例。一种快速简单的方法是使用FileZilla通过SFTP连接,然后下载文件。您需要client-key.pemclient-cert.pemca-cert.pem

导航到Sonar RADIUS配置页面,位置在网络 > 配置 > RADIUS服务器。在这里配置您的RADIUS服务器,并保存。完成后,勾选标记为启用SSL连接的复选框,并从您的RADIUS服务器上传客户端密钥、客户端证书和CA证书。点击保存,然后点击页面顶部的验证凭据。如果凭据验证现在失败(之前是正常的),那么您在这里没有正确执行步骤 - 返回开始处并重新开始。最常见的错误原因是在生成证书时没有在通用名称字段中输入正确的值,或者MySQL服务器配置不正确。