Ansible ufw module ERROR: Could not find a profile matching 'xxxxx'
Ansible ufw module ERROR: Could not find a profile matching 'xxxxx'
我正在努力通过 Ansible 设置 UFW 规则。我能够安装它,启动它并拒绝一切。然后我尝试允许来自 http、https 和 ssh 的连接。所有为这些项目添加允许的尝试都会遇到如下错误:
failed: [lempy1] (item={u'service': u'http'}) => {"failed": true, "item": {"service": "http"}, "msg": "ERROR: Could not find a profile matching 'http'\n"}
failed: [lempy1] (item={u'service': u'https'}) => {"failed": true, "item": {"service": "https"}, "msg": "ERROR: Could not find a profile matching 'https'\n"}
failed: [lempy1] (item={u'service': u'ssh'}) => {"failed": true, "item": {"service": "ssh"}, "msg": "ERROR: Could not find a profile matching 'ssh'\n"}
整个角色是这样的:
tasks/main.yml
---
- name: Install ufw
apt: name=ufw state=present
tags:
- security
- name: Allow webservery things
ufw:
rule: allow
name: '{{item.service}}'
with_items:
- service: http
- service: https
- service: ssh
tags:
- security
- name: Start ufw
ufw: state=enabled policy=deny
tags:
- security
知道为什么我不能使用这些服务吗?当 ssh 连接到服务器和 运行 sudo ufw allow http
等
时,我能够正确地添加服务
如 ufw module docs 中所述,名称(或应用程序)参数使用在 /etc/ufw/applications.d
中注册的应用程序,这些应用程序具有 INI 格式,如下所示:
[CUPS]
title=Common UNIX Printing System server
description=CUPS is a printing system with support for IPP, samba, lpd, and other protocols.
ports=631
通常您可以使用 ufw allow application-profile
来允许 /etc/ufw/applications.d
或 /etc/services
中定义的应用程序为 /etc/ufw/applications.d
中不一定定义的内容打开 iptables .
不幸的是,Ansible 的 ufw module 改为以这种格式构建 ufw 命令:
/usr/sbin/ufw allow from any to any app 'application-profile'
仅使用/etc/ufw/applications.d
列表,不会读取/etc/services
。
在你的情况下,你可以简单地指定端口,因为这些是众所周知的,可能使用命名变量来进一步解释你的 Ansible 代码:
- name: Allow webservery things
ufw:
rule: allow
port: '{{ item }}'
with_items:
- '{{ http_port }}'
- '{{ https_port }}'
- '{{ ssh_port }}'
tags:
- security
然后在某处定义变量(比如你的角色默认值):
http_port: 80
https_port: 443
ssh_port: 22
顺便说一句,您可能想注意到我用一个键将您的字典列表简化为一个更简单的直接列表,它稍微整理了您的任务。
或者,您可以使用 Ansible 的 template module.
轻松模板化应用程序配置文件
我正在努力通过 Ansible 设置 UFW 规则。我能够安装它,启动它并拒绝一切。然后我尝试允许来自 http、https 和 ssh 的连接。所有为这些项目添加允许的尝试都会遇到如下错误:
failed: [lempy1] (item={u'service': u'http'}) => {"failed": true, "item": {"service": "http"}, "msg": "ERROR: Could not find a profile matching 'http'\n"}
failed: [lempy1] (item={u'service': u'https'}) => {"failed": true, "item": {"service": "https"}, "msg": "ERROR: Could not find a profile matching 'https'\n"}
failed: [lempy1] (item={u'service': u'ssh'}) => {"failed": true, "item": {"service": "ssh"}, "msg": "ERROR: Could not find a profile matching 'ssh'\n"}
整个角色是这样的:
tasks/main.yml
---
- name: Install ufw
apt: name=ufw state=present
tags:
- security
- name: Allow webservery things
ufw:
rule: allow
name: '{{item.service}}'
with_items:
- service: http
- service: https
- service: ssh
tags:
- security
- name: Start ufw
ufw: state=enabled policy=deny
tags:
- security
知道为什么我不能使用这些服务吗?当 ssh 连接到服务器和 运行 sudo ufw allow http
等
如 ufw module docs 中所述,名称(或应用程序)参数使用在 /etc/ufw/applications.d
中注册的应用程序,这些应用程序具有 INI 格式,如下所示:
[CUPS]
title=Common UNIX Printing System server
description=CUPS is a printing system with support for IPP, samba, lpd, and other protocols.
ports=631
通常您可以使用 ufw allow application-profile
来允许 /etc/ufw/applications.d
或 /etc/services
中定义的应用程序为 /etc/ufw/applications.d
中不一定定义的内容打开 iptables .
不幸的是,Ansible 的 ufw module 改为以这种格式构建 ufw 命令:
/usr/sbin/ufw allow from any to any app 'application-profile'
仅使用/etc/ufw/applications.d
列表,不会读取/etc/services
。
在你的情况下,你可以简单地指定端口,因为这些是众所周知的,可能使用命名变量来进一步解释你的 Ansible 代码:
- name: Allow webservery things
ufw:
rule: allow
port: '{{ item }}'
with_items:
- '{{ http_port }}'
- '{{ https_port }}'
- '{{ ssh_port }}'
tags:
- security
然后在某处定义变量(比如你的角色默认值):
http_port: 80
https_port: 443
ssh_port: 22
顺便说一句,您可能想注意到我用一个键将您的字典列表简化为一个更简单的直接列表,它稍微整理了您的任务。
或者,您可以使用 Ansible 的 template module.
轻松模板化应用程序配置文件