Skip to contentSkip to conversation

netfilter integration

PATCH In review Christopher J. PeBenito 4 participants 11 messages Jul 17, 2006 – Jul 27, 2006 SELinux security module

lore
Share & tools
lore
#0 lore raw

cover netfilter integration

This patchset adds support for netfilter secmark rules in all policy packages. Each line of the file has a priority (1-9) at the beginning of the line, and the remainder is treated as the rule. Sorting is by priority (1-9), and is stable within a module. The current design is for the resultant netfilter_contexts file be suitable for use with iptables-restore.

This example would be the netfilter_contexts of the base module since it has the extra portions required for iptables-restore use:

1 *mangle
1 :PREROUTING ACCEPT [0:0]
1 :INPUT ACCEPT [0:0]
1 :FORWARD ACCEPT [0:0]
1 :OUTPUT ACCEPT [0:0]
1 :POSTROUTING ACCEPT [0:0]
1 :selinux_input - [0:0]
1 :selinux_output - [0:0]
1 :selinux_new_input - [0:0]
1 :selinux_new_output - [0:0]
1 -A INPUT -j selinux_input
1 -A OUTPUT -j selinux_output
1 -A selinux_input -m state --state NEW -j selinux_new_input
1 -A selinux_input -m state --state RELATED,ESTABLISHED -j CONNSECMARK --restore
1 -A selinux_output -m state --state NEW -j selinux_new_output
1 -A selinux_output -m state --state RELATED,ESTABLISHED -j CONNSECMARK --restore
1 -A selinux_new_input -j SECMARK --selctx system_u:object_r:server_packet_t
5 -A selinux_new_input -p tcp --dport 80 -j SECMARK --selctx system_u:object_r:http_server_packet_t 9 -A selinux_new_input -j CONNSECMARK --save
9 -A selinux_new_input -j RETURN
1 -A selinux_new_output -j SECMARK --selctx system_u:object_r:client_packet_t
5 -A selinux_new_output -p tcp --dport 80 -j SECMARK --selctx system_u:object_r:http_client_packet_t 9 -A selinux_new_output -j CONNSECMARK --save
9 -A selinux_new_output -j RETURN
9 COMMIT

While individual loadable modules's netfilter_contexts would look like:

5 -A selinux_new_input -p tcp --dport 443 -j SECMARK --selctx system_u:object_r:http_server_packet_t 5 -A selinux_new_output -p tcp --dport 443 -j SECMARK --selctx system_u:object_r:http_client_packet_t

The below patch to refpolicy will create a file appropriate for testing. The resultant linked and sorted file will be written out
to /etc/selinux/NAME/contexts/netfilter_contexts.

Rules.modular +2 -2
Index: Rules.modular
===================================================================
@@ -89,10 +89,10 @@
 #
 # Create a base module package
 #
-$(BASE_PKG): $(BASE_MOD) $(BASE_FC) $(USERS_EXTRA) $(SEUSERS)
+$(BASE_PKG): $(BASE_MOD) $(BASE_FC) $(USERS_EXTRA) $(SEUSERS) $(net_contexts)
 	@echo "Creating $(NAME) base module package"
 	@test -d $(BUILDDIR) || mkdir -p $(BUILDDIR)
-	$(verbose) $(SEMOD_PKG) -o $@ -m $(BASE_MOD) -f $(BASE_FC) -u $(USERS_EXTRA) -s $(SEUSERS)
+	$(verbose) $(SEMOD_PKG) -o $@ -m $(BASE_MOD) -f $(BASE_FC) -u $(USERS_EXTRA) -s $(SEUSERS) -n $(net_contexts)
 
 $(BASE_MOD): $(BASE_CONF)
 	@echo "Compiling $(NAME) base module"
gennetfilter.py +25 -25

90 lines not on this page · raw message

Signature · 9 lines
Chris PeBenito
Tresys Technology, LLC
(410) 290-1411 x150


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to [email protected] with
the words "unsubscribe selinux" without quotes as the message.
#1 lore raw

--- "Christopher J. PeBenito" <[email protected]>

Quoted 11 lines · wrote:

This patchset adds support for netfilter secmark rules in all policy
packages. Each line of the file has a priority (1-9) at the beginning
of the line, and the remainder is treated as the rule. Sorting is by
priority (1-9), and is stable within a module. The current design is
for the resultant netfilter_contexts file be suitable for use with
iptables-restore.

How confident are you that 9 priorities
will be sufficient? I can easily imaging
dependency scenarios that would exceed
this limitation. I would also expect that
explict ordering within a priority is
going to be requested as soon as this
goes into production.

Speaking of dependencies, wouldn't a
mechanism to declare dependencies a'la
make be more precise? Just a thought.

Casey Schaufler
[email protected]

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#2 lore raw
Quoted 16 lines · Casey Schaufler

--- "Christopher J. PeBenito" <[email protected]>

Quoted 11 lines · wrote:

