暫無描述

init.sls 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. {% import 'globals.jinja' as globals %}
  2. # Required packages and helpers
  3. # -----------------------------
  4. ipset_package:
  5. pkg.installed:
  6. - name: ipset
  7. /etc/iptables/ipset-save.sh:
  8. file.managed:
  9. - source: salt://firewall/files/ipset-save.sh
  10. - mode: 555
  11. - makedirs: True
  12. /etc/network/if-pre-up.d/restore-iptables:
  13. file.managed:
  14. - source: salt://firewall/files/restore-iptables
  15. - mode: 555
  16. do_ipset_save:
  17. cmd.run:
  18. - name: /etc/iptables/ipset-save.sh
  19. - onchanges:
  20. - pkg: ipset_package
  21. - file: /etc/iptables/ipset-save.sh
  22. # IP Sets
  23. # -------
  24. # Backend server private IP addresses.
  25. ipset_backend_private_ips:
  26. ipset.set_present:
  27. - require:
  28. - pkg: ipset_package
  29. - onchanges_in:
  30. - cmd: do_ipset_save
  31. - set_type: bitmap:ip
  32. - range: 192.168.128.0/17
  33. # Ensure we always include the admin server IP(s).
  34. ipset_backend_admin_ip_entries:
  35. ipset.present:
  36. - require:
  37. - ipset: ipset_backend_private_ips
  38. - onchanges_in:
  39. - cmd: do_ipset_save
  40. - set_name: ipset_backend_private_ips
  41. - entry:
  42. {% for ip in globals.admin_ip_addresses %}
  43. - {{ ip }}
  44. {% endfor %}
  45. include:
  46. - firewall.backend_private_ip_entries
  47. # Publically accessible TCP ports.
  48. ipset_public_tcp_ports:
  49. ipset.set_present:
  50. - require:
  51. - pkg: ipset_package
  52. - onchanges_in:
  53. - cmd: do_ipset_save
  54. - set_type: bitmap:port
  55. - range: 0-65535
  56. # Always include SSH access.
  57. ipset_public_tcp_port_entries:
  58. ipset.present:
  59. - require:
  60. - ipset: ipset_public_tcp_ports
  61. - onchanges_in:
  62. - cmd: do_ipset_save
  63. - set_name: ipset_public_tcp_ports
  64. - entry:
  65. - '22'
  66. # Publically accessible UDP ports.
  67. ipset_public_udp_ports:
  68. ipset.set_present:
  69. - require:
  70. - pkg: ipset_package
  71. - onchanges_in:
  72. - cmd: do_ipset_save
  73. - set_type: bitmap:port
  74. - range: 0-65535
  75. # Default Policies
  76. # ----------------
  77. iptables_policy_input:
  78. iptables.set_policy:
  79. - save: True
  80. - chain: INPUT
  81. - policy: DROP
  82. # Prerouting rules
  83. # ----------------
  84. # These are used to bypass connection tracking on input as it is unnecessary.
  85. iptables_prerouting_localhost:
  86. iptables.append:
  87. - save: True
  88. - table: raw
  89. - chain: PREROUTING
  90. - jump: NOTRACK
  91. - in-interface: lo
  92. iptables_prerouting_backend_private_ips:
  93. iptables.append:
  94. - require:
  95. - iptables: iptables_prerouting_localhost
  96. - ipset: ipset_backend_private_ips
  97. - save: True
  98. - table: raw
  99. - chain: PREROUTING
  100. - jump: NOTRACK
  101. - in-interface: eth0
  102. - match-set: ipset_backend_private_ips src,dst
  103. iptables_prerouting_public_tcp_ports:
  104. iptables.append:
  105. - require:
  106. - iptables: iptables_prerouting_backend_private_ips
  107. - ipset: ipset_public_tcp_ports
  108. - save: True
  109. - table: raw
  110. - chain: PREROUTING
  111. - jump: NOTRACK
  112. - in-interface: eth0
  113. - proto: tcp
  114. - match-set: ipset_public_tcp_ports dst
  115. iptables_prerouting_public_udp_ports:
  116. iptables.append:
  117. - require:
  118. - iptables: iptables_prerouting_public_tcp_ports
  119. - ipset: ipset_public_udp_ports
  120. - save: True
  121. - table: raw
  122. - chain: PREROUTING
  123. - jump: NOTRACK
  124. - in-interface: eth0
  125. - proto: udp
  126. - match-set: ipset_public_udp_ports dst
  127. iptables_prerouting_icmp:
  128. iptables.append:
  129. - require:
  130. - iptables: iptables_prerouting_public_udp_ports
  131. - save: True
  132. - table: raw
  133. - chain: PREROUTING
  134. - jump: NOTRACK
  135. - in-interface: eth0
  136. - proto: icmp
  137. # Input rules
  138. # -----------
  139. iptables_input_localhost:
  140. iptables.append:
  141. - save: True
  142. - table: filter
  143. - chain: INPUT
  144. - jump: ACCEPT
  145. - in-interface: lo
  146. iptables_input_backend_private_ips:
  147. iptables.append:
  148. - require:
  149. - iptables: iptables_input_localhost
  150. - ipset: ipset_backend_private_ips
  151. - save: True
  152. - table: filter
  153. - chain: INPUT
  154. - jump: ACCEPT
  155. - in-interface: eth0
  156. - match-set: ipset_backend_private_ips src,dst
  157. iptables_input_public_tcp_ports:
  158. iptables.append:
  159. - require:
  160. - iptables: iptables_input_backend_private_ips
  161. - ipset: ipset_public_tcp_ports
  162. - save: True
  163. - table: filter
  164. - chain: INPUT
  165. - jump: ACCEPT
  166. - in-interface: eth0
  167. - proto: tcp
  168. - match-set: ipset_public_tcp_ports dst
  169. iptables_input_public_udp_ports:
  170. iptables.append:
  171. - require:
  172. - iptables: iptables_input_public_tcp_ports
  173. - ipset: ipset_public_udp_ports
  174. - save: True
  175. - table: filter
  176. - chain: INPUT
  177. - jump: ACCEPT
  178. - in-interface: eth0
  179. - proto: udp
  180. - match-set: ipset_public_udp_ports dst
  181. iptables_input_icmp:
  182. iptables.append:
  183. - require:
  184. - iptables: iptables_input_public_udp_ports
  185. - save: True
  186. - table: filter
  187. - chain: INPUT
  188. - jump: ACCEPT
  189. - in-interface: eth0
  190. - proto: icmp
  191. - match: limit
  192. - limit: 3/second
  193. - limit-burst: 3
  194. iptables_input_established:
  195. iptables.append:
  196. - require:
  197. - iptables: iptables_input_icmp
  198. - save: True
  199. - table: filter
  200. - chain: INPUT
  201. - jump: ACCEPT
  202. - in-interface: eth0
  203. - match: conntrack
  204. - ctstate: ESTABLISHED,RELATED
  205. # Output Rules
  206. # ------------
  207. # These are used to bypass connection tracking on output where it is
  208. # unnecessary.
  209. iptables_output_localhost:
  210. iptables.append:
  211. - save: True
  212. - table: raw
  213. - chain: OUTPUT
  214. - jump: NOTRACK
  215. - out-interface: lo
  216. iptables_output_backend_private_ips:
  217. iptables.append:
  218. - require:
  219. - iptables: iptables_output_localhost
  220. - ipset: ipset_backend_private_ips
  221. - save: True
  222. - table: raw
  223. - chain: OUTPUT
  224. - jump: NOTRACK
  225. - out-interface: eth0
  226. - match-set: ipset_backend_private_ips src,dst
  227. iptables_output_public_tcp_ports:
  228. iptables.append:
  229. - require:
  230. - iptables: iptables_output_backend_private_ips
  231. - ipset: ipset_public_tcp_ports
  232. - save: True
  233. - table: raw
  234. - chain: OUTPUT
  235. - jump: NOTRACK
  236. - out-interface: eth0
  237. - proto: tcp
  238. - match-set: ipset_public_tcp_ports src
  239. iptables_output_public_udp_ports:
  240. iptables.append:
  241. - require:
  242. - iptables: iptables_output_public_tcp_ports
  243. - ipset: ipset_public_udp_ports
  244. - save: True
  245. - table: raw
  246. - chain: OUTPUT
  247. - jump: NOTRACK
  248. - out-interface: eth0
  249. - proto: udp
  250. - match-set: ipset_public_udp_ports src
  251. iptables_output_icmp:
  252. iptables.append:
  253. - require:
  254. - iptables: iptables_output_public_udp_ports
  255. - save: True
  256. - table: raw
  257. - chain: OUTPUT
  258. - jump: NOTRACK
  259. - out-interface: eth0
  260. - proto: icmp