[MEGOLDVA] Portszűrés process szinten SELinux-szal
szerk.: sikerült megoldanom a problémát, az elkészült policy csomagot megtalálhatjátok ebben a kommentemben.
Szokatlan ötletem támadt: azt találtam ki, hogy lekorlátozom a desktop gépemen futó firefox-ot (de csak ezt az egy processt), hogy csak egy adott portra tudjon kapcsolódni. Mivel CentOS-t használok (6.4-es release), kézenfekvőnek tűnt az SELinux-on keresztül megoldani a korlátozást (esetleg iptables-szel kombinálva), de sajnos hosszas kísérletezgetések után sem boldogultam a feladattal.A cél:
* a firefox process csak egy adott portra (SOCKS proxy) tudjon kapcsolódni (esetleg korlátozva azt is, hogy csak localhost-ra mehessen a kapcsolat, bár a portszintű korlátozás is elegendő lenne)
* a névfeloldás is tiltva legyen (SOCKS-on keresztül kell a neveket feloldani)
* minden egyéb hálózati forgalom tiltva legyen (pl. ICMP, kapcsolódás bármilyen egyéb portra, bármilyen protokollon)
Ami eddig felmerült lehetséges megoldásként:
* egyedi kontextus létrehozása a firefox folyamatnak, amiben limitálom a hálózati hozzáféréseket
* iptables-szel vizsgálni a csomag címkéjét, és az OUTPUT láncon beállítani a korlátozást
A saját policy készítéséhez a meglévő "mozilla" policy-t klónoztam le - kiiktattam belőle minden hálózatra vonatkozó részt, és csak a szükséges portra engedélyeztem a kapcsolódást, de ez sajnos nem segített, továbbra is korlátlanul ki tudtam menni az internetre.
Az iptables-hez találtam egy modult (xt_selinux), ami tudja vizsgálni a csomagok címkéjét, de ez gyárilag nincs telepítve és azt írja a fejlesztő, hogy nem garantált a kompatibilitása, mivel olyan belső SELinux adatstruktúrákra épít, amelyek bármikor megváltozhatnak. Saját otthoni rendszerről lévén szó, ez annyira nem riaszt el, de jobban szeretném, ha a lehető legegyszerűbben, beépített eszközökkel tudnám a feladatot megoldani.
A probélma szerintem oda vezethető vissza, hogy hiába állítom be a megfelelő fájlkontextust a firefox binárisának, a process mégis unconfined domain-ben fut:
chcon user_u:object_r:mozillastrict_exec_t:s0 ~/firefox-strict/firefox
A folyamatot elindítva az alábbi látszik a ps wauxZ kimenetében:
LABEL USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 nb 7076 6.7 6.0 971740 238376 ? Sl 08:52 3:45 /home/nb/firefox-strict/firefox
Könnyen lehet, hogy félreértelmezek valamit az SELinux koncepciójában, de nem tudom, hogy mit. Más processek a nekik kijelölt domainben futnak, sejtésem szerint a firefox-nál is ezt kellene megoldani valahogy a korlátozások működéséhez:
system_u:system_r:rpcbind_t:s0 rpc 1957 0.0 0.0 18972 916 ? Ss 07:26 0:00 rpcbind
system_u:system_r:system_dbusd_t:s0-s0:c0.c1023 dbus 1972 0.0 0.0 98156 2232 ? Ssl 07:26 0:01 dbus-daemon --system
system_u:system_r:NetworkManager_t:s0 root 1983 0.0 0.1 90376 4504 ? Ssl 07:26 0:00 NetworkManager --pid-file=/var/run/NetworkManager/NetworkManager.pid
system_u:system_r:modemmanager_t:s0-s0:c0.c1023 root 1989 0.0 0.0 55832 2436 ? S 07:26 0:00 /usr/sbin/modem-manager
system_u:system_r:rpcd_t:s0 rpcuser 2004 0.0 0.0 23344 1328 ? Ss 07:26 0:00 rpc.statd
Van valami ötletetek? Mit csinálhatok rosszul?
- Tovább ([MEGOLDVA] Portszűrés process szinten SELinux-szal)
- 6758 megtekintés