=====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