SELinux: integrace se Zabbixem a dalšími nástroji

Co nás čeká?

V tomto článku se podrobně seznámíme se základy SELinuxu, jeho správnou integrací se Zabbixem a ukážeme si, jak efektivně vytvářet vlastní SELinux politiky pro řešení nejčastějších problémů. Dále si předvedeme, jak SELinux monitorovat přímo v Zabbixu, což vám pomůže zvýšit bezpečnost vašich systémů a zároveň usnadní každodenní administraci.

Návod je určen pro distribuce na bázi RPM. (RHEL, CentOS, Rocky Linux, ALMA, Fedora,…)

Co je SELinux a jak funguje?

SELinux (Security-Enhanced Linux) je bezpečnostní modul Linuxu, který implementuje povinné řízení přístupu (Mandatory Access Control, MAC). Na rozdíl od standardního řízení přístupu (Discretionary Access Control, DAC), kde uživatelé určují práva ke svým souborům, MAC definuje bezpečnostní politiky spravované administrátorem, které omezují akce programů a uživatelů na základě jasně definovaných pravidel.

SELinux pracuje ve třech režimech:

  • Enforcing – politiky jsou vynucovány, přístup je aktivně blokován při porušení pravidel.
  • Permissive – SELinux je aktivní, ale neblokuje přístup, pouze loguje porušení pravidel.
  • Disabled – SELinux je zcela vypnutý.

Stav SELinux zjistíte příkazem:

sestatus

Příklad výstupu:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      33
  • enabled – SELinux je aktivní.
  • enforcing – Politika je vynucována.
  • targeted – Používá se standardní cílená politika.

Zabbix balíček zabbix-selinux-policy

Balíček zabbix-selinux-policy obsahuje specifická pravidla SELinuxu potřebná pro hladký běh Zabbix serveru, proxy a agenta, aniž by bylo nutné SELinux vypínat. Balíček je dostupný v oficiálním Zabbix repozitáři.

Instalace balíčku:

dnf install zabbix-selinux-policy

Dočasné vypnutí SELinuxu

Pokud potřebujete SELinux rychle deaktivovat, použijte:

setenforce 0
  • 0 znamená přepnutí do režimu Permissive (vše povoleno, incidenty se pouze logují).
  • 1 znamená přepnutí zpět do režimu Enforcing (incidenty se blokují a logují).

Změna je platná jen do restartu systému. Ověřit aktuální režim:

getenforce

Permanentní vypnutí SELinuxu

Pro trvalé vypnutí SELinuxu upravte /etc/selinux/config:

nano /etc/selinux/config

Změňte:

SELINUX=enforcing

na

SELINUX=disabled

Restartujte systém:

reboot

Opětovné zapnutí SELinuxu a relabel

Pro opětovné aktivování SELinuxu je doporučeno nejprve nastavit režim permissive, ověřit správnost politik a teprve poté přejít do režimu enforcing. Nastavte tedy nejprve:

SELINUX=permissive

Poté nastavte relabel:

touch /.autorelabel
reboot

Soubor .autorelabel vytvořte přímo v /. Tento proces po restartu nastaví správné SELinux kontexty. Kontext souborů označuje metadata, která definují, jaká SELinux pravidla se na daný soubor vztahují. Pokud by relabel neproběhl, soubory (např. /etc/passwd) budou mít nesprávný nebo žádný kontext, což může vést k nemožnosti přihlášení.

Po ověření režimu permissive můžete přejít na enforcing. Nejprve změňte konfiguraci v souboru /etc/selinux/config:

SELINUX=enforcing

Tato změna se aplikuje po restartu systému. Pro okamžitou aplikaci změny bez restartu použijte příkaz:

setenforce 1

Vytváření vlastních politik SELinux

Pokud SELinux blokuje operaci aplikace zabbix_server, zjistíte to z logů auditd:

grep AVC /var/log/audit/audit.log | grep zabbix_server

Příklad záznamu:

type=AVC msg=audit(1743521737.355:209): avc: denied { name_bind } for pid=1620 comm="zabbix_server" src=10055 scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:object_r:unreserved_port_t:s0 tclass=tcp_socket permissive=0

Tato chyba ukazuje, že SELinux brání Zabbix serveru použít port 10055. K vytvoření pravidla, které tuto akci povolí, nainstalujte nástroj audit2allow:

dnf install policycoreutils policycoreutils-python-utils -y

Vytvořte politiku pro Zabbix server

Spusťte příkaz:

grep zabbix_server /var/log/audit/audit.log | audit2allow -m zabbix_server_policy > zabbix_server_policy.te

Co dělají jednotlivé části:

  • grep zabbix_server /var/log/audit/audit.log: Vybere z audit logu pouze záznamy týkající se Zabbix serveru.
  • audit2allow -m zabbix_server_policy: Analyzuje výstup a vytvoří návrh politiky SELinuxu

Ukázka obsahu souboru zabbix_server_policy.te:

module zabbix_server_policy 1.0;

require {
	type krb5_keytab_t;
	type unreserved_port_t;
	type zabbix_t;
	class dir search;
	class tcp_socket name_bind;
}

#============= zabbix_t ==============
allow zabbix_t krb5_keytab_t:dir search;

#!!!! This avc can be allowed using the boolean 'nis_enable

