Saltstack Official UFW Formula
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

146 lines
3.1KB

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