Saltstack Official UFW Formula
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
3.2KB

  1. # UFW management module
  2. {%- set ufw = pillar.get('ufw', {}) %}
  3. {%- if ufw.get('enabled', False) %}
  4. {% from "ufw/map.jinja" import ufwmap with context %}
  5. {% set default_template = ufw.get('default_template', 'salt://ufw/templates/default.jinja') -%}
  6. {% set sysctl_template = ufw.get('sysctl_template', 'salt://ufw/templates/sysctl.jinja') -%}
  7. ufw:
  8. pkg.installed:
  9. - name: {{ ufwmap.pkg }}
  10. service.running:
  11. - enable: True
  12. - watch:
  13. - file: /etc/default/ufw
  14. - file: /etc/ufw/sysctl.conf
  15. /etc/default/ufw:
  16. file.managed:
  17. - template: jinja
  18. - user: root
  19. - group: root
  20. - mode: 644
  21. - source: {{ default_template }}
  22. /etc/ufw/sysctl.conf:
  23. file.managed:
  24. - template: jinja
  25. - user: root
  26. - group: root
  27. - mode: 644
  28. - source: {{ sysctl_template }}
  29. /etc/ufw/applications.d:
  30. file.recurse:
  31. - user: root
  32. - group: root
  33. - file_mode: 644
  34. - clean: False
  35. - source: salt://ufw/files/applications.d
  36. # services
  37. {%- for service_name, service_details in ufw.get('services', {}).items() %}
  38. {%- for from_addr in service_details.get('from_addr', [None]) %}
  39. {%- set protocol = service_details.get('protocol', None) %}
  40. {%- set from_port = service_details.get('from_port', None) %}
  41. {%- set to_addr = service_details.get('to_addr', None) %}
  42. ufw-svc-{{service_name}}-{{from_addr}}:
  43. ufw.allowed:
  44. {%- if protocol != None %}
  45. - protocol: {{protocol}}
  46. {%- endif %}
  47. {%- if from_addr != None %}
  48. - from_addr: {{from_addr}}
  49. {%- endif %}
  50. {%- if from_port != None %}
  51. - from_port: "{{from_port}}"
  52. {%- endif %}
  53. {%- if to_addr != None %}
  54. - to_addr: {{to_addr}}
  55. {%- endif %}
  56. - to_port: "{{service_name}}"
  57. - require:
  58. - pkg: ufw
  59. - listen_in:
  60. - cmd: reload-ufw
  61. {%- endfor %}
  62. {%- endfor %}
  63. # Applications
  64. {%- for app_name, app_details in ufw.get('applications', {}).items() %}
  65. {%- for from_addr in app_details.get('from_addr', [None]) %}
  66. {%- set to_addr = app_details.get('to_addr', None) %}
  67. {%- if from_addr != None%}
  68. ufw-app-{{app_name}}-{{from_addr}}:
  69. {%- else %}
  70. ufw-app-{{app_name}}:
  71. {%- endif %}
  72. ufw.allowed:
  73. - app: '"{{app_name}}"'
  74. {%- if from_addr != None %}
  75. - from_addr: {{from_addr}}
  76. {%- endif %}
  77. {%- if to_addr != None %}
  78. - to_addr: {{to_addr}}
  79. {%- endif %}
  80. - require:
  81. - pkg: ufw
  82. - listen_in:
  83. - cmd: reload-ufw
  84. {%- endfor %}
  85. {%- endfor %}
  86. # Interfaces
  87. {%- for interface in ufw.get('interfaces', []) %}
  88. ufw-interface-{{interface}}:
  89. ufw.allowed:
  90. - interface: {{interface}}
  91. - require:
  92. - pkg: ufw
  93. - listen_in:
  94. - cmd: reload-ufw
  95. {%- endfor %}
  96. # Open
  97. {%- for from_addr in ufw.get('open', {}).get('from_addr', []) %}
  98. ufw-open-{{from_addr}}:
  99. ufw.allowed:
  100. - from_addr: {{from_addr}}
  101. - require:
  102. - pkg: ufw
  103. - listen_in:
  104. - cmd: reload-ufw
  105. {%- endfor %}
  106. enable-ufw:
  107. ufw.enabled:
  108. - require:
  109. - pkg: ufw
  110. reload-ufw:
  111. cmd.wait:
  112. - name: ufw reload
  113. disable-logging:
  114. cmd.run:
  115. - name: ufw logging off
  116. - unless: "grep 'LOGLEVEL=off' /etc/ufw/ufw.conf"
  117. {% else %}
  118. #ufw:
  119. #ufw:
  120. #- disabled
  121. {% endif %}