我正在尝试为Saltstack开发一个简单的公式,它将刷新所有iptables规则并应用另一个带有更新规则的公式,因为我需要将INPUT策略切换为ACCEPT然后刷新规则。我试图通过以下方式验证:
{% set policy = salt['pillar.get']('iptables.get_policy','') %}
{% if policy == "ACCEPT" %}
flush rules:
iptables.flush:
require:
- default to accept
{% endif %}
我的sls的完整代码如下:
include:
- iptables
default to accept:
iptables.set_policy:
- chain: INPUT
- policy: ACCEPT
{% set policy = salt['iptables.get_policy'] %}
{% if policy == "ACCEPT" %}
flush rules:
iptables.flush:
require:
- default to accept
{% endif %}
iptables reapply:
require:
- sls: iptables
显然,这不起作用,任何人都可以告诉我我做错了什么,如果可能的话?
如果有人需要类似的公式,这里有适合我的公式:
include:
- iptables
default to accept:
iptables.set_policy:
- chain: INPUT
- policy: ACCEPT
- order: 1
iptables.flush:
module.run:
- name: iptables.flush
- order: 2
答案 0 :(得分:1)
我没有对此进行测试,但我认为您需要实际调用该函数。
{% set policy = salt['iptables.get_policy']() %}
确保添加()
以实际调用该函数
答案 1 :(得分:0)
在我的案例中看起来以下语法有效:
{{ salt.iptables.flush() }}
该公式的其他部分尚未发挥作用,但此问题的主要问题已得到解决。
答案 2 :(得分:0)
依靠Salt本身来做这件事有一个缺点。
如果Salt master和Salt minion之间的连接因任何原因(例如应用了错误的规则)被iptables阻止,则无效。
所以我认为最好运行系统命令来做到这一点,我的解决方案是通过at cron完成,它以测试模式运行。
iptables_flush_testing_mode:
module.run:
- name: at.at
- args:
- "now +1 min"
- |
# IPv4
iptables -P INPUT ACCEPT;
iptables -P OUTPUT ACCEPT;
iptables -P FORWARD ACCEPT;
iptables -F INPUT;
iptables -F OUTPUT;
iptables -F FORWARD;
# IPv6
ip6tables -P INPUT ACCEPT;
ip6tables -P OUTPUT ACCEPT;
ip6tables -P FORWARD ACCEPT;
ip6tables -F INPUT;
ip6tables -F OUTPUT;
ip6tables -F FORWARD;
完整状态为flush.sls