This patchset adds support for netfilter secmark rules in all policy
packages. Each line of the file has a priority (1-9) at the beginning
of the line, and the remainder is treated as the rule. Sorting is by
priority (1-9), and is stable within a module. The current design is
for the resultant netfilter_contexts file be suitable for use with
iptables-restore.

Quoted 7 lines

How confident are you that 9 priorities
will be sufficient? I can easily imaging
dependency scenarios that would exceed
this limitation. I would also expect that
explict ordering within a priority is going to be requested as soon as this goes into production.

in reality probably 3 priorities would be sufficient. Specific port, port range and fallback. Its very doubtful that anything else would be necessary, especially in modules where the priority is much more important than in base. A module will very rarely have something more specific than ports, and since ports are non-overlapping it doesn't matter what order they are in (within a single priority)

Quoted 5 lines

Speaking of dependencies, wouldn't a mechanism to declare dependencies a'la make be more precise? Just a thought.

eh? Policy modules already declare symbol dependencies explicitly (eg., which types, roles, etc this module uses)

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#3 lore raw
Quoted 4 lines · --- Joshua Brindle

in reality probably 3 priorities would be
sufficient. Specific port,
port range and fallback. Its very doubtful that
anything else would be

Quoted 8 lines

necessary, especially in modules where the priority is much more
important than in base. A module will very rarely have something more
specific than ports, and since ports are non-overlapping it doesn't
matter what order they are in (within a single priority)

OKay.

Quoted 8 lines
Quoted 5 lines

Speaking of dependencies, wouldn't a
mechanism to declare dependencies a'la
make be more precise? Just a thought.

eh? Policy modules already declare symbol
dependencies explicitly (eg.,
which types, roles, etc this module uses)

I was thinking it terms of explict ordering
of priorities rather than definition, but
it seems you have it well in hand.

Casey Schaufler
[email protected]

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#4 lore raw
In reply to Joshua Brindle
Quoted 25 lines · Joshua Brindle
Quoted 16 lines · Casey Schaufler

--- "Christopher J. PeBenito" <[email protected]>

Quoted 11 lines · wrote:

This patchset adds support for netfilter secmark rules in all policy
packages. Each line of the file has a priority (1-9) at the beginning
of the line, and the remainder is treated as the rule. Sorting is by
priority (1-9), and is stable within a module. The current design is
for the resultant netfilter_contexts file be suitable for use with
iptables-restore.

Quoted 8 lines

How confident are you that 9 priorities will be sufficient? I can easily imaging dependency scenarios that would exceed this limitation. I would also expect that explict ordering within a priority is going to be requested as soon as this goes into production.

Quoted 7 lines

in reality probably 3 priorities would be sufficient. Specific port, port range and fallback. Its very doubtful that anything else would be necessary, especially in modules where the priority is much more important than in base. A module will very rarely have something more specific than ports, and since ports are non-overlapping it doesn't matter what order they are in (within a single priority)

Then the 9 nine numbered port ranges are implying generality where there isn't actually any. Why not just create those 3 priorities with _names_ to make the intent clear?

Karl

Quoted 5 lines
Quoted 5 lines

Speaking of dependencies, wouldn't a mechanism to declare dependencies a'la make be more precise? Just a thought.

Quoted 8 lines

eh? Policy modules already declare symbol dependencies explicitly (eg., which types, roles, etc this module uses)

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#5 lore raw

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#6 lore raw

--- "Christopher J. PeBenito" <[email protected]>

Quoted 11 lines · wrote:

I don't feel this is sufficient since you may want your module's rule to
override a rules in the other modules, so you want a higher priority
than what those have. If, for example, you throw specific port ranges
into a big bucket, then there's no way to do this. In addition, you can
create netfilter rules far more complicated than just a specific port or
ranges.

That's the argument for generality and I
suggest that 9 ain't general. How many rules
are there in the policy now? You can go
with a small fixed number of priorities to
address the problem you have today, in
which case names make more sense, or you
can provide a general scheme in which case
9 is way too small.

Now, as far as inter-module priorities go,
numbers just don't make sense. What you
want is symbolic names and a way to say that
"HIGH" in module foo has a higher priority
than "HIGH" in module bar. You will never
get a rational numeric priority ranking
with multiple free thinking developers of
otherwise independent policy modules,
regardless of the granularity.

Casey Schaufler
[email protected]

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#7 lore raw
Quoted 17 lines · Casey Schaufler

--- "Christopher J. PeBenito" <[email protected]>

Quoted 11 lines · wrote:

I don't feel this is sufficient since you may want your module's rule to
override a rules in the other modules, so you want a higher priority
than what those have. If, for example, you throw specific port ranges
into a big bucket, then there's no way to do this. In addition, you can
create netfilter rules far more complicated than just a specific port or
ranges.

Quoted 3 lines

That's the argument for generality and I suggest that 9 ain't general. How many rules are there in the policy now?

432

Quoted 9 lines

You can go
with a small fixed number of priorities to address the problem you have today, in which case names make more sense, or you can provide a general scheme in which case 9 is way too small.

Now, as far as inter-module priorities go, numbers just don't make sense.

