6.7 KiB
Opening the Firewall up for Salt
The Salt master communicates with the minions using an AES-encrypted ZeroMQ connection. These communications are done over TCP ports 4505 and 4506, which need to be accessible on the master only. This document outlines suggested firewall rules for allowing these incoming connections to the master.
Note
No firewall configuration needs to be done on Salt minions. These changes refer to the master only.
Fedora 18 and beyond / RHEL 7 / CentOS 7
Starting with Fedora 18 FirewallD is the
tool that is used to dynamically manage the firewall rules on a host. It
has support for IPv4/6 settings and the separation of runtime and
permanent configurations. To interact with FirewallD use the command
line client firewall-cmd
.
firewall-cmd example:
firewall-cmd --permanent --zone=<zone> --add-port=4505-4506/tcp
A network zone defines the security level of trust for the the network. The user should choose an appropriate zone value for their setup. Possible values include: drop, block, public, external, dmz, work, home, internal, trusted.
Don't forget to reload after you made your changes.
firewall-cmd --reload
RHEL 6 / CentOS 6
The lokkit
command packaged with some Linux
distributions makes opening iptables firewall ports very simple via the
command line. Just be careful to not lock out access to the server by
neglecting to open the ssh port.
lokkit example:
lokkit -p 22:tcp -p 4505:tcp -p 4506:tcp
The system-config-firewall-tui
command provides a
text-based interface to modifying the firewall.
system-config-firewall-tui:
system-config-firewall-tui
openSUSE
Salt installs firewall rules in /etc/sysconfig/SuSEfirewall2.d/services/salt <pkg/suse/salt.SuSEfirewall2>
.
Enable with:
SuSEfirewall2 open
SuSEfirewall2 start
If you have an older package of Salt where the above configuration
file is not included, the SuSEfirewall2
command makes
opening iptables firewall ports very simple via the command line.
SuSEfirewall example:
SuSEfirewall2 open EXT TCP 4505
SuSEfirewall2 open EXT TCP 4506
The firewall module in YaST2 provides a text-based interface to modifying the firewall.
YaST2:
yast2 firewall
Windows
Windows Firewall is the default component of Microsoft Windows that provides firewalling and packet filtering. There are many 3rd party firewalls available for Windows, some of which use rules from the Windows Firewall. If you are experiencing problems see the vendor's specific documentation for opening the required ports.
The Windows Firewall can be configured using the Windows Interface or from the command line.
Windows Firewall (interface):
- Open the Windows Firewall Interface by typing
wf.msc
at the command prompt or in a run dialog (Windows Key + R) - Navigate to Inbound Rules in the console tree
- Add a new rule by clicking New Rule... in the Actions area
- Change the Rule Type to Port. Click Next
- Set the Protocol to TCP and specify local ports 4505-4506. Click Next
- Set the Action to Allow the connection. Click Next
- Apply the rule to Domain, Private, and Public. Click Next
- Give the new rule a Name, ie: Salt. You may also add a description. Click Finish
Windows Firewall (command line):
The Windows Firewall rule can be created by issuing a single command. Run the following command from the command line or a run prompt:
netsh advfirewall firewall add rule name="Salt" dir=in action=allow protocol=TCP localport=4505-4506
iptables
Different Linux distributions store their iptables (also known as netfilter) rules in different places, which makes it difficult to standardize firewall documentation. Included are some of the more common locations, but your mileage may vary.
Fedora / RHEL / CentOS:
/etc/sysconfig/iptables
Arch Linux:
/etc/iptables/iptables.rules
Debian
Follow these instructions: https://wiki.debian.org/iptables
Once you've found your firewall rules, you'll need to add the below
line to allow traffic on tcp/4505
and
tcp/4506
:
-A INPUT -m state --state new -m tcp -p tcp --dport 4505:4506 -j ACCEPT
Ubuntu
Salt installs firewall rules in /etc/ufw/applications.d/salt.ufw
<pkg/salt.ufw>
. Enable with:
ufw allow salt
pf.conf
The BSD-family of operating systems uses packet filter (pf). The following
example describes the addition to pf.conf
needed to access
the Salt master.
pass in on $int_if proto tcp from any to $int_if port 4505:4506
Once this addition has been made to the pf.conf
the
rules will need to be reloaded. This can be done using the
pfctl
command.
pfctl -vf /etc/pf.conf
Whitelist communication to Master
There are situations where you want to selectively allow Minion traffic from specific hosts or networks into your Salt Master. The first scenario which comes to mind is to prevent unwanted traffic to your Master out of security concerns, but another scenario is to handle Minion upgrades when there are backwards incompatible changes between the installed Salt versions in your environment.
Here is an example Linux iptables <linux-iptables>
ruleset to be
set on the Master:
# 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
Note
The important thing to note here is that the salt
command needs to communicate with the listening network socket of
salt-master
on the loopback interface. Without
this you will see no outgoing Salt traffic from the master, even for a
simple salt '*' test.version
, because the salt
client never reached the salt-master
to tell it to carry
out the execution.