Re: [PATCH v3] Improve network_support.md

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Aug 1, 2020 at 5:26 AM Topi Miettinen <toiwoton@xxxxxxxxx> wrote:
>
> List all access control methods available for networking and provide
> examples for each.
>
> Signed-off-by: Topi Miettinen <toiwoton@xxxxxxxxx>
>
> ---
> v2: address comments from Richard Haines
> v3: address comments from Paul Moore
> ---
>  src/network_statements.md |   2 +-
>  src/network_support.md    | 225 ++++++++++++++++++++++++++++++++++----
>  2 files changed, 207 insertions(+), 20 deletions(-)
>
> diff --git a/src/network_statements.md b/src/network_statements.md
> index ef1c873..a2213d4 100644
> --- a/src/network_statements.md
> +++ b/src/network_statements.md
> @@ -102,7 +102,7 @@ the interface to a security context.
>  <tr>
>  <td><code>packet_context</code></td>
>  <td><p>The security context allocated packets. Note that these are defined but unused.</p>
> -<p>The iptables(8)/nftables(8) <a href="network_support.md#secmark">SECMARK services</a> should be used to label packets.</p></td>
> +<p>The iptables(8)/nftables(8) <a href="network_support.md#packet-controls-secmark">SECMARK services</a> should be used to label packets.</p></td>
>  </tr>
>  </tbody>
>  </table>
> diff --git a/src/network_support.md b/src/network_support.md
> index 309e863..e3101ee 100644
> --- a/src/network_support.md
> +++ b/src/network_support.md
> @@ -1,20 +1,51 @@
>  # SELinux Networking Support
>
> -SELinux supports the following types of network labeling:
> +SELinux controls network access in kernel at two locations: at the

"in the kernel"

> +socket interface, and when packets are processed by the protocol
> +stacks. Controls at socket interface are invoked when a task makes

"at the socket interface"

> +network related system calls and thus the access permission checks
> +mimic the sockets programming interface (e.g. ***bind**(2)*
> +vs. `node_bind`). Packet controls are more distant from applications
> +and they are invoked whenever any packets are received, forwarded or
> +sent.
> +
> +Packet level controls include:
> +* Packet labeling with SECMARK: class `packet`
> +* Peer labeling with Labeled IPSec or NetLabel: class `peer`
> +* Interface control: class `netif`
> +* Network node control: class `node`
> +
> +Controls at socket interface include:
> +* TCP/UDP/SCTP/DCCP ports: class `port`
> +
> +Packet controls can be organized further according to the source of
> +the label for the packets, which can be internal or external:
>
>  **Internal labeling** - This is where network objects are labeled and
>  managed internally within a single machine (i.e. their labels are not
>  transmitted as part of the session with remote systems). There are two
> -types supported: SECMARK and NetLabel. There was a service known as
> +types supported: SECMARK and NetLabel. As an example, SECMARK access

Instead of just "NetLabel" here we should probably give some
indication that this is NetLabel with the static/fallback "protocol".

> +controls could restrict `firefox_t` to talking only to network
> +services on TCP port 80 while NetLabel fallback/static rules could
> +restrict `firefox_t` to only receive data from specific IP addresses
> +on a specific network interface.  There was a service known as
>  'compat_net' controls, however that was removed in kernel 2.6.30.

I wonder if it is even worth mentioning compat_net here, without any
explanation of the controls it just seems confusing.

2.6.30 was released over 11 years ago.

>  **Labeled Networking** - This is where labels are passed to/from remote
>  systems where they can be interpreted and a MAC policy enforced on each
>  system. There are three types supported: Labeled IPSec, CIPSO
>  (Commercial IP Security Option) and CALIPSO (Common Architecture Label
> -IPv6 Security Option)
> +IPv6 Security Option). With labeled networking, it's possible to

Similar to my comments above, there should be some indication of
NetLabel here, e.g. "NetLabel/CIPSO"; I fear this will be confusing
otherwise.

> +compare the security attributes (SELinux label) of the sending peer
> +with the security context of the receiving peer. A simple example with
> +Labeled IPSec is restricting `firefox_t` to talking only to `httpd_t`,
> +while CIPSO/CALIPSO could restrict domains with MLS security level
> +`s32` not to talk with domains with level `s31`.
>
> -There are two policy capability options that can be set within policy
> +Networking support is not enabled by default. It can be enabled either
> +the policy capabilities or by loading SECMARK rules.

It may be more accurate to say that the SELinux network access
controls are not enforced by default; they must first be configured or
forced on by the "always_check_network" policy capability.

> +There are three policy capability options that can be set within policy
>  using the `policycap` statement that affect networking configuration:
>
>  **`network_peer_controls`** - This is always enabled in the latest
> @@ -37,8 +68,14 @@ The policy capability settings are available in userspace via the
>  SELinux filesystem as shown in the
>  [**SELinux Filesystem**](lsm_selinux.md#selinux-filesystem) section.
>
> -To support peer labeling, CIPSO and CALIPSO the NetLabel tools need to
> -be installed:
> +NetLabel is a framework for explicit network labeling that abstracts
> +away the underlying labeling protocol from the LSMs. Labeled IPsec and
> +the NetLabel framework are the current access controls for class
> +`peer`, with NetLabel supporting CIPSO for IPv4, CALIPSO for IPv6, and
> +a fallback/static labeling for unlabeled IPv4 and IPv6 networks.

It seems like it might be better to move this explanation closer to
the top of this section.

> +To support peer labeling with CIPSO and CALIPSO or fallback labeling,
> +the NetLabel tools need to be installed:
>
>  `dnf install netlabel_tools`
>

-- 
paul moore
www.paul-moore.com



[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux