Ubuntu 18.04下Grafana安装与安全加固:完整指南

引言

Grafana是一个开源的数据可视化和监控工具,它能够整合来自Prometheus、InfluxDB、Graphite和ElasticSearch等多种复杂数据源。Grafana允许您为数据创建警报、通知和临时筛选器,并通过内置的分享功能方便地与团队协作。

在本教程中,您将学习如何在Ubuntu 18.04服务器上安装Grafana,并使用SSL证书和Nginx反向代理来保护它。一旦Grafana设置完成,您还可以选择配置GitHub用户身份验证,以便更好地管理团队权限。

先决条件

要按照本教程进行操作,您需要准备以下材料:

  • 一台已按照Ubuntu 18.04初始服务器设置指南配置好的Ubuntu 18.04服务器,包括一个具有sudo权限的非root用户和已配置ufw防火墙。
  • 一个完全注册的域名。本教程中将全程使用 your_domain 作为示例。您可以在Namecheap购买域名,在Freenom免费获取,或使用您选择的任何域名注册商。
  • 为您的服务器设置以下DNS记录。您可以参考如何使用DigitalOcean设置主机名了解详细信息:
    • 一个将 your_domain 指向您服务器公共IP地址的A记录。
    • 一个将 www.your_domain 指向您服务器公共IP地址的A记录。
  • 已按照如何在Ubuntu 18.04上安装Nginx教程设置好的Nginx,包括为您域名配置的服务器块。
  • 一个已配置Let’s Encrypt的Nginx服务器块,您可以按照如何在Ubuntu 18.04上使用Let’s Encrypt保护Nginx教程进行设置。
  • (可选)要设置GitHub身份验证,您需要一个与组织关联的GitHub账户。

第一步 – 安装Grafana

在第一步中,您将在Ubuntu 18.04服务器上安装Grafana。您可以通过从其官方网站直接下载或通过APT仓库进行安装。由于APT仓库使得安装和管理Grafana的更新更加容易,所以在本教程中将使用该方法。

虽然Grafana在官方的Ubuntu 18.04软件包存储库中可用,但那里的Grafana版本可能不是最新的,因此请使用Grafana的官方存储库。

使用 wget 命令下载Grafana的GPG密钥,然后将输出重定向到 apt-key。这将把密钥添加到您的APT安装的受信任密钥列表中,从而允许您下载和验证使用GPG签名的Grafana软件包。

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

在这个命令中,选项 -q 关闭 wget 的状态更新信息,-O 将下载的文件输出到终端。这两个选项确保只有下载文件的内容被管道传送到 apt-key

接下来,将Grafana仓库添加到你的APT源中。

sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

刷新APT缓存以更新软件包列表。

sudo apt update

接下来,请确保从Grafana仓库安装Grafana。

apt-cache policy grafana

前一个命令的输出会告诉你即将安装的Grafana版本以及从哪里获取软件包。请确认列表顶部的安装候选项来自官方Grafana仓库,地址为 https://packages.grafana.com/oss/deb

Output of apt-cache policy grafana
grafana:
  Installed: (none)
  Candidate: 9.1.3
  Version table:
     9.1.3 500
        500 https://packages.grafana.com/oss/deb stable/main amd64 Packages
...

你现在可以开始安装了。

sudo apt install grafana

一旦完成Grafana的安装,使用 systemctl 命令启动Grafana服务器。

sudo systemctl start grafana-server

接下来,通过检查服务的状态来验证Grafana是否正在运行。

sudo systemctl status grafana-server

你将会得到类似这样的输出。

Output of grafana-server status

● grafana-server.service – Grafana 实例
Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2022-09-06 09:35:00 UTC; 5s ago
Docs: http://docs.grafana.org
Main PID: 22886 (grafana-server)
Tasks: 5 (limit: 546)

这个输出包含了关于 Grafana 进程的信息,包括其状态、主进程标识符(PID)等。`active (running)` 表示进程正常运行。

最后,启用服务以在系统启动时自动启动 Grafana。

  1. sudo systemctl enable grafana-server

 

您将收到以下输出:

systemctl enable grafana-server 的输出

Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable grafana-server Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

这证实了 systemd 已经创建了必要的符号链接,以使 Grafana 能够自动启动。

Grafana 已安装并准备好使用。接下来,您将使用反向代理和 SSL 证书来保护您与 Grafana 的连接。

第二步 – 设置反向代理

使用 SSL 证书将通过加密 Grafana 的连接来确保您的数据安全。但是,要利用此连接,您首先需要将 Nginx 重新配置为 Grafana 的反向代理。

打开您在先决条件中创建的 Nginx 配置文件,这是在设置带有 Let’s Encrypt 的 Nginx 服务器块时创建的。您可以使用任何文本编辑器,但在本教程中我们将使用 nano。

  1. sudo nano /etc/nginx/sites-available/您的域名

 

找到以下区块:

/etc/nginx/sites-available/您的域名
...
	location / {
		try_files $uri $uri/ =404;
	}
...

因为您已经配置了 Nginx 以通过 SSL 通信,并且所有的网页流量已经通过 Nginx 传输到您的服务器上,所以您只需要告诉 Nginx 将所有的请求转发到默认运行在 3000 端口上的 Grafana 即可。

删除此位置块中现有的 `try_files` 行,并用以下选项替换:

/etc/nginx/sites-available/您的域名
...
	location / {
		proxy_set_header Host $http_host;
		proxy_pass http://localhost:3000;
	}
...

这将把代理映射到相应的端口,并在请求头中传递服务器名称。

为了确保 Grafana Live WebSocket 连接正常运行,请在服务器部分之外添加以下部分:

/etc/nginx/sites-available/您的域名
map $http_upgrade $connection_upgrade {
	default upgrade;
	'' close;
}

server {
    ...

接下来添加以下位置部分:

/etc/nginx/sites-available/您的域名

这是文章《在Ubuntu 18.04上安装和保护Grafana的方法》的第3部分(共6部分)。

...
	location /api/live {
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;
		proxy_set_header Host $http_host;
		proxy_pass http://localhost:3000;
	}
...

客户端不会向代理服务器发送 UpgradeConnection 标头。因此,为了让代理服务器了解客户端打算将协议更改为 WebSocket,必须明确传递这些标头。

最终的配置应如下所示:

你的域名的可用网站配置文件目录为:/etc/nginx/sites-available/your_domain

map $http_upgrade $connection_upgrade {
	default upgrade;
	'' close;
}

server {
	...

	root /var/www/your_domain/html;
	index index.html index.htm index.nginx-debian.html;

	server_name your_domain www.your_domain;

	location / {
		proxy_set_header Host $http_host;
		proxy_pass http://localhost:3000;
	}

	location /api/live {
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;
		proxy_set_header Host $http_host;
		proxy_pass http://localhost:3000;
	}
}
...

注意:如果你使用了Certbot工具来设置Let’s Encrypt SSL证书,那么你的配置文件可能包含由Certbot添加的额外行和服务器区块。

完成后,按下 CTRL+X,然后按 Y,最后按 ENTER 保存并关闭文件(如果使用nano)。

现在,测试新的设置以确保所有配置都正确:

  1. sudo nginx -t

你将收到以下的输出结果。

输出

这是文章《在Ubuntu 18.04上安装和保护Grafana的方法》的第4部分(共6部分)。

最后,通过重新加载Nginx来激活更改。

  1. sudo systemctl reload nginx

 

您现在可以通过将网页浏览器指向https://your_domain来访问默认的Grafana登录界面。如果无法访问Grafana,请确认您的防火墙已设置允许在443端口上进行通信,然后重新按照之前的指示操作。

通过对Grafana的连接进行加密,您现在可以实施额外的安全措施,首先是更改Grafana的默认管理凭据。

第三步 – 更新凭证

由于每个Grafana安装默认都使用相同的管理员凭据,最佳实践是尽快更改您的登录信息。在此步骤中,您将更新凭据以提高安全性。

请从您的网页浏览器中输入https://your_domain导航至开始。这将呈现默认登录界面,在那里您将看到Grafana标志、一个要求输入电子邮件或用户名和密码的表单、一个登录按钮以及一个忘记密码链接。

显示电子邮件或用户名以及密码提示的Grafana登录页面

在邮箱或用户名和密码字段中输入“admin”,然后点击登录按钮。

在下一个屏幕上,您将被要求通过更改默认密码来提高您的账户安全性。

Grafana的更改密码提示

在“新密码”和“确认新密码”的栏位中输入您想要开始使用的密码。

从这里开始,您可以点击“提交”来保存新信息,或者点击“跳过”来跳过这一步骤。如果您选择跳过,下次登录时将提示您更改密码。

为了增加Grafana设置的安全性,请点击“保存”。您将返回到Grafana欢迎页面。

Grafana的主仪表盘

现在通过更改默认凭据,您已经确保了您的账户的安全。接下来,您将对Grafana配置进行更改,以确保没有人能够在未经您许可的情况下创建新的Grafana账户。

第四步 – 禁用 Grafana 注册和匿名访问

Grafana提供了选项,让访问者可以自行创建用户账户并预览仪表盘,无需注册。当Grafana无法通过互联网访问或者与公开可用的数据(如服务状态)一起使用时,您可能希望允许这些功能。然而,当在线使用Grafana处理敏感数据时,匿名访问可能会带来安全问题。为了解决这个问题,需要对Grafana的配置进行一些更改。

从打开Grafana的主配置文件开始进行编辑。

  1. sudo nano /etc/grafana/grafana.ini

 

请在 [users] 的标题下找到以下 allow_sign_up 指令。

Grafana配置文件位于 /etc/grafana/grafana.ini

...
[users]
# disable user signup / registration
;allow_sign_up = true
...

在登录界面上启用这个选项会添加一个“注册”按钮,允许用户自行注册并访问Grafana。

禁用此指令可以移除“注册”按钮,并增强Grafana的安全性和隐私。

取消对此指令的注释,删除行首的“;”,并将选项设置为false

/etc/grafana/grafana.ini 的内容应修改如下:

...
[users]
# disable user signup / registration
allow_sign_up = false
...

接下来,在[auth.anonymous]标题下找到以下启用命令:

/etc/grafana/grafana.ini 可以在Grafana的配置文件目录里找到。

...
[auth.anonymous]
# enable anonymous access
;enabled = false
...

将设置enabledtrue允许未注册用户访问您的仪表盘;将此选项设置为false则仅限已注册用户访问仪表盘。

通过删除行首的分号并将选项设置为false,取消此指令的注释。

/etc/grafana/grafana.ini 的中文表达:

Grafana的配置文件位于 /etc/grafana/grafana.ini

...
[auth.anonymous]
# enable anonymous access
enabled = false
...

保存文件并退出文本编辑器。

为了激活这些更改,请重新启动 Grafana。

  1. sudo systemctl restart grafana-server

 

通过检查Grafana的服务状态来验证一切是否正常。

  1. sudo systemctl status grafana-server

 

就像以前一样,输出将报告Grafana处于活动状态(运行中)。

现在,将您的网页浏览器指向https://your_domain。要返回到注册屏幕,请将光标移到屏幕左下角的个人头像上,并点击出现的“登出”选项。

一旦您登出后,请确认没有“注册”按钮,并且没有输入登录凭据无法登录。

在此时,Grafana已经完全配置好并可供使用。接下来,您可以通过GitHub进行身份验证,简化组织的登录流程。

(可选)第五步 – 设置GitHub OAuth应用程序

作为登录的替代方式,您可以配置 Grafana 通过 GitHub 进行认证,从而为所有授权的 GitHub 组织成员提供登录访问权限。当您希望允许多个开发者协作并访问度量数据,而无需创建特定于 Grafana 的凭据时,这一点尤其有用。

首先登录与您所在组织相关的GitHub账户,然后导航到您的GitHub个人资料页面。

在屏幕左侧的导航菜单中,在“组织设置”下,点击您组织的名称。

GitHub组织设置

在GitHub上创建OAuth应用程序

在下一个屏幕上,您将看到您的组织资料,您可以在这里更改设置,如组织显示名称、组织电子邮件和组织URL。

由于Grafana使用OAuth进行用户认证(OAuth是一种用于授权远程第三方访问本地资源的开放标准),因此您需要在GitHub上创建一个新的OAuth应用程序。

点击屏幕左下角的“开发者设置”下的“OAuth应用”链接。

如果您在GitHub上的组织中还没有任何与OAuth应用程序相关联的应用程序,系统将显示“无组织拥有的应用程序”。否则,您将看到已连接到您账户的OAuth应用程序的列表。

点击“注册应用”按钮以继续。

在下一个屏幕上,填写关于您的Grafana安装的以下详细信息:

  • 应用程序名称(Application name):这有助于您区分不同的OAuth应用程序。
  • 主页URL(Homepage URL):这告诉GitHub在哪里找到Grafana。请在此字段中输入 https://your_domain,并将 your_domain 替换为您的实际域名。
  • 应用程序描述(Application Description):这提供了您的OAuth应用程序用途的描述。
  • 应用程序回调URL(Application callback URL):这是用户成功认证后将被发送到的地址。对于Grafana,此字段必须设置为 https://your_domain/login/github

请记住,通过GitHub登录Grafana的用户将在前三个字段中看到您输入的值,因此请确保输入一些有意义且合适的内容。

当完成时,表格会看起来像这样:

GitHub注册OAuth应用程序的表单

点击“注册应用”按钮。

您将被重定向到一个页面,其中包含与您的新OAuth应用程序相关的客户端ID和客户端密钥。请记下这两个值,因为您需要将它们添加到Grafana的主配置文件中以完成设置。

警告:请确保将您的客户端ID和客户端密钥保存在安全且非公开的位置,因为它们有可能被用作攻击的基础。

现在您已经创建了GitHub OAuth应用程序,可以重新配置Grafana以使用GitHub进行验证。

(可选)第六步——将Grafana配置为GitHub OAuth应用程序

为了完成Grafana设置的GitHub身份验证,现在您需要对Grafana配置文件进行一些更改。

首先,打开主要的Grafana配置文件。

  1. sudo nano /etc/grafana/grafana.ini

找到 [auth.github] 标题,并取消注释此部分,方法是删除除了 ;allowed_domains;team_ids= 之外的每一行开头的分号 ;。这些内容在本教程中不会被更改。

接下来,将Grafana配置为使用您的OAuth应用程序的 client_idclient_secret 值与GitHub进行连接。

  • enabledallow_sign_up 设置为 true。这将启用GitHub认证并允许被授权组织的成员自行创建账户。请注意,此设置与您在第四步中更改的 [users] 下的 allow_sign_up 属性不同。
  • client_idclient_secret 设置为您在创建GitHub OAuth应用程序时获得的值。
  • allowed_organizations 设置为您的组织名称,以确保只有您组织的成员才能注册和登录Grafana。

完整的配置将如下所示:

文件路径:/etc/grafana/grafana.ini

...
[auth.github]
enabled = true
allow_sign_up = true
client_id = your_client_id_from_github
client_secret = your_client_secret_from_github
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
;allowed_domains =
;team_ids =
allowed_organizations = your_organization_name
...

您已经告诉Grafana关于GitHub的所有必要信息。要完成设置,您需要启用反向代理下的重定向。在 [server] 标题下,设置 root_url 值即可实现。

文件路径:/etc/grafana/grafana.ini

...
[server]
root_url = https://your_domain
...

保存您的配置并关闭文件。

然后,重新启动Grafana以激活更改。

  1. sudo systemctl restart grafana-server

最后,确认服务是否运行正常。

  1. sudo systemctl status grafana-server

输出结果将显示服务处于活动状态(运行中)。

现在,请通过访问 https://your_domain 来测试您的新身份验证系统。如果您已经登录Grafana,请将鼠标悬停在屏幕左下角的头像上方,并点击出现在您的名字旁边的次级菜单上的“退出登录”。

在登录页面上,您会看到在原始“登录”按钮下面的一个新的部分,其中包括一个带有GitHub标志的“使用GitHub登录”按钮。

Grafana登录页面,现在显示使用GitHub登录的选项

点击“使用GitHub登录”按钮,您将被重定向至GitHub,您需要登录您的GitHub账号并确认授权Grafana。

点击绿色按钮,授权您的GitHub组织。

注意:请确保您的GitHub账户是您所批准组织的成员,并且您的Grafana电子邮件地址与GitHub电子邮件地址匹配。如果您尝试使用未成为所批准组织成员的GitHub账户进行身份验证,您将收到“登录失败”消息,告知您用户不是所需组织的成员之一。

您现在将使用您现有的Grafana账户登录。如果当前登录用户尚未拥有Grafana账户,Grafana将自动创建一个具有“查看者”权限的新用户账户,确保新用户只能使用现有的仪表盘。

要更改新用户的默认权限,请打开主要的Grafana配置文件进行编辑:

sudo nano /etc/grafana/grafana.ini

在`[users]`标题下找到`auto_assign_org_role`指令,并通过删除行开头的`;`字符来取消该设置的注释。

将指令设置为以下数值之一:

  • Viewer(查看者):只能使用现有仪表盘。
  • Editor(编辑者):可以更改、修改和添加仪表盘。
  • Admin(管理员):拥有所有操作权限。

本教程将自动分配角色设置为“查看者”。

`/etc/grafana/grafana.ini`

...
[users]
...
auto_assign_org_role = Viewer
...

一旦您保存了更改,关闭文件并重新启动Grafana服务:

sudo systemctl restart grafana-server

检查服务的状态:

sudo systemctl status grafana-server

和之前一样,状态将会显示为“活动”(运行中)。

至此,您已完全配置好Grafana,允许您的GitHub组织成员注册并使用您的Grafana安装。

结论

在本教程中,您安装、配置并保护了Grafana,并允许您组织中的成员通过GitHub进行身份验证。

要扩展您当前的Grafana安装,请查看官方和社区创建的仪表盘列表。要了解更多关于使用Grafana的一般信息,请查看官方Grafana文档或浏览我们的其他监控教程。

bannerAds