[refpolicy] MLS policy and networking

Paul Moore paul at paul-moore.com
Thu Mar 8 12:30:44 CST 2012


On Tuesday, February 28, 2012 02:07:52 PM David Shifflett wrote:
> I am trying to use the MLS policy to control access to various
> networks.
> 
> I am running on Fedora 13,
> # sestatus
> reports - enabled, mode enforcing, policy version 24, policy file mls
> 
> My system has eth1 192.168.2.1, and eth2 192.168.3.1.
> 
> I am trying to set the contexts correctly so that processes
> with a sensitivity of s0 can use eth1,
> and a sensitivity of s1 can use eth2
> 
> Nothing I have tried prevents a process at s1 from accessing
> a node/interface/port with a sensitivity of s0.
> 
> Here is what I have tried:
> (set everything to s0)
> semanage interface -a -r s0 -t user_t eth1
> semanage interface -a -r s0 -t user_t eth2
> semanage node -a -r s0 -t user_t -M 255.255.255.0 -p ipv4 192.168.2.1
> semanage node -a -r s0 -t user_t -M 255.255.255.0 -p ipv4 192.168.3.1
> semanage port -a -r s0 -t user_t -p tcp 55055

...

> # semanage interface -l
> eth1 system_u:object_r:user_t:s0
> eth2 system_u:object_r:user_t:s0

Sorry for such a late response, but I would suggest the following changes:

1. If you want only "s1" labeled traffic on eth2, you should probably label it 
as such, e.g. "semanage interface -a -r s1 ... eth2".

2. I would avoid using existing non-netif type names for your network 
interfaces, e.g. "semanage interface -a -t my_netif_t ethX".  While 
technically I don't think there is anything wrong (I may be wrong here) with 
using "user_t", it will probably help you to keep things straight if you use a 
type that is netif related. 

> It appears that the MLS policy isn't being enforced, or I am missing
> something.

You're missing a few more steps, but first, as Chris has already mentioned, 
check that you are not operating in the *dreaded* (feel free to add 
appropriate emphasis) "compat_net" mode.  See Chris' response to see how to 
check this on your system.

Assuming you are not in compat_net mode, you want to follow the instructions 
outlined on the page below (using your values of course):

 * http://paulmoore.livejournal.com/5536.html

The basic idea is that you need to do the following things to start enforcing 
SELinux network policy on modern kernels:

1. Set the network interface labels to match the security attributes of their 
network. (You've pretty much done this already, see my earlier comments)

2. Configure some form of labeling for incoming network traffic; if you aren't 
using either CIPSO or labeled IPsec - and odds are very good that you are not 
- you should configure a static label for incoming network traffic on each of 
your interfaces.  For example, a basic configuration that would match your 
eth1/s0 and eth2/s1 requirement would look like this (only IPv4 addresses 
shown in this example):

 # netlabelctl unlbl add interface:eth1 address:0.0.0.0/0 \
                         label:system_u:object_r:netlabel_peer_t:s0
 # netlabelctl unlbl add interface:eth2 address:0.0.0.0/0 \
                         label:system_u:object_r:netlabel_peer_t:s1

3. Write a policy module to match your desired network access control 
requirements and you are all set.

-- 
paul moore
www.paul-moore.com



More information about the refpolicy mailing list