如何通过 Puppet 配置 Ubuntu UFW?
How do I configure Ubuntu UFW through Puppet?
我对 Puppet 很陌生,我在使用我们的一位主机 运行ning Puppet Agent 的 Puppet 配置时遇到了一些问题。
我们在所有系统上使用 Ubuntu 20.04 和 Puppet CE 7.12.1。
在我们的 Puppet 服务器(主机名:puppet
)上,我正在尝试为我们的主机 eb-web
(即 运行 宁一个 Puppet 代理)编写 Puppet 配置。
我想配置 UFW(简易防火墙)(https://help.ubuntu.com/community/UFW) on eb-web
using the Puppet Module kogitoapp/ufw
version 1.0.3 (https://forge.puppet.com/modules/kogitoapp/ufw) 以允许通过 HTTP 流量。
我们的 Puppet 服务器配置为使用 Hiera 来保存我们的事实。到目前为止,我已经创建了以下配置文件:
文件:/etc/puppetlabs/code/environments/production/hiera.yaml
version: 5
defaults:
# The default value for "datadir" is "data" under the same directory as the hiera.yaml
# file (this file)
hierarchy:
- name: "Per-node data (yaml version)"
path: "nodes/%{::trusted.certname}.yaml"
- name: "Per-role data"
path: "roles/%{::role}"
- name: "Other YAML hierarchy levels"
paths:
- "common.yaml"
文件:/etc/puppetlabs/code/environments/production/data/common.yaml
# empty at the moment
文件:
/etc/puppetlabs/code/environments/production/manifests/site.pp
node default {
hiera_include('roles')
}
文件:/etc/puppetlabs/code/environments/production/data/nodes/eb-web.evolvedbinary.com.yaml
roles:
- roles::www
ufw::ufw_rule:
name: 'Allow HTTP'
action: allow
to_ports_app: 80
proto: tcp
文件:/etc/puppetlabs/code/environments/production/modules/roles/manifests/www.pp
class roles::www {
include profiles::ufw
# include profiles::nginx
}
文件:/etc/puppetlabs/code/environments/production/modules/profiles/manifests/ufw.pp
class profiles::ufw {
class{ '::ufw': }
}
我还通过 运行ning 在 Puppet 服务器上安装了 ufw 模块:
sudo /opt/puppetlabs/bin/puppet module install kogitoapp-ufw --version 1.0.3
如果我现在切换到 eb-web
主机并尝试通过 运行ning 请求 Puppet Agent 从 Puppet 服务器应用配置:
sudo /opt/puppetlabs/bin/puppet agent --no-daemonize --test
然后我看到以下输出,我认为这表明所有内容都已应用:
ubuntu@eb-web:~$ sudo /opt/puppetlabs/bin/puppet agent --no-daemonize --test
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for eb-web.evolvedbinary.com
Info: Applying configuration version '1639003464'
Notice: Applied catalog in 0.60 seconds
ubuntu@eb-web:~$
在此之后,如果我检查:sudo ufw status
,这似乎表明 Puppet 尚未配置用于 HTTP 的端口 80:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
“更新(2021 年 12 月 20 日)”
在尝试解决此问题后,我成功了,但是,我犯了一个错误并将规则添加到 ufw.pp file
,这不是我想要的正确方法。在从 ufw.pp
文件中取出规则并将它们放入 eb-web.evolvedbinary.com.yaml
文件后,ufw port 80
现在被拒绝了。我尝试过使用 status: enable
和 status: allow
,我也尝试过 ensure: present
,以及尝试其他我 100% 都记不住的组合,所有这些都在 eb-web.evolvedbinary.com.yaml
文件中。 ufw.pp
文件当前看起来像:
class profiles::ufw {
class{ 'ufw':
}
}
eb-web.evolvedbinary.com.yaml
文件如下所示:
---
roles:
- roles::www
ufw::rule:
'Allow HTTP':
action: allow
to_ports_app: 80
proto: tcp
include nginx:
nginx::nginx_server:
'www.evolvedbinary.com':
ssl: true
www_root: '/var/www/www.evolvedbinary.com'
当我在 eb-web
主机(傀儡代理)上 运行 sudo /opt/puppetlabs/bin/puppet agent --no-daemonize --test
时,我没有看到任何错误,但是,当我 运行 sudo ufw status
我见:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere # allow_puppet
80 REJECT Anywhere # Allow HTTP
22 (v6) ALLOW Anywhere (v6) # allow_puppet
80 (v6) REJECT Anywhere (v6) # Allow HTTP
我不确定如何在 eb-web.evolvedbianry.com.yaml
文件中使用 hiera
启用端口 80。
有人可以帮我弄清楚如何使用 Puppet 配置 UFW 吗?
第一件事是查看 Puppet forge 上的示例 https://forge.puppet.com/modules/kogitoapp/ufw#basic,我可能暂时将 hiera 放在一边以使调试更容易。
尝试将其放入 /etc/puppetlabs/code/environments/production/modules/profiles/manifests/ufw.pp
class profiles::ufw {
class {'ufw':
rules => {
'Allow HTTP' => {
'action' => 'allow',
'to_ports_app' => 80,
'proto => 'tcp',
},
}
}
}
这个 Hiera 数据...
ufw::ufw_rule:
name: 'Allow HTTP'
action: allow
to_ports_app: 80
proto: tcp
... 似乎是试图在您的 hiera 数据中声明模块的 ufw_rule
资源类型的实例。您不能以这种方式声明资源(并且该资源类型是名称为 ufw_rule
而不是 ufw::ufw_rule
的插件类型)。资源声明进入您的清单。例如,您可以将其放入 profiles/manifests/ufw.pp
:
ufw_rule { 'Allow HTTP':
action => 'allow',
to_ports_app => 80,
proto => 'tcp',
}
Hiera 最突出的用途是为 class(但不是资源)参数提供数据,一些 classes 使用它来支持间接资源声明。您通常将代表一个或多个资源的数据放入 class 参数中,然后声明 class 导致它声明如此描述的资源。您正在使用的 ufw
class 通过其参数 rules
(注意拼写)提供此选项,它期望数据以散列的散列形式出现,在外层具有资源名称键,并且ufw_rule
内层资源的资源名称/值映射。如果你想利用它,那么数据的结构应该是这样的:
ufw::rules:
'Allow HTTP':
action: allow
to_ports_app: 80
proto: tcp
当然,您也可以直接在 class 声明中分配参数值,如您的其他答案所示,但这需要使用类似资源的 class 声明。应尽可能避免类似资源的 class 声明。首选 include
、require
或 contain
来声明 classes.
在花了一些时间尝试解决这个问题后,又回过头来看看为什么这不起作用。我最终在 eb-web.evolvedbinary.com.yaml
中纠正了我的错误。我需要添加 include ufw
并将 ufw::rule
更改为 ufw::rules
。在完成这些更改后,端口 80 现在可以正常工作了。
eb-web.evolvedbinary.com.yaml
文件现在看起来像:
---
roles:
- roles::www
include ufw:
ufw::rules:
'Allow HTTP':
action: allow
to_ports_app: 80
proto: tcp
include nginx:
nginx::nginx_server:
'www.evolvedbinary.com':
ssl: true
www_root: '/var/www/www.evolvedbinary.com'
我对 Puppet 很陌生,我在使用我们的一位主机 运行ning Puppet Agent 的 Puppet 配置时遇到了一些问题。 我们在所有系统上使用 Ubuntu 20.04 和 Puppet CE 7.12.1。
在我们的 Puppet 服务器(主机名:puppet
)上,我正在尝试为我们的主机 eb-web
(即 运行 宁一个 Puppet 代理)编写 Puppet 配置。
我想配置 UFW(简易防火墙)(https://help.ubuntu.com/community/UFW) on eb-web
using the Puppet Module kogitoapp/ufw
version 1.0.3 (https://forge.puppet.com/modules/kogitoapp/ufw) 以允许通过 HTTP 流量。
我们的 Puppet 服务器配置为使用 Hiera 来保存我们的事实。到目前为止,我已经创建了以下配置文件:
文件:/etc/puppetlabs/code/environments/production/hiera.yaml
version: 5
defaults:
# The default value for "datadir" is "data" under the same directory as the hiera.yaml
# file (this file)
hierarchy:
- name: "Per-node data (yaml version)"
path: "nodes/%{::trusted.certname}.yaml"
- name: "Per-role data"
path: "roles/%{::role}"
- name: "Other YAML hierarchy levels"
paths:
- "common.yaml"
文件:/etc/puppetlabs/code/environments/production/data/common.yaml
# empty at the moment
文件:
/etc/puppetlabs/code/environments/production/manifests/site.pp
node default {
hiera_include('roles')
}
文件:/etc/puppetlabs/code/environments/production/data/nodes/eb-web.evolvedbinary.com.yaml
roles:
- roles::www
ufw::ufw_rule:
name: 'Allow HTTP'
action: allow
to_ports_app: 80
proto: tcp
文件:/etc/puppetlabs/code/environments/production/modules/roles/manifests/www.pp
class roles::www {
include profiles::ufw
# include profiles::nginx
}
文件:/etc/puppetlabs/code/environments/production/modules/profiles/manifests/ufw.pp
class profiles::ufw {
class{ '::ufw': }
}
我还通过 运行ning 在 Puppet 服务器上安装了 ufw 模块:
sudo /opt/puppetlabs/bin/puppet module install kogitoapp-ufw --version 1.0.3
如果我现在切换到 eb-web
主机并尝试通过 运行ning 请求 Puppet Agent 从 Puppet 服务器应用配置:
sudo /opt/puppetlabs/bin/puppet agent --no-daemonize --test
然后我看到以下输出,我认为这表明所有内容都已应用:
ubuntu@eb-web:~$ sudo /opt/puppetlabs/bin/puppet agent --no-daemonize --test
Info: Using environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for eb-web.evolvedbinary.com
Info: Applying configuration version '1639003464'
Notice: Applied catalog in 0.60 seconds
ubuntu@eb-web:~$
在此之后,如果我检查:sudo ufw status
,这似乎表明 Puppet 尚未配置用于 HTTP 的端口 80:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
“更新(2021 年 12 月 20 日)”
在尝试解决此问题后,我成功了,但是,我犯了一个错误并将规则添加到 ufw.pp file
,这不是我想要的正确方法。在从 ufw.pp
文件中取出规则并将它们放入 eb-web.evolvedbinary.com.yaml
文件后,ufw port 80
现在被拒绝了。我尝试过使用 status: enable
和 status: allow
,我也尝试过 ensure: present
,以及尝试其他我 100% 都记不住的组合,所有这些都在 eb-web.evolvedbinary.com.yaml
文件中。 ufw.pp
文件当前看起来像:
class profiles::ufw {
class{ 'ufw':
}
}
eb-web.evolvedbinary.com.yaml
文件如下所示:
---
roles:
- roles::www
ufw::rule:
'Allow HTTP':
action: allow
to_ports_app: 80
proto: tcp
include nginx:
nginx::nginx_server:
'www.evolvedbinary.com':
ssl: true
www_root: '/var/www/www.evolvedbinary.com'
当我在 eb-web
主机(傀儡代理)上 运行 sudo /opt/puppetlabs/bin/puppet agent --no-daemonize --test
时,我没有看到任何错误,但是,当我 运行 sudo ufw status
我见:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere # allow_puppet
80 REJECT Anywhere # Allow HTTP
22 (v6) ALLOW Anywhere (v6) # allow_puppet
80 (v6) REJECT Anywhere (v6) # Allow HTTP
我不确定如何在 eb-web.evolvedbianry.com.yaml
文件中使用 hiera
启用端口 80。
有人可以帮我弄清楚如何使用 Puppet 配置 UFW 吗?
第一件事是查看 Puppet forge 上的示例 https://forge.puppet.com/modules/kogitoapp/ufw#basic,我可能暂时将 hiera 放在一边以使调试更容易。
尝试将其放入 /etc/puppetlabs/code/environments/production/modules/profiles/manifests/ufw.pp
class profiles::ufw {
class {'ufw':
rules => {
'Allow HTTP' => {
'action' => 'allow',
'to_ports_app' => 80,
'proto => 'tcp',
},
}
}
}
这个 Hiera 数据...
ufw::ufw_rule: name: 'Allow HTTP' action: allow to_ports_app: 80 proto: tcp
... 似乎是试图在您的 hiera 数据中声明模块的 ufw_rule
资源类型的实例。您不能以这种方式声明资源(并且该资源类型是名称为 ufw_rule
而不是 ufw::ufw_rule
的插件类型)。资源声明进入您的清单。例如,您可以将其放入 profiles/manifests/ufw.pp
:
ufw_rule { 'Allow HTTP':
action => 'allow',
to_ports_app => 80,
proto => 'tcp',
}
Hiera 最突出的用途是为 class(但不是资源)参数提供数据,一些 classes 使用它来支持间接资源声明。您通常将代表一个或多个资源的数据放入 class 参数中,然后声明 class 导致它声明如此描述的资源。您正在使用的 ufw
class 通过其参数 rules
(注意拼写)提供此选项,它期望数据以散列的散列形式出现,在外层具有资源名称键,并且ufw_rule
内层资源的资源名称/值映射。如果你想利用它,那么数据的结构应该是这样的:
ufw::rules:
'Allow HTTP':
action: allow
to_ports_app: 80
proto: tcp
当然,您也可以直接在 class 声明中分配参数值,如您的其他答案所示,但这需要使用类似资源的 class 声明。应尽可能避免类似资源的 class 声明。首选 include
、require
或 contain
来声明 classes.
在花了一些时间尝试解决这个问题后,又回过头来看看为什么这不起作用。我最终在 eb-web.evolvedbinary.com.yaml
中纠正了我的错误。我需要添加 include ufw
并将 ufw::rule
更改为 ufw::rules
。在完成这些更改后,端口 80 现在可以正常工作了。
eb-web.evolvedbinary.com.yaml
文件现在看起来像:
---
roles:
- roles::www
include ufw:
ufw::rules:
'Allow HTTP':
action: allow
to_ports_app: 80
proto: tcp
include nginx:
nginx::nginx_server:
'www.evolvedbinary.com':
ssl: true
www_root: '/var/www/www.evolvedbinary.com'