User Tools

Site Tools


linux:classnotes:rh134:selinux-ports

Control SELinux Port Labeling

SELinux Port Labeling

In addition to file context and process type labeling, SELinux labels network ports with an SELinux context. SELinux controls network access by labeling the network ports and including rules in a service's targeted policy. For example, the SSH targeted policy includes the 22/TCP port with an ssh_port_t port context label. In the HTTP policy, the default 80/TCP and 443/TCP ports use an http_port_t port context label.

When a targeted process attempts to open a port for listening, SELinux verifies that the policy includes entries that enable the binding of the process and the context. SElinux can then block a rogue service from taking over ports that other legitimate network services use.

Typically, the targeted policy already labeled all expected ports with the correct type. For example, because port 8008/TCP is often used for web applications, that port is already labeled with http_port_t, which is the default port type that a web server uses. Individual ports can be labeled with only one port context.

List Port Laberls

Use grep commands to get a list of the ports used by a service

 grep gopher /etc/services 

Then use semanage to get list of selinux label

 semanage port -l | grep ftp 
ftp_data_port_t                tcp      20
ftp_port_t                     tcp      21, 989, 990
ftp_port_t                     udp      989, 990
tftp_port_t                    udp      69 

Use the semanage command to assign new port labels, remove port labels, and modify existing ones.

You can label a new port with an existing port context label (type). The semanage port command's -a option adds a new port label; the -t option denotes the type; and the -p option denotes the protocol.

[root@host ~]# semanage port -a -t port_label -p tcp|udp PORTNUMBER 

example, enable the gopher service to listen on the 71/TCP port:

[root@host~]# semanage port -a -t gopher_port_t -p tcp 71 

To see changes done to default policy use

semanage -p port -l -C 

Service-specific SELinux man pages are named by using the service name plus _selinux. These man pages include service-specific information on SELinux types, Booleans, and port types, and are not installed by default. To view a list of all of the available SELinux man pages, install the package and then run a man -k keyword search for the _selinux string.

Use the semanage command for deleting a port label, with the -d option. for example

[root@host ~]# semanage port -d -t gopher_port_t -p tcp 71

To change a port binding, when requirements change, use the -m option. for example

[root@server ~]# semanage port -m -t http_port_t -p tcp 71

troubleshooting

use the

 netstat -plnt | grep service-or-ports 

command to help troubleshoot this

also can use sealert to query if selinux blocked anything

sealert -a /var/log/audit/audit.log<code> 
linux/classnotes/rh134/selinux-ports.txt · Last modified: by 127.0.0.1