diff --git a/.README.html b/.README.html index 791e11a..5f107f0 100644 --- a/.README.html +++ b/.README.html @@ -137,6 +137,11 @@
See below
+The role requires external collections only for management of
+rpm-ostree
nodes. Please run the following command to
+install them if you need to manage rpm-ostree
nodes:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
The configuration of the firewall could limit access to the machine @@ -237,15 +251,15 @@
To gather the firewall system role's ansible facts, call the system role with no arguments e.g.
-vars:
- firewall:
Another option is to gather a more detailed version of the ansible -facts by using the detailed argument e.g.
vars:
- firewall:
- detailed: true
Another option is to gather a more detailed version of the ansible +facts by using the detailed argument e.g.
+vars:
+ firewall:
+ detailed: true
WARNING: firewall_config
uses
considerably more memory (+ ~165KB) when detailed=True
. For
reference, by default, firewall_config
takes ~3KB when
@@ -280,99 +294,99 @@
default_zone
contains the configured default zone for
the managed node's firewalld installation. It is a string value.
JSON representation of the structure of firewall_config fact:
-{
-"default": {...},
- "custom": {...},
- "default_zone": "public",
- }
{
+"default": {...},
+ "custom": {...},
+ "default_zone": "public",
+ }
The default subdictionary of firewall_config contains the default configuration for the managed node's firewalld configuration. This subdictionary only changes with changes to the managed node's firewalld installation.
default without detailed parameter set to true
-"default": {
-"zones": ["public",...],
- "services": ["amanda_client",...],
- "icmptypes": [...],
- "helpers": [...],
- "ipsets": [...],
- "policies": [...],
- }
default when parameter set to true
"default": {
-"zones": {
- "public": {
- ...
- },
- ...
- },
- "services": {
- "amanda_client":{
- ...
- },
- ...
- },
- "icmptypes": {
- ...
- },
- "helpers": {
- ...
- },
- "ipsets": {
- ...
- },
- "policies": {
- ...
- },
- }
The custom subdictionary contains any differences from the default -firewalld configuration. This includes a repeat for a default element if -that element has been modified in any way, and any new elements -introduced in addition to the defaults.
-This subdictionary will be modified by any changes to the firewalld -installation done locally or remotely via the firewall system role.
-If the managed nodes firewalld settings are not different from the -defaults, the custom key and subdictionary will not be present in -firewall_config. Additionally, if any of firewalld's settings have not -changed from the default, there will not be a key-value pair for that -setting in custom.
-Below is the state of the custom subdictionary where at least one -permanent change was made to each setting:
+ "zones": ["public",...], + "services": ["amanda_client",...], + "icmptypes": [...], + "helpers": [...], + "ipsets": [...], + "policies": [...], +} +default when parameter set to true
"custom": {
+class="sourceCode json">"default": {
"zones": {
- "custom_zone": {
+ "public": {
...
},
...
},
"services": {
- "custom_service": {
+ "amanda_client":{
...
},
...
},
"icmptypes": {
- "custom": {
- ...
- },
+ ...
+ },
+ "helpers": {
...
},
- "helpers": {
+ "ipsets": {
...
},
- "ipsets": {
+ "policies": {
...
},
- "policies": {
- ...
- },
- }
The custom subdictionary contains any differences from the default +firewalld configuration. This includes a repeat for a default element if +that element has been modified in any way, and any new elements +introduced in addition to the defaults.
+This subdictionary will be modified by any changes to the firewalld +installation done locally or remotely via the firewall system role.
+If the managed nodes firewalld settings are not different from the +defaults, the custom key and subdictionary will not be present in +firewall_config. Additionally, if any of firewalld's settings have not +changed from the default, there will not be a key-value pair for that +setting in custom.
+Below is the state of the custom subdictionary where at least one +permanent change was made to each setting:
+"custom": {
+"zones": {
+ "custom_zone": {
+ ...
+ },
+ ...
+ },
+ "services": {
+ "custom_service": {
+ ...
+ },
+ ...
+ },
+ "icmptypes": {
+ "custom": {
+ ...
+ },
+ ...
+ },
+ "helpers": {
+ ...
+ },
+ "ipsets": {
+ ...
+ },
+ "policies": {
+ ...
+ },
+ }
firewall_disable_conflicting_services
to
true
:
-- name: Enable firewalld, disable conflicting services
- include_role: linux-system-roles.firewall
- vars:
- firewall_disable_conflicting_services: true
- name: Enable firewalld, disable conflicting services
+ include_role: linux-system-roles.firewall
+ vars:
+ firewall_disable_conflicting_services: true
List of known conflicting services:
permanent: true
must always be set to run this
option without error
firewall:
- - firewalld_conf:
- allow_zone_drifting: false
- permanent: true
firewall:
+ - firewalld_conf:
+ allow_zone_drifting: false
+ permanent: true
Changes the AllowZoneDrifting directive.
This parameter will do nothing if AllowZoneDrifting has been deprecated and no longer exists.
-firewall:
- firewalld_conf:
- allow_zone_drifting: true
- permanent: true
firewall:
+ firewalld_conf:
+ allow_zone_drifting: true
+ permanent: true
The default zone is the zone that is used for everything that is not explicitly bound/assigned to another zone.
That means that if there is no zone assigned to a connection, interface or source, only the default zone is used. The zone should exist before setting it as the default zone.
-firewall:
- - zone: mycustomzone # ensure custom zone exists first
- state: present
- - set_default_zone: mycustomzone # set custom as default
- state: enabled
firewall:
+ - zone: mycustomzone # ensure custom zone exists first
+ state: present
+ - set_default_zone: mycustomzone # set custom as default
+ state: enabled
Name of the zone that should be modified. If it is not set, the default zone will be used. It will have an effect on these variables: @@ -449,14 +463,14 @@
zone
variable with no other variables, and use
state: present
to add the zone, or
state: absent
to remove it.
-zone: public
zone: public
Name of a service or service list to add or remove inbound access to.
-service: ftp
-service: [ftp,tftp]
service: ftp
+service: [ftp,tftp]
If a specified service does not exist in firewalld, the module will fail in diff mode, and when run in check mode will always report no changes and warn the user of the potential for failure.
@@ -467,50 +481,50 @@protocol
, helper_module
, or
destination
to initialize and add options to the service
e.g.
-firewall:
- # Adds custom service named customservice,
- # defines the new services short to be "Custom Service",
- # sets its description to "Custom service for example purposes,
- # and adds the port 8080/tcp
- - service: customservice
- short: Custom Service
- description: Custom service for example purposes
- port: 8080/tcp
- state: present
- permanent: true
firewall:
+ # Adds custom service named customservice,
+ # defines the new services short to be "Custom Service",
+ # sets its description to "Custom service for example purposes,
+ # and adds the port 8080/tcp
+ - service: customservice
+ short: Custom Service
+ description: Custom service for example purposes
+ port: 8080/tcp
+ state: present
+ permanent: true
Existing services can be modified in the same way as you would create
a service. short
, description
, and
destination
can be reassigned this way, while
port
, source port
, protocol
, and
helper_module
will add the specified options if they did
not exist previously without removing any previous elements. e.g.
firewall:
- # changes ftp's description, and adds the port 9090/tcp if it was not previously present
- - service: ftp
- description: I am modifying the builtin service ftp's description as an example
- port: 9090/tcp
- state: present
- permanent: true
firewall:
+ # changes ftp's description, and adds the port 9090/tcp if it was not previously present
+ - service: ftp
+ description: I am modifying the builtin service ftp's description as an example
+ port: 9090/tcp
+ state: present
+ permanent: true
You can remove a service
or specific port
,
source_port
, protocol
,
helper_module
elements (or destination
attributes) by using service
with
state: absent
with any of the removable attributes listed.
e.g.
firewall:
- # Removes the port 8080/tcp from customservice if it exists.
- # DOES NOT REMOVE CUSTOM SERVICE
- - service: customservice
- port: 8080/tcp
- state: absent
- permanent: true
- # Removes the service named customservice if it exists
- - service: customservice
- state: absent
- permanent: true
firewall:
+ # Removes the port 8080/tcp from customservice if it exists.
+ # DOES NOT REMOVE CUSTOM SERVICE
+ - service: customservice
+ port: 8080/tcp
+ state: absent
+ permanent: true
+ # Removes the service named customservice if it exists
+ - service: customservice
+ state: absent
+ permanent: true
NOTE: permanent: true
needs to be specified in order to
define, modify, or remove a service. This is so anyone using
service
with state: present/absent
@@ -526,84 +540,84 @@
ipset_type
, and optionally short
,
description
, ipset_entries
Defining an ipset with all optional fields:
-firewall:
- - ipset: customipset
- ipset_type: "hash:ip"
- short: Custom IPSet
- description: set of ip addresses specified in entries
- ipset_entries:
- - 1.1.1.1
- - 2.2.2.2
- - 3.3.3.3
- - 8.8.8.8
- - 127.0.0.1
- state: present
- permanent: true
Adding an entry to an existing ipset
firewall:
- ipset: customipset
- ipset_entries:
- - 127.0.0.2
- state: present
- permanent: true
Changing the short and description of an ipset
+ ipset_type: "hash:ip" + short: Custom IPSet + description: set of ip addresses specified in entries + ipset_entries: + - 1.1.1.1 + - 2.2.2.2 + - 3.3.3.3 + - 8.8.8.8 + - 127.0.0.1 + state: present + permanent: true +Adding an entry to an existing ipset
firewall:
- ipset: customipset
- short: Custom
- description: Set of IPv4 addresses
+ ipset_entries:
+ - 127.0.0.2
state: present
permanent: true
Removing entries from an ipset
+Changing the short and description of an ipset
firewall:
- ipset: customipset
- ipset_entries:
- - 127.0.0.1
- - 127.0.0.2
- state: absent
- permanent: true
Removing an ipset
+ short: Custom + description: Set of IPv4 addresses + state: present + permanent: true +Removing entries from an ipset
firewall:
- ipset: customipset
- state: absent
- permanent: true
Removing an ipset
+firewall:
+ - ipset: customipset
+ state: absent
+ permanent: true
Port or port range or a list of them to add or remove inbound access
to. It needs to be in the format
<port>[-<port>]/<protocol>
.
port: '443/tcp'
-port: ['443/tcp','443/udp']
port: '443/tcp'
+port: ['443/tcp','443/udp']
Type of ipset being defined. Used with ipset
.
For a list of available ipset types, run
firewall-cmd --get-ipset-types
, there is no method to get
supported types from this role.
ipset: customipset
-ipset_type: hash:mac
ipset: customipset
+ipset_type: hash:mac
See ipset
for more usage information
List of addresses to add or remove from an ipset Used with
ipset
Entrys must be compatible with the ipset type of the
ipset
being created or modified.
ipset: customipset
-ipset_entries:
- - 127.0.0.1
ipset: customipset
+ipset_entries:
+ - 127.0.0.1
See ipset
for more usage information
Port or port range or a list of them to add or remove source port
access to. It needs to be in the format
<port>[-<port>]/<protocol>
.
source_port: '443/tcp'
-source_port: ['443/tcp','443/udp']
source_port: '443/tcp'
+source_port: ['443/tcp','443/udp']
Add or remove port forwarding for ports or port ranges for a zone. It takes two different formats:
@@ -614,53 +628,53 @@ansible.posix.firewalld
:forward_port:
- port: <port>
- proto: <protocol>
- [toport: <to-port>]
- [toaddr: <to-addr>]
examples
forward_port: '447/tcp;;1.2.3.4'
-forward_port: ['447/tcp;;1.2.3.4','448/tcp;;1.2.3.5']
-forward_port:
- - 447/tcp;;1.2.3.4
- - 448/tcp;;1.2.3.5
-forward_port:
- - port: 447
- proto: tcp
- toaddr: 1.2.3.4
- - port: 448
- proto: tcp
- toaddr: 1.2.3.5
forward_port:
+ port: <port>
+ proto: <protocol>
+ [toport: <to-port>]
+ [toaddr: <to-addr>]
+examples
+forward_port: '447/tcp;;1.2.3.4'
+forward_port: ['447/tcp;;1.2.3.4','448/tcp;;1.2.3.5']
+forward_port:
+ - 447/tcp;;1.2.3.4
+ - 448/tcp;;1.2.3.5
+forward_port:
+ - port: 447
+ proto: tcp
+ toaddr: 1.2.3.4
+ - port: 448
+ proto: tcp
+ toaddr: 1.2.3.5
port_forward
is an alias for forward_port
.
Its use is deprecated and will be removed in an upcoming release.
Enable or disable masquerade on the given zone.
-masquerade: false
masquerade: false
String or list of rich rule strings. For the format see (Syntax for firewalld rich language rules)[https://firewalld.org/documentation/man-pages/firewalld.richlanguage.html]
-rich_rule: rule service name="ftp" audit limit value="1/m" accept
rich_rule: rule service name="ftp" audit limit value="1/m" accept
List of source address address range strings, or ipsets. A source address or address range is either an IP address or a network IP address with a mask for IPv4 or IPv6. For IPv4, the mask can be a network mask or a plain number. For IPv6 the mask is a plain number.
-source: 192.0.2.0/24
source: 192.0.2.0/24
Ipsets are used with this option by prefixing "ipset:" to the name of the ipset
-source: ipset:ipsetname
source: ipset:ipsetname
String or list of interface name strings.
-interface: eth2
interface: eth2
This role handles interface arguments similar to how firewalld's cli,
firewall-cmd
does, i.e. manages the interface through
NetworkManager if possible, and handles the interface binding purely
@@ -689,9 +703,9 @@
# PCI id for Intel Corporation Ethernet Connection
-interface_pci_id: 8086:15d7
# PCI id for Intel Corporation Ethernet Connection
+interface_pci_id: 8086:15d7
Only accepts PCI devices IDs that correspond to a named network interface, and converts all PCI device IDs to their respective logical interface names.
@@ -704,31 +718,31 @@String or list of ICMP type strings to block. The ICMP type names needs to be defined in firewalld configuration.
-icmp_block: echo-request
icmp_block: echo-request
ICMP block inversion bool setting. It enables or disables inversion of ICMP blocks for a zone in firewalld.
-icmp_block_inversion: true
icmp_block_inversion: true
The firewalld zone target. If the state is set to
absent
,this will reset the target to default. Valid values
are "default", "ACCEPT", "DROP", "%%REJECT%%".
target: ACCEPT
target: ACCEPT
Short description, only usable when defining or modifying a service
or ipset. See service
or ipset
for more usage
information.
short: Short Description
short: Short Description
Description for a service, only usable when adding a new service or
modifying an existing service. See service
or
ipset
for more information
description: Your description goes here
description: Your description goes here
list of destination addresses, option only implemented for user-defined services. Takes 0-2 addresses, allowing for one IPv4 @@ -739,16 +753,16 @@
destination:
- - 1.1.1.0/24
- - AAAA::AAAA:AAAA
destination:
+ - 1.1.1.0/24
+ - AAAA::AAAA:AAAA
Name of a connection tracking helper supported by firewalld.
-# Both properly specify nf_conntrack_ftp
-helper_module: ftp
-helper_module: nf_conntrack_ftp
# Both properly specify nf_conntrack_ftp
+helper_module: ftp
+helper_module: nf_conntrack_ftp
The amount of time in seconds a setting is in effect. The timeout is usable if
@@ -758,24 +772,24 @@timeout: 60
-state: enabled
-service: https
timeout: 60
+state: enabled
+service: https
Enable or disable the entry.
-state: 'enabled' | 'disabled' | 'present' | 'absent'
state: 'enabled' | 'disabled' | 'present' | 'absent'
NOTE: present
and absent
are only used for
zone
, target
, and service
operations, and cannot be used for any other operation.
NOTE: zone
- use state: present
to add a
zone, and state: absent
to remove a zone, when zone is the
only variable e.g.
firewall:
- - zone: my-new-zone
- state: present
firewall:
+ - zone: my-new-zone
+ state: present
NOTE: target
- you can also use
state: present
to add a target - state: absent
will reset the target to the default.
Enable changes in runtime configuration. If runtime
parameter is not provided, the default will be set to
True
.
runtime: true
runtime: true
Enable changes in permanent configuration. If permanent
parameter is not provided, the default will be set to
True
.
permanent: true
permanent: true
The permanent and runtime settings are independent, so you can set
only the runtime, or only the permanent. You cannot set both permanent
and runtime to false
.
runtime: false
.
Permit TCP traffic for port 80 in default zone, in addition to any existing configuration:
-firewall:
- - port: 80/tcp
- state: enabled
Remove all existing firewall configuration, and permit TCP traffic -for port 80 in default zone:
firewall:
- - previous: replaced
- - port: 80/tcp
- state: enabled
Do not permit TCP traffic for port 80 in default zone:
+ - port: 80/tcp + state: enabled +Remove all existing firewall configuration, and permit TCP traffic +for port 80 in default zone:
firewall:
- - port: 80/tcp
- state: disabled
Add masquerading to dmz zone:
+ - previous: replaced + - port: 80/tcp + state: enabled +Do not permit TCP traffic for port 80 in default zone:
firewall:
- - masquerade: true
- zone: dmz
- state: enabled
Remove masquerading to dmz zone:
+ - port: 80/tcp + state: disabled +Add masquerading to dmz zone:
firewall:
- - masquerade: false
+ - masquerade: true
zone: dmz
state: enabled
Allow interface eth2 in trusted zone:
+Remove masquerading to dmz zone:
firewall:
- - interface: eth2
- zone: trusted
+ - masquerade: false
+ zone: dmz
state: enabled
Don't allow interface eth2 in trusted zone:
+Allow interface eth2 in trusted zone:
firewall:
- interface: eth2
zone: trusted
- state: disabled
Permit traffic in default zone for https service:
+ state: enabled +Don't allow interface eth2 in trusted zone:
firewall:
- - service: https
- state: enabled
Do not permit traffic in default zone for https service:
+ - interface: eth2 + zone: trusted + state: disabled +Permit traffic in default zone for https service:
firewall:
- service: https
- state: disabled
Allow interface with PCI device ID '8086:15d7' in dmz zone
+ state: enabled +Do not permit traffic in default zone for https service:
firewall:
- - zone: dmz
- interface_pci_id: 8086:15d7
- state: enabled
Allow interface with PCI device ID '8086:15d7' in dmz zone
+firewall:
+ - zone: dmz
+ interface_pci_id: 8086:15d7
+ state: enabled
Erase all existing configuration, and enable ssh service:
----
-- name: Erase existing config and enable ssh service
- hosts: myhost
-
- vars:
- firewall:
- - previous: replaced
- - service: ssh
- state: enabled
- roles:
- - linux-system-roles.firewall
With this playbook you can make sure that the tftp service is -disabled in the firewall:
---
-- name: Make sure tftp service is disabled
+- name: Erase existing config and enable ssh service
hosts: myhost
vars:
firewall:
- - service: tftp
- state: disabled
- roles:
- - linux-system-roles.firewall
It is also possible to combine several settings into blocks:
+ - previous: replaced + - service: ssh + state: enabled + roles: + - linux-system-roles.firewall +With this playbook you can make sure that the tftp service is +disabled in the firewall:
---
-- name: Configure firewall
+- name: Make sure tftp service is disabled
hosts: myhost
vars:
firewall:
- - {service: [tftp,ftp],
- port: ['443/tcp','443/udp'],
- state: enabled}
- - {forward_port: [eth2;447/tcp;;1.2.3.4,
- eth2;448/tcp;;1.2.3.5],
- state: enabled}
- - {zone: internal, service: tftp, state: enabled}
- - {service: tftp, state: enabled}
- - {port: '443/tcp', state: enabled}
- - {forward_port: 'eth0;445/tcp;;1.2.3.4', state: enabled}
- state: enabled}
- roles:
- - linux-system-roles.firewall
The block with several services, ports, etc. will be applied at once. -If there is something wrong in the block it will fail as a whole.
+ - service: tftp + state: disabled + roles: + - linux-system-roles.firewall +It is also possible to combine several settings into blocks:
---
-- name: Configure external zone in firewall
+- name: Configure firewall
hosts: myhost
vars:
firewall:
- - {zone: external,
- service: [tftp,ftp],
- port: ['443/tcp','443/udp'],
- forward_port: ['447/tcp;;1.2.3.4',
- '448/tcp;;1.2.3.5'],
- state: enabled}
- roles:
- - linux-system-roles.firewall
The block with several services, ports, etc. will be applied at once. +If there is something wrong in the block it will fail as a whole.
+---
+- name: Configure external zone in firewall
+ hosts: myhost
+
+ vars:
+ firewall:
+ - {zone: external,
+ service: [tftp,ftp],
+ port: ['443/tcp','443/udp'],
+ forward_port: ['447/tcp;;1.2.3.4',
+ '448/tcp;;1.2.3.5'],
+ state: enabled}
+ roles:
+ - linux-system-roles.firewall
See README-ostree.md
Thomas Woerner