Merge branch 'p-rintz-feature_forwarding'
This commit is contained in:
		
						commit
						f7dffda808
					
				|  | @ -34,6 +34,8 @@ complexify his philosophy… (I'm pretty sure, i now did complexify it :D) ^^ | ||||||
| * **nft_input_conf_content** : Template used to generate the previous input configuration file [default : `etc/nftables.d/filter-input.nft.j2`]. | * **nft_input_conf_content** : Template used to generate the previous input configuration file [default : `etc/nftables.d/filter-input.nft.j2`]. | ||||||
| * **nft_output_conf_path** : Output configuration file include in main configuration file [default : `{{ nft_conf_dir_path }}/filter-output.nft`]. | * **nft_output_conf_path** : Output configuration file include in main configuration file [default : `{{ nft_conf_dir_path }}/filter-output.nft`]. | ||||||
| * **nft_output_conf_content** : Template used to generate the previous output configuration file [default : `etc/nftables.d/filter-output.nft.j2`]. | * **nft_output_conf_content** : Template used to generate the previous output configuration file [default : `etc/nftables.d/filter-output.nft.j2`]. | ||||||
|  | * **nft_forward_conf_path** : forward configuration file include in main configuration file [default : `{{ nft_conf_dir_path }}/filter-forward.nft`]. | ||||||
|  | * **nft_forward_conf_content** : Template used to generate the previous forward configuration file [default : `etc/nftables.d/filter-forward.nft.j2`]. | ||||||
| * **nft_define_conf_path** : Vars definition file include in main configuration file [default : `{{ nft_conf_dir_path }}/defines.nft`]. | * **nft_define_conf_path** : Vars definition file include in main configuration file [default : `{{ nft_conf_dir_path }}/defines.nft`]. | ||||||
| * **nft_define_conf_content** : Template used to generate the previous vars definition file [default : `etc/nftables.d/defines.nft.j2`]. | * **nft_define_conf_content** : Template used to generate the previous vars definition file [default : `etc/nftables.d/defines.nft.j2`]. | ||||||
| * **nft_sets_conf_path** : Sets and maps definition file include in main configuration file [default : `{{ nft_conf_dir_path }}/sets.nft`]. | * **nft_sets_conf_path** : Sets and maps definition file include in main configuration file [default : `{{ nft_conf_dir_path }}/sets.nft`]. | ||||||
|  | @ -51,6 +53,11 @@ complexify his philosophy… (I'm pretty sure, i now did complexify it :D) ^^ | ||||||
| * **nft_output_rules** : You can add `output` rules or override those defined by **nft_output_default_rules** for all hosts. | * **nft_output_rules** : You can add `output` rules or override those defined by **nft_output_default_rules** for all hosts. | ||||||
| * **nft_output_group_rules** : You can add `output` rules or override those defined by **nft_output_default_rules** and **nft_output_rules** for a group. | * **nft_output_group_rules** : You can add `output` rules or override those defined by **nft_output_default_rules** and **nft_output_rules** for a group. | ||||||
| * **nft_output_host_rules** : Hosts can also add or override all previous `output` rules. | * **nft_output_host_rules** : Hosts can also add or override all previous `output` rules. | ||||||
|  | * **nft_forward_default_rules** : Set default rules for `forward` chain. | ||||||
|  | * **nft_forward_rules** : You can add `forward` rules or override those defined by **nft_forward_default_rules** for all hosts. | ||||||
|  | * **nft_forward_group_rules** : You can add `forward` rules or override those defined by **nft_forward_default_rules** and **nft_forward_rules** for a group. | ||||||
|  | * **nft_forward_host_rules** : Hosts can also add or override all previous `forward` rules. | ||||||
|  | * **nft__forward_table_manage** : If the forward table should be managed [default : `False`]. | ||||||
| * **nft__nat_table_manage** : If the nat table should be managed [default : `False`]. | * **nft__nat_table_manage** : If the nat table should be managed [default : `False`]. | ||||||
| * **nft__nat_default_prerouting_rules** : Set default rules for `prerouting` chain of **nat** table. | * **nft__nat_default_prerouting_rules** : Set default rules for `prerouting` chain of **nat** table. | ||||||
| * **nft__nat_prerouting_rules** : Set rules for `prerouting` chain of **nat** table for all hosts in the Ansible inventory. | * **nft__nat_prerouting_rules** : Set rules for `prerouting` chain of **nat** table for all hosts in the Ansible inventory. | ||||||
|  |  | ||||||
|  | @ -102,6 +102,11 @@ nft_global_host_rules: {} | ||||||
| # Custom content (tables, include,…) to add in Nftables configuration. | # Custom content (tables, include,…) to add in Nftables configuration. | ||||||
| nft__custom_content: '' | nft__custom_content: '' | ||||||
|                                                                    # ]]] |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft_custom_includes [[[ | ||||||
|  | # | ||||||
|  | # Custom includes to add into the main Nftables filter configuration. | ||||||
|  | nft_custom_includes: '' | ||||||
|  |                                                                    # ]]] | ||||||
| # .. envvar:: nft_conf_dir_path [[[ | # .. envvar:: nft_conf_dir_path [[[ | ||||||
| # | # | ||||||
| # Path to the sub directory for Nftables configuration files. | # Path to the sub directory for Nftables configuration files. | ||||||
|  | @ -355,6 +360,57 @@ nft_output_conf_path: '{{ nft_conf_dir_path }}/filter-output.nft' | ||||||
| # Ansible inventory directory. | # Ansible inventory directory. | ||||||
| nft_output_conf_content: 'etc/nftables.d/filter-output.nft.j2' | nft_output_conf_content: 'etc/nftables.d/filter-output.nft.j2' | ||||||
|                                                                    # ]]] |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft__forward_table_manage [[[ | ||||||
|  | # | ||||||
|  | # If the forward table should be managed ? Possible options are : | ||||||
|  | # | ||||||
|  | # ``False`` | ||||||
|  | #   Default. The forward table is not managed and rules will not be added. | ||||||
|  | # | ||||||
|  | # ``True`` | ||||||
|  | #   Add the forwarding rules that follow. | ||||||
|  | nft__forward_table_manage: false | ||||||
|  |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft_forward_default_rules [[[ | ||||||
|  | # | ||||||
|  | # List of forward rules to configure for all hosts inherited from this role. | ||||||
|  | nft_forward_default_rules: | ||||||
|  |   000 policy: | ||||||
|  |     - type filter hook forward priority 0; policy drop; | ||||||
|  |   005 global: | ||||||
|  |     - jump global | ||||||
|  |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft_forward_rules [[[ | ||||||
|  | # | ||||||
|  | # List of forward rules to configure for all hosts in the Ansible inventory. | ||||||
|  | nft_forward_rules: {} | ||||||
|  |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft_forward_group_rules [[[ | ||||||
|  | # | ||||||
|  | # List of forward rules to configure for hosts in specific Ansible inventory group. | ||||||
|  | nft_forward_group_rules: {} | ||||||
|  |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft_forward_host_rules [[[ | ||||||
|  | # | ||||||
|  | # List of forward rules to configure for specific hosts in the Ansible inventory. | ||||||
|  | nft_forward_host_rules: {} | ||||||
|  |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft_forward_conf_path [[[ | ||||||
|  | # | ||||||
|  | # Path to the forward rules file for the filter table to include in the main | ||||||
|  | # configuration file in order to use the previous defined lists. | ||||||
|  | # | ||||||
|  | # Should include the '{{ nft_conf_dir_path }}' var or be an absolut path. | ||||||
|  | nft_forward_conf_path: '{{ nft_conf_dir_path }}/filter-forward.nft' | ||||||
|  |                                                                    # ]]] | ||||||
|  | # .. envvar:: nft_forward_conf_content [[[ | ||||||
|  | # | ||||||
|  | # Template used to provide the previous forward rules file. | ||||||
|  | # | ||||||
|  | # Must be a relative path from default/ directory of this role or from your | ||||||
|  | # Ansible inventory directory. | ||||||
|  | nft_forward_conf_content: 'etc/nftables.d/filter-forward.nft.j2' | ||||||
|  |                                                                    # ]]] | ||||||
|                                                                    # ]]] |                                                                    # ]]] | ||||||
| # ip nat table rules [[[ | # ip nat table rules [[[ | ||||||
| # --------------------------- | # --------------------------- | ||||||
|  |  | ||||||
|  | @ -130,6 +130,18 @@ | ||||||
|   notify: ['Reload nftables service'] |   notify: ['Reload nftables service'] | ||||||
|   when: nft_enabled|bool |   when: nft_enabled|bool | ||||||
| 
 | 
 | ||||||
|  | - name: Filter table - generate forward rules file | ||||||
|  |   template: | ||||||
|  |     src: "{{ nft_forward_conf_content }}" | ||||||
|  |     dest: "{{ nft_forward_conf_path }}" | ||||||
|  |     owner: root | ||||||
|  |     group: root | ||||||
|  |     mode: 0755 | ||||||
|  |     backup: yes | ||||||
|  |   notify: ['Reload nftables service'] | ||||||
|  |   when: (nft_enabled|bool and | ||||||
|  |          nft__forward_table_manage|bool) | ||||||
|  | 
 | ||||||
| # Nat table content [[[1 | # Nat table content [[[1 | ||||||
| - name: Nat table - generate prerouting rules file | - name: Nat table - generate prerouting rules file | ||||||
|   template: |   template: | ||||||
|  |  | ||||||
|  | @ -29,6 +29,18 @@ table inet filter { | ||||||
| 	include "{{ nft_set_conf_path }}" | 	include "{{ nft_set_conf_path }}" | ||||||
| 	include "{{ nft_input_conf_path }}" | 	include "{{ nft_input_conf_path }}" | ||||||
| 	include "{{ nft_output_conf_path }}" | 	include "{{ nft_output_conf_path }}" | ||||||
|  | {% if nft__forward_table_manage %} | ||||||
|  | 	include "{{ nft_forward_conf_path }}" | ||||||
|  | {% endif %} | ||||||
|  | {% if nft_custom_includes | default() %} | ||||||
|  |   {% if nft_custom_includes is string %} | ||||||
|  | 	include "{{ nft_custom_includes }}" | ||||||
|  |   {% elif nft_custom_includes is iterable and (nft_custom_includes is not string and nft_custom_includes is not mapping) %} | ||||||
|  |     {% for include in nft_custom_includes %} | ||||||
|  | 	include "{{ include }}" | ||||||
|  |     {% endfor %} | ||||||
|  |   {% endif %} | ||||||
|  | {% endif %} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| {% if nft__nat_table_manage %} | {% if nft__nat_table_manage %} | ||||||
|  |  | ||||||
|  | @ -0,0 +1,21 @@ | ||||||
|  | #jinja2: lstrip_blocks: "True", trim_blocks: "True" | ||||||
|  | # {{ ansible_managed }} | ||||||
|  | {% set forwardmerged = nft_forward_default_rules.copy() %} | ||||||
|  | {% set _ = forwardmerged.update(nft_forward_rules) %} | ||||||
|  | {% set _ = forwardmerged.update(nft_forward_group_rules) %} | ||||||
|  | {% if nft_merged_groups and hostvars[inventory_hostname]['nft_combined_rules'].nft_forward_group_rules is defined %} | ||||||
|  |   {% set _ = forwardmerged.update(hostvars[inventory_hostname]['nft_combined_rules'].nft_forward_group_rules) %} | ||||||
|  | {% endif %} | ||||||
|  | {% set _ = forwardmerged.update(nft_forward_host_rules) %} | ||||||
|  | 
 | ||||||
|  | chain forward { | ||||||
|  | {% for group, rules in forwardmerged|dictsort  %} | ||||||
|  |     # {{ group }} | ||||||
|  |   {% if not rules %} | ||||||
|  |     # (none) | ||||||
|  |   {% endif %} | ||||||
|  |   {% for rule in rules %} | ||||||
|  |     {{ rule }} | ||||||
|  |   {% endfor %} | ||||||
|  | {% endfor %} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue