Red Hat System Administration II 8.2

Управление метками портов SELinux

Задачи

После завершения этого раздела вы сможете назначать правильный тип SELinux сетевым портам, чтобы службы могли выполнять к ним привязку.

Метки портов SELinux

Управление безопасностью портов в SELinux

SELinux контролирует не только взаимодействие между файлами и процессами. Политика SELinux также регулирует сетевой трафик. Один из методов, используемых SELinux для контроля сетевого трафика, ― метки на сетевых портах. Например, в политике targeted с портом 22/TCP связана метка ssh_port_t. С HTTP-портами по умолчанию (80/TCP и 443/TCP) связана метка http_port_t.

Когда процессу требуется прослушивать порт, SELinux проверяет, разрешено ли привязывать метку, связанную с этим процессом (домен), к метке порта. Это предотвращает доступ ненадежных служб к портам, которые используются другими (допустимыми) сетевыми службами.

Управление метками портов SELinux

Если вы решите запустить службу на нестандартном порту, SELinux, скорее всего, заблокирует трафик. В этом случае необходимо обновить метки портов SELinux. В некоторых случаях политика targeted уже могла пометить порт типом, который можно использовать. Например, порт 8008/TCP часто используется для веб-приложений, поэтому он уже помечен как http_port_t (это стандартный тип порта для веб-сервера).

Получение списка меток портов

Для просмотра всех назначенных меток портов используйте команду semanage port -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...

Чтобы отфильтровать результаты поиска, используйте команду 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

Обратите внимание, что метка порта может появиться в выводе дважды: один раз для TCP и один раз для UDP.

Управление метками портов

Используйте команду semanage для назначения, удаления и изменения меток портов.

Важно

Большинство стандартных служб, доступных в дистрибутиве Linux, предоставляют модуль политик SELinux, который устанавливает метки на портах. Изменить метки на этих портах с помощью команды semanage нельзя. Вместо этого необходимо заменить модуль политик. Написание и формирование модулей политик не рассматривается в этом курсе.

Чтобы добавить порт к существующей метке (типу) порта, используйте следующий синтаксис. -a добавляет новую метку порта, -t указывает тип, -p указывает протокол.

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

Например, чтобы разрешить службе gopher прослушивание порта 71/TCP, выполните следующую команду:

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

Для просмотра локальных изменений в политике по умолчанию администраторы могут добавить в команду semanage опцию -C.

[root@host~]# semanage port -l -C 
SELinux Port Type              Proto    Port Number

gopher_port_t                  tcp      71

Примечание

Политика targeted поставляется с различными типами портов.

Документацию по типам SELinux, бинарным переменным и типам портов можно найти на man-страницах SELinux для конкретных служб в пакете selinux-policy-doc. Если эти man-страницы еще не установлены в вашей системе, выполните следующие команды:

[root@host ~]# yum -y install selinux-policy-doc
[root@host ~]# man -k _selinux

Удаление меток портов

Синтаксис удаления нестандартной метки порта аналогичен синтаксису добавления метки, но вместо опции -a (добавить) необходимо использовать опцию -d (удалить).

Например, чтобы удалить привязку порта 71/TCP к gopher_port_t, выполните следующую команду:

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

Изменение привязки портов

Чтобы изменить привязку порта (например, из-за изменения требований), используйте опцию -m (изменить). Это будет более эффективно, чем удалять старую привязку и добавлять новую.

Например, чтобы изменить порт 71/TCP с gopher_port_t на http_port_t, администратор может выполнить следующую команду:

[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

Ссылки

Man-страницы semanage(8), semanage-port(8) и *_selinux(8)