If you're running Samba on a multi-homed machine (that is, one on multiple subnets), or even if you want to implement a security policy on your own subnet, you should take a close look at the networking configuration options:
For the purposes of this exercise, let's assume that our Samba server is connected to a network with more than one subnet. Specifically, the machine can access both the 192.168.220.* and 134.213.233.* subnets. Here are our additions to the ongoing configuration file for the networking configuration options:
[global]
netbios name = HYDRA
server string = Samba %v on (%L)
workgroup = SIMPLE
# Networking configuration options
hosts allow = 192.168.220. 134.213.233. localhost
hosts deny = 192.168.220.102
interfaces = 192.168.220.100/255.255.255.0 \
134.213.233.110/255.255.255.0
bind interfaces only = yes
[data]
path = /home/samba/data
guest ok = yes
comment = Data Drive
volume = Sample-Data-Drive
writeable = yes
Let's first talk about the
hosts
allow
and
hosts
deny
options. If these options sound familiar, you're probably thinking of the
hosts.allow and
hosts.deny files that are found in the
/etc directories of many Unix systems. The purpose of these options is identical to those files; they provide a means of security by allowing or denying the connections of other hosts based on their IP addresses. Why not just use the
hosts.allow and
hosts.deny files themselves? Because there may be services on the server that you want others to access without giving them access Samba's disk or printer shares
With the
hosts
allow
option above, we've specified a cropped IP address: 192.168.220. (Note that there is still a third period; it's just missing the fourth number.) This is equivalent to saying: "All hosts on the 192.168.220 subnet." However, we've explicitly specified in a hosts deny line that 192.168.220.102 is not to be allowed access.
You might be wondering: why will 192.168.220.102 be denied even though it is still in the subnet matched by the
hosts
allow
option? Here is how Samba sorts out the rules specified by
hosts
allow
and
hosts
deny
:
-
If there are no
allow
or
deny
options defined anywhere in
smb.conf, Samba will allow connections from any machine allowed by the system itself.
-
If there are
hosts
allow
or
hosts
deny
options defined in the
[global]
section of
smb.conf, they will apply to all shares, even if the shares have an overriding option defined.
-
If there is only a
hosts
allow
option defined for a share, only the hosts listed will be allowed to use the share. All others will be denied.
-
If there is only a
hosts
deny
option defined for a share, any machine which is not on the list will be able to use the share.
-
If both a
hosts
allow
and
hosts
deny
option are defined, a host must appear in the allow list and not appear in the deny list (in any form) in order to access the share. Otherwise, the host will not be allowed.
WARNING: Take care that you don't explicitly allow a host to access a share, but then deny access to the entire subnet of which the host is part.
Let's look at another example of that final item. Consider the following options:
hosts allow = 111.222.
hosts deny = 111.222.333.
In this case, only the hosts that belong to the subnet 111.222.*.* will be allowed access to the Samba shares. However, if a client belongs to the 111.222.333.* subnet, it will be denied access, even though it still matches the qualifications outlined by
hosts
allow
. The client must appear on the
hosts
allow
list and
must not appear on the
hosts
deny
list in order to gain access to a Samba share. If a computer attempts to access a share to which it is not allowed access, it will receive an error message.
The other two options that we've specified are the
interfaces
and the
bind
interface
only
address. Let's look at the
interfaces
option first. Samba, by default, sends data only from the primary network interface, which in our example is the 192.168.220.100 subnet. If we would like it to send data to more than that one interface, we need to specify the complete list with the
interfaces
option. In the previous example, we've bound Samba to interface with both subnets (192.168.220 and 134.213.233) on which the machine is operating by specifying the other network interface address: 134.213.233.100. If you have more than one interface on your computer, you should always set this option as there is no guarantee that the primary interface that Samba chooses will be the right one.
Finally, the
bind
interfaces
only
option instructs the
nmbd process not to accept any broadcast messages other than those subnets specified with the
interfaces
option. Note that this is different from the
hosts
allow
and
hosts
deny
options, which prevent machines from making connections to services, but not from receiving broadcast messages. Using the
bind
interfaces
only
option is a way to shut out even datagrams from foreign subnets from being received by the Samba server. In addition, it instructs the
smbd process to bind to only the interface list given by the
interfaces option. This restricts the networks that Samba will serve.