Skip to content

Latest commit

 

History

History
128 lines (101 loc) · 5.43 KB

05-8-7.Opening-the-Firewall-up-for-Salt.md

File metadata and controls

128 lines (101 loc) · 5.43 KB

OPENING THE FIREWALL UP FOR SALT

Salt master使用AES加密的ZeroMQ连接与minions通信。 这些通信是通过TCP端口4505和4506完成的,TCP端口4505和4506只需要在master设备上可访问。 本文档概述了防火墙配置规则的建议。

注: 不需要在Salt minions上进行防火墙配置。 这些更改仅涉及Master节点。

FEDORA 18 AND BEYOND / RHEL 7 / CENTOS 7

从Fedora 18开始FirewallD就是用于动态管理主机上的防火墙规则的工具。 它支持IPv4/6设置以及运行时和永久配置的分离。 要与FirewallD交互,请使用命令行客户端 firewall-cmd

firewall-cmd example:

firewall-cmd --permanent --zone=<zone> --add-port=4505-4506/tcp

网络区域zone定义了不同网络的信任安全级别。 用户应为其设置选择一个适当的区域值。 常用的zone值包括:drop,block,public,external,dmz,work,home,internal,trusted。

进行规则更改后不要忘记重新加载配置:

firewall-cmd --reload

RHEL 6 / CENTOS 6

与一些Linux发行版一起打包的lokkit命令使得通过命令行打开iptables防火墙端口变得非常简单。 请注意不要忽略打开ssh端口,避免被锁定对服务器的访问。

lokkit example:

lokkit -p 22:tcp -p 4505:tcp -p 4506:tcp

system-config-firewall-tui命令则提供了一个基于文本的界面来修改防火墙规则。

system-config-firewall-tui:

system-config-firewall-tui

OPENSUSE

Salt把使用的防火墙放行规则存放在 /etc/sysconfig/SuSEfirewall2.d/services/salt, 启动规则的方法是:

SuSEfirewall2 open
SuSEfirewall2 start

如果你有一个较旧的Salt包,其中不包含上述配置文件,则SuSEfirewall2命令可以简单地通过命令行放行iptables防火墙端口。

SuSEfirewall example:

SuSEfirewall2 open EXT TCP 4505
SuSEfirewall2 open EXT TCP 4506

YaST2中的防火墙模块提供了一个基于文本的界面来修改防火墙。

YaST2:

yast2 firewall

WINDOWS

Windows防火墙是Microsoft Windows的默认组件,提供防火墙和数据包筛选。 Windows中也有许多第三方防火墙,其中一些使用Windows防火墙中的规则。 如果遇到问题,请参阅供应商的特定文档以打开所需的端口。

可以使用Windows界面或命令行配置Windows防火墙。

Windows Firewall (interface):

  1. 通过在命令提示符下或运行对话框中键入wf.msc打开Windows防火墙接口(Windows Key + R)
  2. 导航到控制台树中的入站规则
  3. 通过单击“操作”区域中的“新建规则...”添加新规则
  4. 将规则类型更改为端口。 点击下一步
  5. 将协议设置为TCP并指定本地端口4505-4506。 点击下一步
  6. 将操作设置为允许连接。 点击下一步
  7. 将规则应用于域,私有和公共。 点击下一步
  8. 为新规则指定名称,即:Salt。 你还可以添加说明信息。 单击完成

Windows Firewall (command line):

可以通过执行单个命令来创建Windows防火墙规则。 从命令行或运行提示符运行以下命令:

netsh advfirewall firewall add rule name="Salt" dir=in action=allow protocol=TCP localport=4505-4506

IPTABLES

不同的Linux发行版将他们的iptables(也称为netfilter)规则存储在不同的地方,这使得很难标准化防火墙配置文档。 下面是一些较常见的存放地点:

Fedora / RHEL / CentOS:

/etc/sysconfig/iptables

Arch Linux:

/etc/iptables/iptables.rules

Debian

参考这份说明资料: https://wiki.debian.org/iptables

-A INPUT -m state --state new -m tcp -p tcp --dport 4505:4506 -j ACCEPT

Ubuntu

Salt 把防火墙放行规则配置文件存放在 /etc/ufw/applications.d/salt.ufw,使用以下命令启用:

ufw allow salt

PF.CONF

BSD系列操作系统使用 packet filter 包过滤器(pf)。 以下示例描述了访问Salt master所需添加到pf.conf的内容。

pass in on $int_if proto tcp from any to $int_if port 4505:4506

一旦对pf.conf进行了变更,就需要重新加载规则。 这可以使用pfctl命令完成。

pfctl -vf /etc/pf.conf

WHITELIST COMMUNICATION TO MASTER

在某些情况下,可能需要有选择地允许来自特定主机或网络的Minion流量进入Salt Master。 我想到的第一个场景是为了防止出现安全问题导致Master收到的不需要的流量,但另一种情况是在环境中安装的Salt版本之间存在向后不兼容的更改时处理Minion升级的问题。

以下是要在Master上设置的Linux iptables规则集示例:

# Allow Minions from these networks
-I INPUT -s 10.1.2.0/24 -p tcp --dports 4505:4506 -j ACCEPT
-I INPUT -s 10.1.3.0/24 -p tcp --dports 4505:4506 -j ACCEPT
# Allow Salt to communicate with Master on the loopback interface
-A INPUT -i lo -p tcp --dports 4505:4506 -j ACCEPT
# Reject everything else
-A INPUT -p tcp --dports 4505:4506 -j REJECT

注:这里要注意的重要一点是salt命令需要在loopback接口上与salt-master的监听网络套接字进行通信。 如果没有这个,你将看不到来自master的传出Salt流量,即使是简单的salt'*'test.version,因为salt客户端从未到达salt-master告诉它执行管理命令。