Tento soubor obsahuje pravidla, která povolují Zabbix serveru:

  • Používat konkrétní porty (např. nerezervované porty),
  • Prohledávat adresáře se soubory Kerberos klíčů (krb5_keytab_t).

module zabbix_server_policy 1.0;
→ Název a verze modulu.

require { ... }
→ Modul potřebuje přístup k těmto věcem:

  • krb5_keytab_t → soubory s Kerberos klíči (např. /etc/krb5.keytab)
  • unreserved_port_t → běžné síťové porty
  • zabbix_t → proces Zabbix serveru
  • dir search → umožňuje procházet adresáře
  • tcp_socket name_bind → umožňuje bindnout se na TCP port

allow zabbix_t krb5_keytab_t:dir search;
→ Zabbix může procházet adresář s Kerberos klíčem.

#!!!! This avc can be allowed using the boolean 'nis_enable'
→ Komentář: něco podobného by šlo povolit pomocí booleanu 'nis_enable'.

Bezpečnostní poznámka:
Tento příklad zároveň ukazuje potenciální nevýhodu automatizovaného vytváření pravidel pomocí audit2allow.
Může dojít k tomu, že se spolu s potřebnými pravidly omylem povolí i přístupy, které nejsou žádoucí – například k souborům s Kerberos klíči.
Proto je důležité výstup ze audit2allow pečlivě zkontrolovat a upravit, než se politika zkompiluje a aplikuje.

Dále pravidlo zkompilujte a aplikujte:

checkmodule -M -m -o zabbix_server_policy.mod zabbix_server_policy.te
semodule_package -o zabbix_server_policy.pp -m zabbix_server_policy.mod
semodule -i zabbix_server_policy.pp
  • checkmodule -M -m: Zkompiluje .te soubor do .mod modulu.
  • semodule_package: Převede .mod soubor na .pp instalační balíček.
  • semodule -i: Instaluje vytvořený balíček politik do systému SELinux.

Ověření aplikace politiky:

semodule -l | grep zabbix_server_policy

Výstup by měl ukázat nainstalovanou politiku zabbix_server_policy, což potvrzuje její úspěšnou aplikaci do systému SELinux.

Pro vylistování SELinux politik například pro Zabbix použijte

semodule -l | grep zabbix

Tento příkaz zobrazí všechny aktuálně nainstalované SELinux moduly, které mají v názvu „zabbix“.

zabbix
zabbix_server_policy

Chcete-li si zobrazit, jaká pravidla obsahuje konkrétní SELinux modul (např. zabbix_server_policy), můžete použít následující postup:

mkdir -p /tmp/policyview && \
cd /tmp/policyview && \
semodule --extract zabbix_server_policy && \
strings zabbix_server_policy.pp

Doplnění existující SELinux politiky o nové pravidlo

Pokud potřebujete později doplnit existující politiku o další pravidlo, upravte existující .te soubor (např. přidejte další allow pravidlo) a opakujte celý postup kompilace a aplikace politiky:

checkmodule -M -m -o zabbix_server_policy.mod zabbix_server_policy.te
semodule_package -o zabbix_server_policy.pp -m zabbix_server_policy.mod
semodule -i zabbix_server_policy.pp

SELinux automaticky aktualizuje existující politiku novými pravidly, aniž by bylo nutné původní politiku odstraňovat.

grep zabbix_server /var/log/audit/audit.log | audit2allow -m zabbix_server_policy > zabbix_server_policy.te

Jak odstraním vlastní SELinux politiku?

Použijte příkaz semodule:

semodule -r zabbix_server_policy

Monitoring SELinuxu pomocí Zabbixu

Abychom mohli SELinux monitorovat, musíme nejdříve získat oprávnění ke čtení příslušného log souboru. Bezpečnou cestou je přesměrovat jeho obsah do samostatného souboru, který bude vytvořen speciálně pro náš účel a dostupný pro Zabbix agenta – nikoliv změnou oprávnění na původních systémových souborech, čímž zachováme bezpečnostní standardy systému.

NASLEDUJCI SEKCE JE TODO

Přesměrování SELinux logů

Vytvoř nebo uprav /etc/rsyslog.d/auditd-forward.conf:

nano /etc/rsyslog.d/auditd-forward.conf

A dej tam:

:programname, isequal, "auditd" /var/log/zabbix/selinux_audit.log
& stop

Poté restartuj rsyslog:

systemctl restart rsyslog

Logrotate pro nový log

Vytvoř /etc/logrotate.d/zabbix_selinux_audit:

nano /etc/logrotate.d/zabbix_selinux_audit

A vlož:

/var/log/zabbix/selinux_audit.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    create 0644 zabbix zabbix
    postrotate
        /bin/systemctl reload rsyslog >/dev/null 2>&1 || true
    endscript
}

Doporučení: SELinux je důležitou součástí zabezpečení systému a obecně není doporučeno jej vypínat. Balíček zabbix-selinux-policy řeší většinu běžných problémů se Zabbixem, ale nestandardní operace (např. specifické porty nebo přístup k nestandardním souborům) musí administrátor řešit vlastními politikami, jak je popsáno výše. Investujte proto čas do studia SELinux, abyste mohli efektivně spravovat bezpečnostní politiky.

×Košík

Your cart is empty.