So after further discussion internally, we were thinking that there likely not going to be intermodule dependencies. Oracle netfilter contexts aren't going to conflict with apache's. Modules are going to want to override the contexts in the base module.

So we were thinking that we should do something similar to how other parts of the policy are manged, with having base rules, module rules, local rules, pre, and post rules. The pre and post rules would be special rules that have to come at the beginning or end of the netfilter_contexts file (see the 1's and 9's in my original 0/6 email). Then base would be low priority, module would be middle priority, and local would be high priority. Modules that are packaged with an app should have the module priority. The local priority would allow users to use the infrastructure to create packages for their own use, for example, for applying the rules to a network of machines (manually or policy server in the future), which would be more convenient then applying rules to iptables by hand on all the machines.

Signature · 9 lines
Chris PeBenito
Tresys Technology, LLC
(410) 290-1411 x150


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to [email protected] with
the words "unsubscribe selinux" without quotes as the message.
#8 lore raw

On Wednesday 26 July 2006 10:23, Christopher J. PeBenito wrote:

<snip>

Quoted 5 lines

So after further discussion internally, we were thinking that there likely not going to be intermodule dependencies. Oracle netfilter contexts aren't going to conflict with apache's. Modules are going to want to override the contexts in the base module.

Quoted 12 lines

So we were thinking that we should do something similar to how other parts of the policy are manged, with having base rules, module rules, local rules, pre, and post rules. The pre and post rules would be special rules that have to come at the beginning or end of the netfilter_contexts file (see the 1's and 9's in my original 0/6 email). Then base would be low priority, module would be middle priority, and local would be high priority. Modules that are packaged with an app should have the module priority. The local priority would allow users to use the infrastructure to create packages for their own use, for example, for applying the rules to a network of machines (manually or policy server in the future), which would be more convenient then applying rules to iptables by hand on all the machines.

This sounds much better to me.

Karl

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#9 lore raw
In reply to Christopher J. PeBenito

--- "Christopher J. PeBenito" <[email protected]>

Quoted 6 lines · wrote:
Quoted 2 lines

Now, as far as inter-module priorities go,
numbers just don't make sense.

So after further discussion internally, we were
thinking that there
likely not going to be intermodule dependencies.

I don't believe that for a minute.

Quoted 4 lines

Oracle netfilter
contexts aren't going to conflict with apache's.
Modules are going to
want to override the contexts in the base module.

Oracle may not conflict with apache, but what
about MySQL or, heaven forbid, earlier versions
of Oracle? You can bet on independent developers
in the same problem space developing conflicting
protection schemes.

Quoted 7 lines

So we were thinking that we should do something similar to how other
parts of the policy are manged, with having base rules, module rules,
local rules, pre, and post rules. The pre and post rules would be
special rules that have to come at the beginning or

Quoted 8 lines

end of the
netfilter_contexts file (see the 1's and 9's in my original 0/6 email).
Then base would be low priority, module would be middle priority, and
local would be high priority. Modules that are packaged with an app
should have the module priority.

There will be conflicts. You need a scheme
for dealing with two modules at the same
"priority" with different rules.

Quoted 10 lines

The local priority
would allow users
to use the infrastructure to create packages for
their own use, for
example, for applying the rules to a network of
machines (manually or
policy server in the future), which would be more
convenient then
applying rules to iptables by hand on all the
machines.

Casey Schaufler
[email protected]

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.

#10 lore raw
Quoted 8 lines · Casey Schaufler

--- "Christopher J. PeBenito" <[email protected]>

Quoted 3 lines · wrote:
Quoted 3 lines

Now, as far as inter-module priorities go,
numbers just don't make sense.

Quoted 8 lines
Quoted 4 lines

So after further discussion internally, we were
thinking that there
likely not going to be intermodule dependencies.

I don't believe that for a minute.

The current policies suggest otherwise - use the new semodule_deps tool if you don't believe me.

Quoted 5 lines
Quoted 4 lines

Oracle netfilter
contexts aren't going to conflict with apache's. Modules are going to want to override the contexts in the base module.

Quoted 7 lines

Oracle may not conflict with apache, but what about MySQL or, heaven forbid, earlier versions of Oracle? You can bet on independent developers in the same problem space developing conflicting protection schemes.

Local overrides allow an administrator choose when there are conflicts. What's the alternative?

Quoted 17 lines
Quoted 7 lines

So we were thinking that we should do something similar to how other
parts of the policy are manged, with having base rules, module rules,
local rules, pre, and post rules. The pre and post rules would be
special rules that have to come at the beginning or

Quoted 9 lines

end of the
netfilter_contexts file (see the 1's and 9's in my original 0/6 email).
Then base would be low priority, module would be middle priority, and
local would be high priority. Modules that are packaged with an app
should have the module priority.

Quoted 5 lines

There will be conflicts. You need a scheme for dealing with two modules at the same "priority" with different rules.

One set of rules will win based on ordering. Unfortunately there is no good way for the toolchain to make a choice here and allowing the administrator to override both modules seems like the best alternative to me.

Karl

Quoted 6 lines

Casey Schaufler
[email protected]

--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.