После завершения этого раздела вы сможете назначать правильный тип SELinux сетевым портам, чтобы службы могли выполнять к ним привязку.
SELinux контролирует не только взаимодействие между файлами и процессами. Политика SELinux также регулирует сетевой трафик. Один из методов, используемых SELinux для контроля сетевого трафика, ― метки на сетевых портах. Например, в политике targeted с портом 22/TCP связана метка ssh_port_t. С HTTP-портами по умолчанию (80/TCP и 443/TCP) связана метка http_port_t.
targeted
22/TCP
ssh_port_t
80/TCP
443/TCP
http_port_t
Когда процессу требуется прослушивать порт, SELinux проверяет, разрешено ли привязывать метку, связанную с этим процессом (домен), к метке порта. Это предотвращает доступ ненадежных служб к портам, которые используются другими (допустимыми) сетевыми службами.
Если вы решите запустить службу на нестандартном порту, SELinux, скорее всего, заблокирует трафик. В этом случае необходимо обновить метки портов SELinux. В некоторых случаях политика targeted уже могла пометить порт типом, который можно использовать. Например, порт 8008/TCP часто используется для веб-приложений, поэтому он уже помечен как http_port_t (это стандартный тип порта для веб-сервера).
8008/TCP
Получение списка меток портов
Для просмотра всех назначенных меток портов используйте команду semanage port -l. Опция -l отображает список всех назначений в следующем виде:
-l
port_label_t tcp|udp comma,separated,list,of,ports
Пример вывода команды:
[root@host ~]# semanage port -l ...output omitted... http_cache_port_t tcp 8080, 8118, 8123, 10001-10010 http_cache_port_t udp 3130 http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000 ...output omitted...
[root@host ~]#
semanage port -l
Чтобы отфильтровать результаты поиска, используйте команду grep.
[root@host ~]# 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
semanage port -l | grep ftp
Обратите внимание, что метка порта может появиться в выводе дважды: один раз для TCP и один раз для UDP.
Управление метками портов
Используйте команду semanage для назначения, удаления и изменения меток портов.
Большинство стандартных служб, доступных в дистрибутиве Linux, предоставляют модуль политик SELinux, который устанавливает метки на портах. Изменить метки на этих портах с помощью команды semanage нельзя. Вместо этого необходимо заменить модуль политик. Написание и формирование модулей политик не рассматривается в этом курсе.
Чтобы добавить порт к существующей метке (типу) порта, используйте следующий синтаксис. -a добавляет новую метку порта, -t указывает тип, -p указывает протокол.
-a
-t
-p
[root@host ~]# semanage port -a -t port_label -p tcp|udp PORTNUMBER
semanage port -a -t port_label -p tcp|udp PORTNUMBER
port_label
tcp|udp
PORTNUMBER
Например, чтобы разрешить службе gopher прослушивание порта 71/TCP, выполните следующую команду:
gopher
71/TCP
[root@host~]# semanage port -a -t gopher_port_t -p tcp 71
[root@host~]#
semanage port -a -t gopher_port_t -p tcp 71
Для просмотра локальных изменений в политике по умолчанию администраторы могут добавить в команду semanage опцию -C.
-C
[root@host~]# semanage port -l -C SELinux Port Type Proto Port Number gopher_port_t tcp 71
semanage port -l -C
Политика targeted поставляется с различными типами портов.
Документацию по типам SELinux, бинарным переменным и типам портов можно найти на man-страницах SELinux для конкретных служб в пакете selinux-policy-doc. Если эти man-страницы еще не установлены в вашей системе, выполните следующие команды:
[root@host ~]# yum -y install selinux-policy-doc [root@host ~]# man -k _selinux
yum -y install selinux-policy-doc
man -k _selinux
Удаление меток портов
Синтаксис удаления нестандартной метки порта аналогичен синтаксису добавления метки, но вместо опции -a (добавить) необходимо использовать опцию -d (удалить).
-d
Например, чтобы удалить привязку порта 71/TCP к gopher_port_t, выполните следующую команду:
gopher_port_t
[root@host ~]# semanage port -d -t gopher_port_t -p tcp 71
semanage port -d -t gopher_port_t -p tcp 71
Изменение привязки портов
Чтобы изменить привязку порта (например, из-за изменения требований), используйте опцию -m (изменить). Это будет более эффективно, чем удалять старую привязку и добавлять новую.
-m
Например, чтобы изменить порт 71/TCP с gopher_port_t на http_port_t, администратор может выполнить следующую команду:
[root@server ~]# semanage port -m -t http_port_t -p tcp 71
[root@server ~]#
semanage port -m -t http_port_t -p tcp 71
Как и раньше, для просмотра изменений используйте команду semanage.
[root@server ~]# semanage port -l -C SELinux Port Type Proto Port Number http_port_t tcp 71 [root@server ~]# semanage port -l | grep http http_cache_port_t tcp 8080, 8118, 8123, 10001-10010 http_cache_port_t udp 3130 http_port_t tcp 71, 80, 81, 443, 488, 8008, 8009, 8443, 9000 pegasus_http_port_t tcp 5988 pegasus_https_port_t tcp 5989
71
semanage port -l | grep http
Man-страницы semanage(8), semanage-port(8) и *_selinux(8)